Age Owner Branch data TLA 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 : :
6054 meskes@postgresql.or 29 :CBC 1 : int main()
30 : : {
31 : : EXEC SQL begin declare section;
32 : : customer custs1[10];
33 : : cust_ind inds[10];
34 : : typedef struct
35 : : {
36 : : varchar name[50];
37 : : int phone;
38 : : } customer2;
39 : : customer2 custs2[10];
40 : : struct customer3
41 : : {
42 : : varchar name[50];
43 : : int phone;
44 : : } custs3[10];
45 : : struct customer4
46 : : {
47 : : varchar name[50];
48 : : int phone;
49 : : } custs4;
50 : :
51 : : company acme;
52 : :
53 : : int r;
54 : : varchar onlyname[2][50];
55 : : EXEC SQL end declare section;
56 : :
6699 57 : 1 : ECPGdebug(1, stderr);
58 : :
59 : 1 : EXEC SQL connect to REGRESSDB1;
60 [ - + - + ]: 1 :
61 : 1 : EXEC SQL create table customers (c varchar(50), p int);
62 [ - + - + : 1 :
- + ]
63 : : /* First we'll insert some data using C variable references */
9 tgl@sss.pgh.pa.us 64 :GNC 1 : strcpy(custs1[0].name.arr, "John Doe");
65 : 1 : custs1[0].name.len = strlen(custs1[0].name.arr);
66 : 1 : custs1[0].phone = 12345;
67 : :
68 : 1 : strcpy(acme.customers[1].name.arr, "Jane Doe");
69 : 1 : acme.customers[1].name.len = strlen(acme.customers[1].name.arr);
70 : 1 : acme.customers[1].phone = 67890;
71 : :
72 : 1 : EXEC SQL insert into customers values (:custs1->name,
73 : : :custs1[0].phone);
74 [ - + - + : 1 : EXEC SQL insert into customers values (:acme.customers[1].name,
- + ]
75 : : :acme.customers[1].phone);
76 [ - + - + : 1 :
- + ]
77 : : /* Clear the array, to be sure reading back into it actually gets data */
78 : 1 : memset(custs1, 0, sizeof(customer) * 10);
79 : :
80 : : /* Now read back the data */
6699 meskes@postgresql.or 81 :CBC 1 : EXEC SQL select * INTO :custs1:inds from customers limit 2;
82 [ - + - + : 1 : printf("custs1:\n");
- + ]
83 [ + + ]: 3 : for (r = 0; r < 2; r++)
84 : : {
85 : 2 : printf( "name - %s\n", custs1[r].name.arr );
86 : 2 : printf( "phone - %d\n", custs1[r].phone );
87 : : }
88 : :
89 : 1 : EXEC SQL select * INTO :custs2:inds from customers limit 2;
90 [ - + - + : 1 : printf("\ncusts2:\n");
- + ]
91 [ + + ]: 3 : for (r = 0; r < 2; r++)
92 : : {
93 : 2 : printf( "name - %s\n", custs2[r].name.arr );
94 : 2 : printf( "phone - %d\n", custs2[r].phone );
95 : : }
96 : :
97 : 1 : EXEC SQL select * INTO :custs3:inds from customers limit 2;
98 [ - + - + : 1 : printf("\ncusts3:\n");
- + ]
99 [ + + ]: 3 : for (r = 0; r < 2; r++)
100 : : {
101 : 2 : printf( "name - %s\n", custs3[r].name.arr );
102 : 2 : printf( "phone - %d\n", custs3[r].phone );
103 : : }
104 : :
105 : 1 : EXEC SQL select * INTO :custs4:inds[0] from customers limit 1;
106 [ - + - + : 1 : printf("\ncusts4:\n");
- + ]
107 : 1 : printf( "name - %s\n", custs4.name.arr );
108 : 1 : printf( "phone - %d\n", custs4.phone );
109 : :
6498 110 : 1 : EXEC SQL select c INTO :onlyname from customers limit 2;
111 [ - + - + : 1 : printf("\nname:\n");
- + ]
112 [ + + ]: 3 : for (r = 0; r < 2; r++)
113 : : {
114 : 2 : printf( "name - %s\n", onlyname[r].arr );
115 : : }
116 : :
6699 117 : 1 : EXEC SQL disconnect all;
118 [ - + - + ]: 1 :
3043 peter_e@gmx.net 119 : 1 : return 0;
120 : : }
|