#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/* test automatic prepare for all statements */
EXEC SQL INCLUDE ../regression;

static void test(void) {
  EXEC SQL BEGIN DECLARE SECTION;
	int item[4], ind[4], i = 1;
	int item1, ind1;
	char sqlstr[64] = "SELECT item2 FROM T ORDER BY item2 NULLS LAST";
  EXEC SQL END DECLARE SECTION;

  ECPGdebug(1, stderr);
  EXEC SQL CONNECT TO REGRESSDB1;

  EXEC SQL WHENEVER SQLWARNING SQLPRINT;
  EXEC SQL WHENEVER SQLERROR SQLPRINT;

  EXEC SQL CREATE TABLE T ( Item1 int, Item2 int );

  EXEC SQL INSERT INTO T VALUES ( 1, null );
  EXEC SQL INSERT INTO T VALUES ( 1, :i );
  i++;
  EXEC SQL INSERT INTO T VALUES ( 1, :i );
  EXEC SQL PREPARE I AS INSERT INTO T VALUES ( 1, 2 );
  EXEC SQL EXECUTE I;

  EXEC SQL SELECT Item2 INTO :item:ind FROM T ORDER BY Item2 NULLS LAST;

  for (i=0; i<4; i++)
	printf("item[%d] = %d\n", i, ind[i] ? -1 : item[i]);

  EXEC SQL DECLARE C CURSOR FOR SELECT Item1 FROM T;

  EXEC SQL OPEN C;

  EXEC SQL FETCH 1 IN C INTO :i;
  printf("i = %d\n", i);

  EXEC SQL CLOSE C;

  EXEC SQL PREPARE stmt1 FROM :sqlstr;

  EXEC SQL DECLARE cur1 CURSOR FOR stmt1;

  EXEC SQL OPEN cur1;

  EXEC SQL WHENEVER NOT FOUND DO BREAK;

  i = 0;
  while (i < 100)
  {
	EXEC SQL FETCH cur1 INTO :item1:ind1;
	printf("item[%d] = %d\n", i, ind1 ? -1 : item1);
	i++;
  }

  EXEC SQL CLOSE cur1;

  EXEC SQL DROP TABLE T;

  EXEC SQL DISCONNECT ALL;
}

int main() {
  test();
  test();     /* retry */

  return 0;
}
