Line data Source code
1 : #include <stdio.h>
2 : #include <stdlib.h>
3 : #include <string.h>
4 :
5 : /* test automatic prepare for all statements */
6 : EXEC SQL INCLUDE ../regression;
7 :
8 0 : static void test(void) {
9 : EXEC SQL BEGIN DECLARE SECTION;
10 0 : int item[4], ind[4], i = 1;
11 0 : int item1, ind1;
12 0 : char sqlstr[64] = "SELECT item2 FROM T ORDER BY item2 NULLS LAST";
13 : EXEC SQL END DECLARE SECTION;
14 :
15 0 : ECPGdebug(1, stderr);
16 0 : EXEC SQL CONNECT TO REGRESSDB1;
17 :
18 : EXEC SQL WHENEVER SQLWARNING SQLPRINT;
19 : EXEC SQL WHENEVER SQLERROR SQLPRINT;
20 :
21 0 : EXEC SQL CREATE TABLE T ( Item1 int, Item2 int );
22 0 :
23 0 : EXEC SQL INSERT INTO T VALUES ( 1, null );
24 0 : EXEC SQL INSERT INTO T VALUES ( 1, :i );
25 0 : i++;
26 0 : EXEC SQL INSERT INTO T VALUES ( 1, :i );
27 0 : EXEC SQL PREPARE I AS INSERT INTO T VALUES ( 1, 2 );
28 0 : EXEC SQL EXECUTE I;
29 0 :
30 0 : EXEC SQL SELECT Item2 INTO :item:ind FROM T ORDER BY Item2 NULLS LAST;
31 0 :
32 0 : for (i=0; i<4; i++)
33 0 : printf("item[%d] = %d\n", i, ind[i] ? -1 : item[i]);
34 :
35 : EXEC SQL DECLARE C CURSOR FOR SELECT Item1 FROM T;
36 :
37 0 : EXEC SQL OPEN C;
38 0 :
39 0 : EXEC SQL FETCH 1 IN C INTO :i;
40 0 : printf("i = %d\n", i);
41 :
42 0 : EXEC SQL CLOSE C;
43 0 :
44 0 : EXEC SQL PREPARE stmt1 FROM :sqlstr;
45 0 :
46 : EXEC SQL DECLARE cur1 CURSOR FOR stmt1;
47 :
48 0 : EXEC SQL OPEN cur1;
49 0 :
50 : EXEC SQL WHENEVER NOT FOUND DO BREAK;
51 :
52 0 : i = 0;
53 0 : while (i < 100)
54 : {
55 0 : EXEC SQL FETCH cur1 INTO :item1:ind1;
56 0 : printf("item[%d] = %d\n", i, ind1 ? -1 : item1);
57 0 : i++;
58 : }
59 :
60 0 : EXEC SQL CLOSE cur1;
61 0 :
62 0 : EXEC SQL DROP TABLE T;
63 0 :
64 0 : EXEC SQL DISCONNECT ALL;
65 0 : }
66 :
67 0 : int main() {
68 0 : test();
69 0 : test(); /* retry */
70 :
71 0 : return 0;
72 : }
|