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