From 1f393fc923ec77f25fd37e16fd8ccb480df82ebb Mon Sep 17 00:00:00 2001 From: Michael Meskes Date: Tue, 10 Feb 2015 12:00:13 +0100 Subject: Fixed array handling in ecpg. When ecpg was rewritten to the new protocol version not all variable types were corrected. This patch rewrites the code for these types to fix that. It also fixes the documentation to correctly tell the status of array handling. --- src/interfaces/ecpg/test/expected/sql-array.c | 180 ++++++++++++++++++-------- 1 file changed, 128 insertions(+), 52 deletions(-) (limited to 'src/interfaces/ecpg/test/expected/sql-array.c') diff --git a/src/interfaces/ecpg/test/expected/sql-array.c b/src/interfaces/ecpg/test/expected/sql-array.c index 13b940217cd..df40a3474c4 100644 --- a/src/interfaces/ecpg/test/expected/sql-array.c +++ b/src/interfaces/ecpg/test/expected/sql-array.c @@ -11,8 +11,13 @@ #include #include +#include +#include +#include +#include + /* exec sql whenever sqlerror sqlprint ; */ -#line 5 "array.pgc" +#line 10 "array.pgc" @@ -84,7 +89,7 @@ struct sqlca_t *ECPGget_sqlca(void); #endif -#line 7 "array.pgc" +#line 12 "array.pgc" #line 1 "regression.h" @@ -94,39 +99,55 @@ struct sqlca_t *ECPGget_sqlca(void); -#line 8 "array.pgc" +#line 13 "array.pgc" int main (void) { /* exec sql begin declare section */ + - + + + + -#line 14 "array.pgc" - int i = 1 ; +#line 19 "array.pgc" + int i = 1 , j ; -#line 15 "array.pgc" +#line 20 "array.pgc" int * did = & i ; -#line 16 "array.pgc" - int a [ 10 ] = { 9 , 8 , 7 , 6 , 5 , 4 , 3 , 2 , 1 , 0 } ; +#line 21 "array.pgc" + short a [ 10 ] = { 9 , 8 , 7 , 6 , 5 , 4 , 3 , 2 , 1 , 0 } ; + +#line 22 "array.pgc" + timestamp ts [ 10 ] ; -#line 17 "array.pgc" +#line 23 "array.pgc" + date d [ 10 ] ; + +#line 24 "array.pgc" + interval in [ 10 ] ; + +#line 25 "array.pgc" + numeric n [ 10 ] ; + +#line 26 "array.pgc" char text [ 25 ] = "klmnopqrst" ; -#line 18 "array.pgc" +#line 27 "array.pgc" char * t = ( char * ) malloc ( 11 ) ; -#line 19 "array.pgc" +#line 28 "array.pgc" double f ; /* exec sql end declare section */ -#line 20 "array.pgc" +#line 29 "array.pgc" strcpy(t, "0123456789"); @@ -134,77 +155,124 @@ main (void) ECPGdebug(1, stderr); + for (j = 0; j < 10; j++) { + char str[20]; + numeric *value; + interval *inter; + + sprintf(str, "2000-1-1 0%d:00:00", j); + ts[j] = PGTYPEStimestamp_from_asc(str, NULL); + sprintf(str, "2000-1-1%d\n", j); + d[j] = PGTYPESdate_from_asc(str, NULL); + sprintf(str, "%d hours", j+10); + inter = PGTYPESinterval_from_asc(str, NULL); + in[j] = *inter; + value = PGTYPESnumeric_new(); + PGTYPESnumeric_from_int(j, value); + n[j] = *value; + } + { ECPGconnect(__LINE__, 0, "regress1" , NULL, NULL , NULL, 0); -#line 27 "array.pgc" +#line 53 "array.pgc" if (sqlca.sqlcode < 0) sqlprint();} -#line 27 "array.pgc" +#line 53 "array.pgc" { ECPGsetcommit(__LINE__, "on", NULL); -#line 29 "array.pgc" +#line 55 "array.pgc" if (sqlca.sqlcode < 0) sqlprint();} -#line 29 "array.pgc" +#line 55 "array.pgc" { ECPGtrans(__LINE__, NULL, "begin work"); -#line 31 "array.pgc" +#line 57 "array.pgc" if (sqlca.sqlcode < 0) sqlprint();} -#line 31 "array.pgc" +#line 57 "array.pgc" - { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "create table test ( f float , i int , a int [ 10 ] , text char ( 10 ) )", ECPGt_EOIT, ECPGt_EORT); -#line 33 "array.pgc" + { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "create table test ( f float , i int , a int [ 10 ] , text char ( 10 ) , ts timestamp [ 10 ] , n numeric [ 10 ] , d date [ 10 ] , inter interval [ 10 ] )", ECPGt_EOIT, ECPGt_EORT); +#line 59 "array.pgc" if (sqlca.sqlcode < 0) sqlprint();} -#line 33 "array.pgc" +#line 59 "array.pgc" - { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "insert into test ( f , i , a , text ) values ( 404.90 , 3 , '{0,1,2,3,4,5,6,7,8,9}' , 'abcdefghij' )", ECPGt_EOIT, ECPGt_EORT); -#line 35 "array.pgc" + { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "insert into test ( f , i , a , text , ts , n , d , inter ) values ( 404.90 , 3 , '{0,1,2,3,4,5,6,7,8,9}' , 'abcdefghij' , $1 , $2 , $3 , $4 )", + ECPGt_timestamp,&(ts),(long)1,(long)10,sizeof(timestamp), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_numeric,&(n),(long)1,(long)10,sizeof(numeric), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_date,&(d),(long)1,(long)10,sizeof(date), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_interval,&(in),(long)1,(long)10,sizeof(interval), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_EORT); +#line 61 "array.pgc" if (sqlca.sqlcode < 0) sqlprint();} -#line 35 "array.pgc" +#line 61 "array.pgc" - { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "insert into test ( f , i , a , text ) values ( 140787.0 , 2 , $1 , $2 )", - ECPGt_int,(a),(long)1,(long)10,sizeof(int), + { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "insert into test ( f , i , a , text , ts , n , d , inter ) values ( 140787.0 , 2 , $1 , $2 , $3 , $4 , $5 , $6 )", + ECPGt_short,(a),(long)1,(long)10,sizeof(short), ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_char,(text),(long)25,(long)1,(25)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_timestamp,&(ts),(long)1,(long)10,sizeof(timestamp), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_numeric,&(n),(long)1,(long)10,sizeof(numeric), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_date,&(d),(long)1,(long)10,sizeof(date), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_interval,&(in),(long)1,(long)10,sizeof(interval), ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_EORT); -#line 37 "array.pgc" +#line 63 "array.pgc" if (sqlca.sqlcode < 0) sqlprint();} -#line 37 "array.pgc" +#line 63 "array.pgc" - { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "insert into test ( f , i , a , text ) values ( 14.07 , $1 , $2 , $3 )", + { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "insert into test ( f , i , a , text , ts , n , d , inter ) values ( 14.07 , $1 , $2 , $3 , $4 , $5 , $6 , $7 )", ECPGt_int,&(did),(long)1,(long)0,sizeof(int), ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, - ECPGt_int,(a),(long)1,(long)10,sizeof(int), + ECPGt_short,(a),(long)1,(long)10,sizeof(short), ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_char,&(t),(long)0,(long)1,(1)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_timestamp,&(ts),(long)1,(long)10,sizeof(timestamp), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_numeric,&(n),(long)1,(long)10,sizeof(numeric), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_date,&(d),(long)1,(long)10,sizeof(date), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_interval,&(in),(long)1,(long)10,sizeof(interval), ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_EORT); -#line 39 "array.pgc" +#line 65 "array.pgc" if (sqlca.sqlcode < 0) sqlprint();} -#line 39 "array.pgc" +#line 65 "array.pgc" { ECPGtrans(__LINE__, NULL, "commit"); -#line 41 "array.pgc" +#line 67 "array.pgc" if (sqlca.sqlcode < 0) sqlprint();} -#line 41 "array.pgc" +#line 67 "array.pgc" + for (j = 0; j < 10; j++) { + ts[j] = PGTYPEStimestamp_from_asc("1900-01-01 00:00:00", NULL); + d[j] = PGTYPESdate_from_asc("1900-01-01", NULL); + in[j] = *PGTYPESinterval_new(); + n[j] = *PGTYPESnumeric_new(); + } { ECPGtrans(__LINE__, NULL, "begin work"); -#line 43 "array.pgc" +#line 75 "array.pgc" if (sqlca.sqlcode < 0) sqlprint();} -#line 43 "array.pgc" +#line 75 "array.pgc" { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "select f , text from test where i = 1", ECPGt_EOIT, @@ -212,30 +280,38 @@ if (sqlca.sqlcode < 0) sqlprint();} ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_char,(text),(long)25,(long)1,(25)*sizeof(char), ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT); -#line 48 "array.pgc" +#line 80 "array.pgc" if (sqlca.sqlcode < 0) sqlprint();} -#line 48 "array.pgc" +#line 80 "array.pgc" printf("Found f=%f text=%10.10s\n", f, text); f=140787; - { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "select a , text from test where f = $1 ", + { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "select a , text , ts , n , d , inter from test where f = $1 ", ECPGt_double,&(f),(long)1,(long)1,sizeof(double), ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, - ECPGt_int,(a),(long)1,(long)10,sizeof(int), + ECPGt_short,(a),(long)1,(long)10,sizeof(short), ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_char,&(t),(long)0,(long)1,(1)*sizeof(char), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_timestamp,&(ts),(long)1,(long)10,sizeof(timestamp), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_numeric,&(n),(long)1,(long)10,sizeof(numeric), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_date,&(d),(long)1,(long)10,sizeof(date), + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, + ECPGt_interval,&(in),(long)1,(long)10,sizeof(interval), ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT); -#line 56 "array.pgc" +#line 88 "array.pgc" if (sqlca.sqlcode < 0) sqlprint();} -#line 56 "array.pgc" +#line 88 "array.pgc" for (i = 0; i < 10; i++) - printf("Found a[%d] = %d\n", i, a[i]); + printf("Found a[%d] = %d ts[%d] = %s n[%d] = %s d[%d] = %s in[%d] = %s\n", i, a[i], i, PGTYPEStimestamp_to_asc(ts[i]), i, PGTYPESnumeric_to_asc(&(n[i]), -1), i, PGTYPESdate_to_asc(d[i]), i, PGTYPESinterval_to_asc(&(in[i]))); printf("Found text=%10.10s\n", t); @@ -244,33 +320,33 @@ if (sqlca.sqlcode < 0) sqlprint();} ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_char,(text),(long)25,(long)1,(25)*sizeof(char), ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT); -#line 66 "array.pgc" +#line 98 "array.pgc" if (sqlca.sqlcode < 0) sqlprint();} -#line 66 "array.pgc" +#line 98 "array.pgc" printf("Found text=%s\n", text); { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "drop table test", ECPGt_EOIT, ECPGt_EORT); -#line 70 "array.pgc" +#line 102 "array.pgc" if (sqlca.sqlcode < 0) sqlprint();} -#line 70 "array.pgc" +#line 102 "array.pgc" { ECPGtrans(__LINE__, NULL, "commit"); -#line 72 "array.pgc" +#line 104 "array.pgc" if (sqlca.sqlcode < 0) sqlprint();} -#line 72 "array.pgc" +#line 104 "array.pgc" { ECPGdisconnect(__LINE__, "CURRENT"); -#line 74 "array.pgc" +#line 106 "array.pgc" if (sqlca.sqlcode < 0) sqlprint();} -#line 74 "array.pgc" +#line 106 "array.pgc" free(t); -- cgit v1.2.3