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