/* Processed by ecpg (regression mode) */
/* These include files are added by the preprocessor */
#include <ecpglib.h>
#include <ecpgerrno.h>
#include <sqlca.h>
/* End of automatic include section */
#define ECPGdebug(X,Y) ECPGdebug((X)+100,(Y))

#line 1 "parser.pgc"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/* test parser addition that merges two tokens into one */

#line 1 "regression.h"






#line 6 "parser.pgc"


int main() {
  /* exec sql begin declare section */
	   
  
#line 10 "parser.pgc"
 int item [ 3 ] , ind [ 3 ] , i ;
/* exec sql end declare section */
#line 11 "parser.pgc"


  ECPGdebug(1, stderr);
  { ECPGconnect(__LINE__, 0, "ecpg1_regression" , NULL, NULL , NULL, 0); }
#line 14 "parser.pgc"


  { ECPGsetcommit(__LINE__, "on", NULL);}
#line 16 "parser.pgc"

  /* exec sql whenever sql_warning  sqlprint ; */
#line 17 "parser.pgc"

  /* exec sql whenever sqlerror  sqlprint ; */
#line 18 "parser.pgc"


  { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "create table T ( Item1 int , Item2 int )", ECPGt_EOIT, ECPGt_EORT);
#line 20 "parser.pgc"

if (sqlca.sqlwarn[0] == 'W') sqlprint();
#line 20 "parser.pgc"

if (sqlca.sqlcode < 0) sqlprint();}
#line 20 "parser.pgc"


  { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "insert into t select 1 , nullif ( y - 1 , 0 ) from generate_series ( 1 , 3 ) with ordinality as series ( x , y )", ECPGt_EOIT, ECPGt_EORT);
#line 24 "parser.pgc"

if (sqlca.sqlwarn[0] == 'W') sqlprint();
#line 24 "parser.pgc"

if (sqlca.sqlcode < 0) sqlprint();}
#line 24 "parser.pgc"


  { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "select Item2 from T order by Item2 nulls last", ECPGt_EOIT, 
	ECPGt_int,(item),(long)1,(long)3,sizeof(int), 
	ECPGt_int,(ind),(long)1,(long)3,sizeof(int), ECPGt_EORT);
#line 26 "parser.pgc"

if (sqlca.sqlwarn[0] == 'W') sqlprint();
#line 26 "parser.pgc"

if (sqlca.sqlcode < 0) sqlprint();}
#line 26 "parser.pgc"


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

  { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "alter table T alter Item1 type bigint", ECPGt_EOIT, ECPGt_EORT);
#line 31 "parser.pgc"

if (sqlca.sqlwarn[0] == 'W') sqlprint();
#line 31 "parser.pgc"

if (sqlca.sqlcode < 0) sqlprint();}
#line 31 "parser.pgc"

  { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "alter table T alter column Item2 set data type smallint", ECPGt_EOIT, ECPGt_EORT);
#line 32 "parser.pgc"

if (sqlca.sqlwarn[0] == 'W') sqlprint();
#line 32 "parser.pgc"

if (sqlca.sqlcode < 0) sqlprint();}
#line 32 "parser.pgc"


  { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "drop table T", ECPGt_EOIT, ECPGt_EORT);
#line 34 "parser.pgc"

if (sqlca.sqlwarn[0] == 'W') sqlprint();
#line 34 "parser.pgc"

if (sqlca.sqlcode < 0) sqlprint();}
#line 34 "parser.pgc"


  { ECPGdisconnect(__LINE__, "ALL");
#line 36 "parser.pgc"

if (sqlca.sqlwarn[0] == 'W') sqlprint();
#line 36 "parser.pgc"

if (sqlca.sqlcode < 0) sqlprint();}
#line 36 "parser.pgc"


  return 0;
}
