Line data Source code
1 : #include <stdlib.h>
2 : #include <string.h>
3 :
4 : exec sql include ../regression;
5 :
6 : exec sql whenever sqlerror stop;
7 :
8 : exec sql type c is char reference;
9 : typedef char* c;
10 :
11 : exec sql type ind is union { int integer; short smallint; };
12 : typedef union { int integer; short smallint; } ind;
13 :
14 : #define BUFFERSIZ 8
15 : exec sql type str is varchar[BUFFERSIZ];
16 :
17 : exec sql declare cur cursor for
18 : select name, born, age, married, children from family;
19 :
20 : int
21 0 : main (void)
22 : {
23 : exec sql struct birthinfo { long born; short age; };
24 : exec sql begin declare section;
25 : struct personal_struct { str name;
26 : struct birthinfo birth;
27 0 : } personal, *p;
28 : struct personal_indicator { int ind_name;
29 : struct birthinfo ind_birth;
30 0 : } ind_personal, *i;
31 0 : ind ind_children;
32 : struct t1 { str name; }; struct t2 { str name; };
33 : static varchar vc1[50], vc2[50], vc3[255];
34 : static int i1, i2, i3;
35 : exec sql end declare section;
36 :
37 0 : exec sql char *married = NULL;
38 0 : exec sql long ind_married;
39 0 : exec sql ind children;
40 0 : int loopcount;
41 0 : char msg[128];
42 :
43 0 : ECPGdebug(1, stderr);
44 :
45 0 : strcpy(msg, "connect");
46 0 : exec sql connect to REGRESSDB1;
47 0 :
48 0 : strcpy(msg, "set");
49 0 : exec sql set datestyle to iso;
50 0 :
51 0 : strcpy(msg, "create");
52 0 : exec sql create table family(name char(8), born integer, age smallint, married date, children integer);
53 0 :
54 0 : strcpy(msg, "insert");
55 0 : exec sql insert into family(name, married, children) values ('Mum', '19870714', 3);
56 0 : exec sql insert into family(name, born, married, children) values ('Dad', '19610721', '19870714', 3);
57 0 : exec sql insert into family(name, age) values ('Child 1', 16);
58 0 : exec sql insert into family(name, age) values ('Child 2', 14);
59 0 : exec sql insert into family(name, age) values ('Child 3', 9);
60 0 :
61 0 : strcpy(msg, "commit");
62 0 : exec sql commit;
63 0 :
64 0 : strcpy(msg, "open");
65 0 : exec sql open cur;
66 0 :
67 : exec sql whenever not found do break;
68 :
69 0 : p=&personal;
70 0 : i=&ind_personal;
71 0 : memset(i, 0, sizeof(ind_personal));
72 0 : for (loopcount = 0; loopcount < 100; loopcount++) {
73 0 : strcpy(msg, "fetch");
74 0 : exec sql fetch cur into :p:i, :married:ind_married, :children.integer:ind_children.smallint;
75 0 : printf("%8.8s", personal.name.arr);
76 0 : if (i->ind_birth.born >= 0)
77 0 : printf(", born %ld", personal.birth.born);
78 0 : if (i->ind_birth.age >= 0)
79 0 : printf(", age = %d", personal.birth.age);
80 0 : if (ind_married >= 0)
81 0 : printf(", married %s", married);
82 0 : if (ind_children.smallint >= 0)
83 0 : printf(", children = %d", children.integer);
84 0 : putchar('\n');
85 :
86 0 : free(married);
87 0 : married = NULL;
88 0 : }
89 :
90 0 : strcpy(msg, "close");
91 0 : exec sql close cur;
92 0 :
93 0 : strcpy(msg, "drop");
94 0 : exec sql drop table family;
95 0 :
96 0 : strcpy(msg, "commit");
97 0 : exec sql commit;
98 0 :
99 0 : strcpy(msg, "disconnect");
100 0 : exec sql disconnect;
101 0 :
102 : /* this just to silence unused-variable warnings: */
103 0 : vc1.len = vc2.len = vc3.len = 0;
104 0 : i1 = i2 = i3 = 0;
105 0 : printf("%d %d %d %d %d %d\n",
106 0 : vc1.len, vc2.len, vc3.len,
107 0 : i1, i2, i3);
108 :
109 0 : return 0;
110 0 : }
|