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