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