Line data Source code
1 : #include <stdio.h>
2 : #include <stdlib.h>
3 : #include <string.h>
4 : #include <limits.h>
5 :
6 : exec sql include ../regression;
7 :
8 : exec sql include pgtypes_numeric.h;
9 :
10 : exec sql begin declare section;
11 : exec sql include struct.h;
12 : exec sql end declare section;
13 :
14 : exec sql whenever sqlerror stop;
15 :
16 : /* Functions for test 1 */
17 :
18 : static void
19 0 : get_var1(MYTYPE **myvar0, MYNULLTYPE **mynullvar0)
20 : {
21 : exec sql begin declare section;
22 0 : MYTYPE *myvar = malloc(sizeof(MYTYPE));
23 0 : MYNULLTYPE *mynullvar = malloc(sizeof(MYNULLTYPE));
24 : exec sql end declare section;
25 :
26 : /* Test DECLARE ... SELECT ... INTO with pointers */
27 :
28 0 : exec sql declare mycur cursor for select * INTO :myvar :mynullvar from a1;
29 0 :
30 0 : if (sqlca.sqlcode != 0)
31 0 : exit(1);
32 :
33 0 : *myvar0 = myvar;
34 0 : *mynullvar0 = mynullvar;
35 0 : }
36 :
37 : static void
38 0 : open_cur1(void)
39 : {
40 0 : exec sql open mycur;
41 0 : }
42 0 :
43 0 : static void
44 0 : get_record1(void)
45 0 : {
46 0 : exec sql fetch mycur;
47 0 : }
48 0 :
49 0 : static void
50 0 : close_cur1(void)
51 0 : {
52 0 : exec sql close mycur;
53 0 : }
54 0 :
55 0 : int
56 0 : main (void)
57 : {
58 0 : MYTYPE *myvar;
59 0 : MYNULLTYPE *mynullvar;
60 0 : int loopcount;
61 0 : char msg[128];
62 :
63 0 : ECPGdebug(1, stderr);
64 :
65 0 : strcpy(msg, "connect");
66 0 : exec sql connect to REGRESSDB1;
67 0 :
68 0 : strcpy(msg, "set");
69 0 : exec sql set datestyle to iso;
70 0 :
71 0 : strcpy(msg, "create");
72 0 : exec sql create table a1(id serial primary key, t text, d1 numeric, d2 float8, c character(10));
73 0 :
74 0 : strcpy(msg, "insert");
75 0 : exec sql insert into a1(id, t, d1, d2, c) values (default, 'a', 1.0, 2, 'a');
76 0 : exec sql insert into a1(id, t, d1, d2, c) values (default, null, null, null, null);
77 0 : exec sql insert into a1(id, t, d1, d2, c) values (default, 'b', 2.0, 3, 'b');
78 0 :
79 0 : strcpy(msg, "commit");
80 0 : exec sql commit;
81 0 :
82 : /* Test out-of-scope DECLARE/OPEN/FETCH/CLOSE */
83 :
84 0 : get_var1(&myvar, &mynullvar);
85 0 : open_cur1();
86 :
87 0 : for (loopcount = 0; loopcount < 100; loopcount++)
88 : {
89 0 : memset(myvar, 0, sizeof(MYTYPE));
90 0 : get_record1();
91 0 : if (sqlca.sqlcode == ECPG_NOT_FOUND)
92 0 : break;
93 0 : printf("id=%d%s t='%s'%s d1=%f%s d2=%f%s c = '%s'%s\n",
94 0 : myvar->id, mynullvar->id ? " (NULL)" : "",
95 0 : myvar->t, mynullvar->t ? " (NULL)" : "",
96 0 : myvar->d1, mynullvar->d1 ? " (NULL)" : "",
97 0 : myvar->d2, mynullvar->d2 ? " (NULL)" : "",
98 0 : myvar->c, mynullvar->c ? " (NULL)" : "");
99 0 : }
100 :
101 0 : close_cur1();
102 :
103 0 : free(myvar);
104 0 : free(mynullvar);
105 :
106 0 : strcpy(msg, "drop");
107 0 : exec sql drop table a1;
108 0 :
109 0 : strcpy(msg, "commit");
110 0 : exec sql commit;
111 0 :
112 0 : strcpy(msg, "disconnect");
113 0 : exec sql disconnect;
114 0 :
115 0 : return 0;
116 0 : }
|