/* Processed by ecpg (regression mode) */ /* These include files are added by the preprocessor */ #include #include #include /* End of automatic include section */ #define ECPGdebug(X,Y) ECPGdebug((X)+100,(Y)) #line 1 "outofscope.pgc" #include #include #include #include #line 1 "regression.h" #line 6 "outofscope.pgc" #line 1 "pgtypes_numeric.h" #ifndef PGTYPES_NUMERIC #define PGTYPES_NUMERIC #include #define NUMERIC_POS 0x0000 #define NUMERIC_NEG 0x4000 #define NUMERIC_NAN 0xC000 #define NUMERIC_NULL 0xF000 #define NUMERIC_MAX_PRECISION 1000 #define NUMERIC_MAX_DISPLAY_SCALE NUMERIC_MAX_PRECISION #define NUMERIC_MIN_DISPLAY_SCALE 0 #define NUMERIC_MIN_SIG_DIGITS 16 #define DECSIZE 30 typedef unsigned char NumericDigit; typedef struct { int ndigits; /* number of digits in digits[] - can be 0! */ int weight; /* weight of first digit */ int rscale; /* result scale */ int dscale; /* display scale */ int sign; /* NUMERIC_POS, NUMERIC_NEG, or NUMERIC_NAN */ NumericDigit *buf; /* start of alloc'd space for digits[] */ NumericDigit *digits; /* decimal digits */ } numeric; typedef struct { int ndigits; /* number of digits in digits[] - can be 0! */ int weight; /* weight of first digit */ int rscale; /* result scale */ int dscale; /* display scale */ int sign; /* NUMERIC_POS, NUMERIC_NEG, or NUMERIC_NAN */ NumericDigit digits[DECSIZE]; /* decimal digits */ } decimal; #ifdef __cplusplus extern "C" { #endif numeric *PGTYPESnumeric_new(void); decimal *PGTYPESdecimal_new(void); void PGTYPESnumeric_free(numeric *var); void PGTYPESdecimal_free(decimal *var); numeric *PGTYPESnumeric_from_asc(char *str, char **endptr); char *PGTYPESnumeric_to_asc(numeric *num, int dscale); int PGTYPESnumeric_add(numeric *var1, numeric *var2, numeric *result); int PGTYPESnumeric_sub(numeric *var1, numeric *var2, numeric *result); int PGTYPESnumeric_mul(numeric *var1, numeric *var2, numeric *result); int PGTYPESnumeric_div(numeric *var1, numeric *var2, numeric *result); int PGTYPESnumeric_cmp(numeric *var1, numeric *var2); int PGTYPESnumeric_from_int(signed int int_val, numeric *var); int PGTYPESnumeric_from_long(signed long int long_val, numeric *var); int PGTYPESnumeric_copy(numeric *src, numeric *dst); int PGTYPESnumeric_from_double(double d, numeric *dst); int PGTYPESnumeric_to_double(numeric *nv, double *dp); int PGTYPESnumeric_to_int(numeric *nv, int *ip); int PGTYPESnumeric_to_long(numeric *nv, long *lp); int PGTYPESnumeric_to_decimal(numeric *src, decimal *dst); int PGTYPESnumeric_from_decimal(decimal *src, numeric *dst); #ifdef __cplusplus } #endif #endif /* PGTYPES_NUMERIC */ #line 8 "outofscope.pgc" /* exec sql begin declare section */ #line 1 "struct.h" /* dec_t */ typedef struct mytype MYTYPE ; #line 9 "struct.h" typedef struct mynulltype MYNULLTYPE ; #line 19 "struct.h" #line 11 "outofscope.pgc" struct mytype { #line 3 "struct.h" int id ; #line 4 "struct.h" char t [ 64 ] ; #line 5 "struct.h" double d1 ; #line 6 "struct.h" double d2 ; #line 7 "struct.h" char c [ 30 ] ; } ; struct mynulltype { #line 13 "struct.h" int id ; #line 14 "struct.h" int t ; #line 15 "struct.h" int d1 ; #line 16 "struct.h" int d2 ; #line 17 "struct.h" int c ; } ;/* exec sql end declare section */ #line 12 "outofscope.pgc" /* exec sql whenever sqlerror stop ; */ #line 14 "outofscope.pgc" /* Functions for test 1 */ static void get_var1(MYTYPE **myvar0, MYNULLTYPE **mynullvar0) { /* exec sql begin declare section */ #line 22 "outofscope.pgc" MYTYPE * myvar = malloc ( sizeof ( MYTYPE ) ) ; #line 23 "outofscope.pgc" MYNULLTYPE * mynullvar = malloc ( sizeof ( MYNULLTYPE ) ) ; /* exec sql end declare section */ #line 24 "outofscope.pgc" /* Test DECLARE ... SELECT ... INTO with pointers */ ECPGset_var( 0, ( myvar ), __LINE__);\ ECPGset_var( 1, ( mynullvar ), __LINE__);\ /* declare mycur cursor for select * from a1 */ #line 28 "outofscope.pgc" if (sqlca.sqlcode < 0) exit (1); #line 28 "outofscope.pgc" #line 28 "outofscope.pgc" if (sqlca.sqlcode != 0) exit(1); *myvar0 = myvar; *mynullvar0 = mynullvar; } static void open_cur1(void) { { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "declare mycur cursor for select * from a1", ECPGt_EOIT, ECPGt_int,&((*( MYTYPE *)(ECPGget_var( 0)) ).id),(long)1,(long)1,sizeof( struct mytype ), ECPGt_int,&((*( MYNULLTYPE *)(ECPGget_var( 1)) ).id),(long)1,(long)1,sizeof( struct mynulltype ), ECPGt_char,&((*( MYTYPE *)(ECPGget_var( 0)) ).t),(long)64,(long)1,sizeof( struct mytype ), ECPGt_int,&((*( MYNULLTYPE *)(ECPGget_var( 1)) ).t),(long)1,(long)1,sizeof( struct mynulltype ), ECPGt_double,&((*( MYTYPE *)(ECPGget_var( 0)) ).d1),(long)1,(long)1,sizeof( struct mytype ), ECPGt_int,&((*( MYNULLTYPE *)(ECPGget_var( 1)) ).d1),(long)1,(long)1,sizeof( struct mynulltype ), ECPGt_double,&((*( MYTYPE *)(ECPGget_var( 0)) ).d2),(long)1,(long)1,sizeof( struct mytype ), ECPGt_int,&((*( MYNULLTYPE *)(ECPGget_var( 1)) ).d2),(long)1,(long)1,sizeof( struct mynulltype ), ECPGt_char,&((*( MYTYPE *)(ECPGget_var( 0)) ).c),(long)30,(long)1,sizeof( struct mytype ), ECPGt_int,&((*( MYNULLTYPE *)(ECPGget_var( 1)) ).c),(long)1,(long)1,sizeof( struct mynulltype ), ECPGt_EORT); #line 40 "outofscope.pgc" if (sqlca.sqlcode < 0) exit (1);} #line 40 "outofscope.pgc" } static void get_record1(void) { { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "fetch mycur", ECPGt_EOIT, ECPGt_int,&((*( MYTYPE *)(ECPGget_var( 0)) ).id),(long)1,(long)1,sizeof( struct mytype ), ECPGt_int,&((*( MYNULLTYPE *)(ECPGget_var( 1)) ).id),(long)1,(long)1,sizeof( struct mynulltype ), ECPGt_char,&((*( MYTYPE *)(ECPGget_var( 0)) ).t),(long)64,(long)1,sizeof( struct mytype ), ECPGt_int,&((*( MYNULLTYPE *)(ECPGget_var( 1)) ).t),(long)1,(long)1,sizeof( struct mynulltype ), ECPGt_double,&((*( MYTYPE *)(ECPGget_var( 0)) ).d1),(long)1,(long)1,sizeof( struct mytype ), ECPGt_int,&((*( MYNULLTYPE *)(ECPGget_var( 1)) ).d1),(long)1,(long)1,sizeof( struct mynulltype ), ECPGt_double,&((*( MYTYPE *)(ECPGget_var( 0)) ).d2),(long)1,(long)1,sizeof( struct mytype ), ECPGt_int,&((*( MYNULLTYPE *)(ECPGget_var( 1)) ).d2),(long)1,(long)1,sizeof( struct mynulltype ), ECPGt_char,&((*( MYTYPE *)(ECPGget_var( 0)) ).c),(long)30,(long)1,sizeof( struct mytype ), ECPGt_int,&((*( MYNULLTYPE *)(ECPGget_var( 1)) ).c),(long)1,(long)1,sizeof( struct mynulltype ), ECPGt_EORT); #line 46 "outofscope.pgc" if (sqlca.sqlcode < 0) exit (1);} #line 46 "outofscope.pgc" } static void close_cur1(void) { { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "close mycur", ECPGt_EOIT, ECPGt_EORT); #line 52 "outofscope.pgc" if (sqlca.sqlcode < 0) exit (1);} #line 52 "outofscope.pgc" } int main (void) { MYTYPE *myvar; MYNULLTYPE *mynullvar; int loopcount; char msg[128]; ECPGdebug(1, stderr); strcpy(msg, "connect"); { ECPGconnect(__LINE__, 0, "ecpg1_regression" , NULL, NULL , NULL, 0); #line 66 "outofscope.pgc" if (sqlca.sqlcode < 0) exit (1);} #line 66 "outofscope.pgc" strcpy(msg, "set"); { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "set datestyle to iso", ECPGt_EOIT, ECPGt_EORT); #line 69 "outofscope.pgc" if (sqlca.sqlcode < 0) exit (1);} #line 69 "outofscope.pgc" strcpy(msg, "create"); { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "create table a1 ( id serial primary key , t text , d1 numeric , d2 float8 , c character ( 10 ) )", ECPGt_EOIT, ECPGt_EORT); #line 72 "outofscope.pgc" if (sqlca.sqlcode < 0) exit (1);} #line 72 "outofscope.pgc" strcpy(msg, "insert"); { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "insert into a1 ( id , t , d1 , d2 , c ) values ( default , 'a' , 1.0 , 2 , 'a' )", ECPGt_EOIT, ECPGt_EORT); #line 75 "outofscope.pgc" if (sqlca.sqlcode < 0) exit (1);} #line 75 "outofscope.pgc" { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "insert into a1 ( id , t , d1 , d2 , c ) values ( default , null , null , null , null )", ECPGt_EOIT, ECPGt_EORT); #line 76 "outofscope.pgc" if (sqlca.sqlcode < 0) exit (1);} #line 76 "outofscope.pgc" { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "insert into a1 ( id , t , d1 , d2 , c ) values ( default , 'b' , 2.0 , 3 , 'b' )", ECPGt_EOIT, ECPGt_EORT); #line 77 "outofscope.pgc" if (sqlca.sqlcode < 0) exit (1);} #line 77 "outofscope.pgc" strcpy(msg, "commit"); { ECPGtrans(__LINE__, NULL, "commit"); #line 80 "outofscope.pgc" if (sqlca.sqlcode < 0) exit (1);} #line 80 "outofscope.pgc" /* Test out-of-scope DECLARE/OPEN/FETCH/CLOSE */ get_var1(&myvar, &mynullvar); open_cur1(); for (loopcount = 0; loopcount < 100; loopcount++) { memset(myvar, 0, sizeof(MYTYPE)); get_record1(); if (sqlca.sqlcode == ECPG_NOT_FOUND) break; printf("id=%d%s t='%s'%s d1=%f%s d2=%f%s c = '%s'%s\n", myvar->id, mynullvar->id ? " (NULL)" : "", myvar->t, mynullvar->t ? " (NULL)" : "", myvar->d1, mynullvar->d1 ? " (NULL)" : "", myvar->d2, mynullvar->d2 ? " (NULL)" : "", myvar->c, mynullvar->c ? " (NULL)" : ""); } close_cur1(); free(myvar); free(mynullvar); strcpy(msg, "drop"); { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "drop table a1", ECPGt_EOIT, ECPGt_EORT); #line 107 "outofscope.pgc" if (sqlca.sqlcode < 0) exit (1);} #line 107 "outofscope.pgc" strcpy(msg, "commit"); { ECPGtrans(__LINE__, NULL, "commit"); #line 110 "outofscope.pgc" if (sqlca.sqlcode < 0) exit (1);} #line 110 "outofscope.pgc" strcpy(msg, "disconnect"); { ECPGdisconnect(__LINE__, "CURRENT"); #line 113 "outofscope.pgc" if (sqlca.sqlcode < 0) exit (1);} #line 113 "outofscope.pgc" return 0; }