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