Line data Source code
1 : #include <stdio.h>
2 :
3 : exec sql include ../regression;
4 :
5 : EXEC SQL WHENEVER sqlerror sqlprint;
6 : EXEC SQL WHENEVER sqlwarning sqlprint;
7 : EXEC SQL WHENEVER not found sqlprint;
8 :
9 : EXEC SQL TYPE customer IS
10 : struct
11 : {
12 : varchar name[50];
13 : int phone;
14 : };
15 :
16 : EXEC SQL TYPE cust_ind IS
17 : struct ind
18 : {
19 : short name_ind;
20 : short phone_ind;
21 : };
22 :
23 : EXEC SQL TYPE company IS
24 : struct
25 : {
26 : customer customers[10];
27 : };
28 :
29 0 : int main()
30 : {
31 : EXEC SQL begin declare section;
32 0 : customer custs1[10];
33 0 : cust_ind inds[10];
34 : typedef struct
35 : {
36 : varchar name[50];
37 : int phone;
38 : } customer2;
39 0 : customer2 custs2[10];
40 : struct customer3
41 : {
42 : varchar name[50];
43 : int phone;
44 0 : } custs3[10];
45 : struct customer4
46 : {
47 : varchar name[50];
48 : int phone;
49 0 : } custs4;
50 :
51 0 : company acme;
52 :
53 0 : int r;
54 0 : varchar onlyname[2][50];
55 : EXEC SQL end declare section;
56 :
57 0 : ECPGdebug(1, stderr);
58 :
59 0 : EXEC SQL connect to REGRESSDB1;
60 0 :
61 0 : EXEC SQL create table customers (c varchar(50), p int);
62 0 :
63 : /* First we'll insert some data using C variable references */
64 0 : strcpy(custs1[0].name.arr, "John Doe");
65 0 : custs1[0].name.len = strlen(custs1[0].name.arr);
66 0 : custs1[0].phone = 12345;
67 :
68 0 : strcpy(acme.customers[1].name.arr, "Jane Doe");
69 0 : acme.customers[1].name.len = strlen(acme.customers[1].name.arr);
70 0 : acme.customers[1].phone = 67890;
71 :
72 0 : EXEC SQL insert into customers values (:custs1->name,
73 0 : :custs1[0].phone);
74 0 : EXEC SQL insert into customers values (:acme.customers[1].name,
75 0 : :acme.customers[1].phone);
76 0 :
77 0 : /* Clear the array, to be sure reading back into it actually gets data */
78 0 : memset(custs1, 0, sizeof(customer) * 10);
79 :
80 : /* Now read back the data */
81 0 : EXEC SQL select * INTO :custs1:inds from customers limit 2;
82 0 : printf("custs1:\n");
83 0 : for (r = 0; r < 2; r++)
84 0 : {
85 0 : printf( "name - %s\n", custs1[r].name.arr );
86 0 : printf( "phone - %d\n", custs1[r].phone );
87 0 : }
88 :
89 0 : EXEC SQL select * INTO :custs2:inds from customers limit 2;
90 0 : printf("\ncusts2:\n");
91 0 : for (r = 0; r < 2; r++)
92 0 : {
93 0 : printf( "name - %s\n", custs2[r].name.arr );
94 0 : printf( "phone - %d\n", custs2[r].phone );
95 0 : }
96 :
97 0 : EXEC SQL select * INTO :custs3:inds from customers limit 2;
98 0 : printf("\ncusts3:\n");
99 0 : for (r = 0; r < 2; r++)
100 0 : {
101 0 : printf( "name - %s\n", custs3[r].name.arr );
102 0 : printf( "phone - %d\n", custs3[r].phone );
103 0 : }
104 :
105 0 : EXEC SQL select * INTO :custs4:inds[0] from customers limit 1;
106 0 : printf("\ncusts4:\n");
107 0 : printf( "name - %s\n", custs4.name.arr );
108 0 : printf( "phone - %d\n", custs4.phone );
109 0 :
110 0 : EXEC SQL select c INTO :onlyname from customers limit 2;
111 0 : printf("\nname:\n");
112 0 : for (r = 0; r < 2; r++)
113 : {
114 0 : printf( "name - %s\n", onlyname[r].arr );
115 0 : }
116 :
117 0 : EXEC SQL disconnect all;
118 0 :
119 0 : return 0;
120 0 : }
|