From ecfd5579561c3e720e696a42aadcd4b5b52aa581 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Tue, 13 Nov 2018 15:46:08 -0500 Subject: [PATCH] Fix incorrect results for numeric data passed through an ECPG SQLDA. Numeric values with leading zeroes were incorrectly copied into a SQLDA (SQL Descriptor Area), leading to wrong results in ECPG programs. Report and patch by Daisuke Higuchi. Back-patch to all supported versions. Discussion: https://postgr.es/m/1803D792815FC24D871C00D17AE95905C71161@g01jpexmbkw24 --- src/interfaces/ecpg/ecpglib/sqlda.c | 34 +- src/interfaces/ecpg/test/expected/sql-sqlda.c | 108 ++--- .../ecpg/test/expected/sql-sqlda.stderr | 436 +++++++++++------- .../ecpg/test/expected/sql-sqlda.stdout | 28 ++ src/interfaces/ecpg/test/sql/sqlda.pgc | 4 +- 5 files changed, 380 insertions(+), 230 deletions(-) diff --git a/src/interfaces/ecpg/ecpglib/sqlda.c b/src/interfaces/ecpg/ecpglib/sqlda.c index 317d22fa4e..3f86af3c8c 100644 --- a/src/interfaces/ecpg/ecpglib/sqlda.c +++ b/src/interfaces/ecpg/ecpglib/sqlda.c @@ -107,9 +107,12 @@ sqlda_common_total_size(const PGresult *res, int row, enum COMPAT_MODE compat, l case ECPGt_numeric: /* - * Let's align both the numeric struct and the digits array to - * int Unfortunately we need to do double work here to compute - * the size of the space needed for the numeric structure. + * We align the numeric struct to allow it to store a pointer, + * while the digits array is aligned to int (which seems like + * overkill, but let's keep compatibility here). + * + * Unfortunately we need to deconstruct the value twice to + * find out the digits array's size and then later fill it. */ ecpg_sqlda_align_add_size(offset, sizeof(NumericDigit *), sizeof(numeric), &offset, &next_offset); if (!PQgetisnull(res, row, i)) @@ -120,8 +123,7 @@ sqlda_common_total_size(const PGresult *res, int row, enum COMPAT_MODE compat, l num = PGTYPESnumeric_from_asc(val, NULL); if (!num) break; - if (num->ndigits) - ecpg_sqlda_align_add_size(next_offset, sizeof(int), num->ndigits + 1, &offset, &next_offset); + ecpg_sqlda_align_add_size(next_offset, sizeof(int), num->digits - num->buf + num->ndigits, &offset, &next_offset); PGTYPESnumeric_free(num); } break; @@ -345,14 +347,11 @@ ecpg_set_compat_sqlda(int lineno, struct sqlda_compat **_sqlda, const PGresult * memcpy(sqlda->sqlvar[i].sqldata, num, sizeof(numeric)); - if (num->ndigits) - { - ecpg_sqlda_align_add_size(next_offset, sizeof(int), num->ndigits + 1, &offset, &next_offset); - memcpy((char *) sqlda + offset, num->buf, num->ndigits + 1); + ecpg_sqlda_align_add_size(next_offset, sizeof(int), num->digits - num->buf + num->ndigits, &offset, &next_offset); + memcpy((char *) sqlda + offset, num->buf, num->digits - num->buf + num->ndigits); - ((numeric *) sqlda->sqlvar[i].sqldata)->buf = (NumericDigit *) sqlda + offset; - ((numeric *) sqlda->sqlvar[i].sqldata)->digits = (NumericDigit *) sqlda + offset + (num->digits - num->buf); - } + ((numeric *) sqlda->sqlvar[i].sqldata)->buf = (NumericDigit *) sqlda + offset; + ((numeric *) sqlda->sqlvar[i].sqldata)->digits = (NumericDigit *) sqlda + offset + (num->digits - num->buf); PGTYPESnumeric_free(num); @@ -534,14 +533,11 @@ ecpg_set_native_sqlda(int lineno, struct sqlda_struct **_sqlda, const PGresult * memcpy(sqlda->sqlvar[i].sqldata, num, sizeof(numeric)); - if (num->ndigits) - { - ecpg_sqlda_align_add_size(next_offset, sizeof(int), num->ndigits + 1, &offset, &next_offset); - memcpy((char *) sqlda + offset, num->buf, num->ndigits + 1); + ecpg_sqlda_align_add_size(next_offset, sizeof(int), num->digits - num->buf + num->ndigits, &offset, &next_offset); + memcpy((char *) sqlda + offset, num->buf, num->digits - num->buf + num->ndigits); - ((numeric *) sqlda->sqlvar[i].sqldata)->buf = (NumericDigit *) sqlda + offset; - ((numeric *) sqlda->sqlvar[i].sqldata)->digits = (NumericDigit *) sqlda + offset + (num->digits - num->buf); - } + ((numeric *) sqlda->sqlvar[i].sqldata)->buf = (NumericDigit *) sqlda + offset; + ((numeric *) sqlda->sqlvar[i].sqldata)->digits = (NumericDigit *) sqlda + offset + (num->digits - num->buf); PGTYPESnumeric_free(num); diff --git a/src/interfaces/ecpg/test/expected/sql-sqlda.c b/src/interfaces/ecpg/test/expected/sql-sqlda.c index 398dcedccf..3cba69e1a5 100644 --- a/src/interfaces/ecpg/test/expected/sql-sqlda.c +++ b/src/interfaces/ecpg/test/expected/sql-sqlda.c @@ -228,19 +228,19 @@ if (sqlca.sqlcode < 0) exit (1);} strcpy(msg, "insert"); - { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "insert into t1 values ( 1 , 'a' , 1.0 , 1 , 'a' , 1111111111111111111 ) , ( 2 , null , null , null , null , null ) , ( 4 , 'd' , 4.0 , 4 , 'd' , 4444444444444444444 )", ECPGt_EOIT, ECPGt_EORT); -#line 97 "sqlda.pgc" + { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "insert into t1 values ( 1 , 'a' , 1.0 , 1 , 'a' , 1111111111111111111 ) , ( 2 , null , null , null , null , null ) , ( 3 , 'c' , 0.0 , 3 , 'c' , 3333333333333333333 ) , ( 4 , 'd' , 4.0 , 4 , 'd' , 4444444444444444444 ) , ( 5 , 'e' , 0.001234 , 5 , 'e' , 5555555555555555555 )", ECPGt_EOIT, ECPGt_EORT); +#line 99 "sqlda.pgc" if (sqlca.sqlcode < 0) exit (1);} -#line 97 "sqlda.pgc" +#line 99 "sqlda.pgc" strcpy(msg, "commit"); { ECPGtrans(__LINE__, NULL, "commit"); -#line 100 "sqlda.pgc" +#line 102 "sqlda.pgc" if (sqlca.sqlcode < 0) exit (1);} -#line 100 "sqlda.pgc" +#line 102 "sqlda.pgc" /* SQLDA test for getting all records from a table */ @@ -249,29 +249,29 @@ if (sqlca.sqlcode < 0) exit (1);} strcpy(msg, "prepare"); { ECPGprepare(__LINE__, NULL, 0, "st_id1", stmt1); -#line 107 "sqlda.pgc" +#line 109 "sqlda.pgc" if (sqlca.sqlcode < 0) exit (1);} -#line 107 "sqlda.pgc" +#line 109 "sqlda.pgc" strcpy(msg, "declare"); /* declare mycur1 cursor for $1 */ -#line 110 "sqlda.pgc" +#line 112 "sqlda.pgc" strcpy(msg, "open"); { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "declare mycur1 cursor for $1", ECPGt_char_variable,(ECPGprepared_statement(NULL, "st_id1", __LINE__)),(long)1,(long)1,(1)*sizeof(char), ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_EORT); -#line 113 "sqlda.pgc" +#line 115 "sqlda.pgc" if (sqlca.sqlcode < 0) exit (1);} -#line 113 "sqlda.pgc" +#line 115 "sqlda.pgc" /* exec sql whenever not found break ; */ -#line 115 "sqlda.pgc" +#line 117 "sqlda.pgc" rec = 0; @@ -281,13 +281,13 @@ if (sqlca.sqlcode < 0) exit (1);} { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "fetch 1 from mycur1", ECPGt_EOIT, ECPGt_sqlda, &outp_sqlda, 0L, 0L, 0L, ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT); -#line 121 "sqlda.pgc" +#line 123 "sqlda.pgc" if (sqlca.sqlcode == ECPG_NOT_FOUND) break; -#line 121 "sqlda.pgc" +#line 123 "sqlda.pgc" if (sqlca.sqlcode < 0) exit (1);} -#line 121 "sqlda.pgc" +#line 123 "sqlda.pgc" printf("FETCH RECORD %d\n", ++rec); @@ -295,23 +295,23 @@ if (sqlca.sqlcode < 0) exit (1);} } /* exec sql whenever not found continue ; */ -#line 127 "sqlda.pgc" +#line 129 "sqlda.pgc" strcpy(msg, "close"); { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "close mycur1", ECPGt_EOIT, ECPGt_EORT); -#line 130 "sqlda.pgc" +#line 132 "sqlda.pgc" if (sqlca.sqlcode < 0) exit (1);} -#line 130 "sqlda.pgc" +#line 132 "sqlda.pgc" strcpy(msg, "deallocate"); { ECPGdeallocate(__LINE__, 0, NULL, "st_id1"); -#line 133 "sqlda.pgc" +#line 135 "sqlda.pgc" if (sqlca.sqlcode < 0) exit (1);} -#line 133 "sqlda.pgc" +#line 135 "sqlda.pgc" free(outp_sqlda); @@ -322,35 +322,35 @@ if (sqlca.sqlcode < 0) exit (1);} strcpy(msg, "prepare"); { ECPGprepare(__LINE__, NULL, 0, "st_id2", stmt1); -#line 142 "sqlda.pgc" +#line 144 "sqlda.pgc" if (sqlca.sqlcode < 0) exit (1);} -#line 142 "sqlda.pgc" +#line 144 "sqlda.pgc" strcpy(msg, "declare"); /* declare mycur2 cursor for $1 */ -#line 145 "sqlda.pgc" +#line 147 "sqlda.pgc" strcpy(msg, "open"); { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "declare mycur2 cursor for $1", ECPGt_char_variable,(ECPGprepared_statement(NULL, "st_id2", __LINE__)),(long)1,(long)1,(1)*sizeof(char), ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_EORT); -#line 148 "sqlda.pgc" +#line 150 "sqlda.pgc" if (sqlca.sqlcode < 0) exit (1);} -#line 148 "sqlda.pgc" +#line 150 "sqlda.pgc" strcpy(msg, "fetch"); { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "fetch all from mycur2", ECPGt_EOIT, ECPGt_sqlda, &outp_sqlda, 0L, 0L, 0L, ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT); -#line 151 "sqlda.pgc" +#line 153 "sqlda.pgc" if (sqlca.sqlcode < 0) exit (1);} -#line 151 "sqlda.pgc" +#line 153 "sqlda.pgc" outp_sqlda1 = outp_sqlda; @@ -368,18 +368,18 @@ if (sqlca.sqlcode < 0) exit (1);} strcpy(msg, "close"); { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "close mycur2", ECPGt_EOIT, ECPGt_EORT); -#line 167 "sqlda.pgc" +#line 169 "sqlda.pgc" if (sqlca.sqlcode < 0) exit (1);} -#line 167 "sqlda.pgc" +#line 169 "sqlda.pgc" strcpy(msg, "deallocate"); { ECPGdeallocate(__LINE__, 0, NULL, "st_id2"); -#line 170 "sqlda.pgc" +#line 172 "sqlda.pgc" if (sqlca.sqlcode < 0) exit (1);} -#line 170 "sqlda.pgc" +#line 172 "sqlda.pgc" /* SQLDA test for getting one record using an input descriptor */ @@ -403,10 +403,10 @@ if (sqlca.sqlcode < 0) exit (1);} strcpy(msg, "prepare"); { ECPGprepare(__LINE__, NULL, 0, "st_id3", stmt2); -#line 192 "sqlda.pgc" +#line 194 "sqlda.pgc" if (sqlca.sqlcode < 0) exit (1);} -#line 192 "sqlda.pgc" +#line 194 "sqlda.pgc" strcpy(msg, "execute"); @@ -415,20 +415,20 @@ if (sqlca.sqlcode < 0) exit (1);} ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_sqlda, &outp_sqlda, 0L, 0L, 0L, ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT); -#line 195 "sqlda.pgc" +#line 197 "sqlda.pgc" if (sqlca.sqlcode < 0) exit (1);} -#line 195 "sqlda.pgc" +#line 197 "sqlda.pgc" dump_sqlda(outp_sqlda); strcpy(msg, "deallocate"); { ECPGdeallocate(__LINE__, 0, NULL, "st_id3"); -#line 200 "sqlda.pgc" +#line 202 "sqlda.pgc" if (sqlca.sqlcode < 0) exit (1);} -#line 200 "sqlda.pgc" +#line 202 "sqlda.pgc" free(inp_sqlda); @@ -439,10 +439,10 @@ if (sqlca.sqlcode < 0) exit (1);} */ { ECPGconnect(__LINE__, 0, "ecpg1_regression" , NULL, NULL , "con2", 0); -#line 209 "sqlda.pgc" +#line 211 "sqlda.pgc" if (sqlca.sqlcode < 0) exit (1);} -#line 209 "sqlda.pgc" +#line 211 "sqlda.pgc" /* @@ -464,10 +464,10 @@ if (sqlca.sqlcode < 0) exit (1);} strcpy(msg, "prepare"); { ECPGprepare(__LINE__, "con2", 0, "st_id4", stmt2); -#line 229 "sqlda.pgc" +#line 231 "sqlda.pgc" if (sqlca.sqlcode < 0) exit (1);} -#line 229 "sqlda.pgc" +#line 231 "sqlda.pgc" strcpy(msg, "execute"); @@ -476,28 +476,28 @@ if (sqlca.sqlcode < 0) exit (1);} ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_sqlda, &outp_sqlda, 0L, 0L, 0L, ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT); -#line 232 "sqlda.pgc" +#line 234 "sqlda.pgc" if (sqlca.sqlcode < 0) exit (1);} -#line 232 "sqlda.pgc" +#line 234 "sqlda.pgc" dump_sqlda(outp_sqlda); strcpy(msg, "commit"); { ECPGtrans(__LINE__, "con2", "commit"); -#line 237 "sqlda.pgc" +#line 239 "sqlda.pgc" if (sqlca.sqlcode < 0) exit (1);} -#line 237 "sqlda.pgc" +#line 239 "sqlda.pgc" strcpy(msg, "deallocate"); { ECPGdeallocate(__LINE__, 0, NULL, "st_id4"); -#line 240 "sqlda.pgc" +#line 242 "sqlda.pgc" if (sqlca.sqlcode < 0) exit (1);} -#line 240 "sqlda.pgc" +#line 242 "sqlda.pgc" free(inp_sqlda); @@ -505,36 +505,36 @@ if (sqlca.sqlcode < 0) exit (1);} strcpy(msg, "disconnect"); { ECPGdisconnect(__LINE__, "con2"); -#line 246 "sqlda.pgc" +#line 248 "sqlda.pgc" if (sqlca.sqlcode < 0) exit (1);} -#line 246 "sqlda.pgc" +#line 248 "sqlda.pgc" /* End test */ strcpy(msg, "drop"); { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "drop table t1", ECPGt_EOIT, ECPGt_EORT); -#line 251 "sqlda.pgc" +#line 253 "sqlda.pgc" if (sqlca.sqlcode < 0) exit (1);} -#line 251 "sqlda.pgc" +#line 253 "sqlda.pgc" strcpy(msg, "commit"); { ECPGtrans(__LINE__, NULL, "commit"); -#line 254 "sqlda.pgc" +#line 256 "sqlda.pgc" if (sqlca.sqlcode < 0) exit (1);} -#line 254 "sqlda.pgc" +#line 256 "sqlda.pgc" strcpy(msg, "disconnect"); { ECPGdisconnect(__LINE__, "CURRENT"); -#line 257 "sqlda.pgc" +#line 259 "sqlda.pgc" if (sqlca.sqlcode < 0) exit (1);} -#line 257 "sqlda.pgc" +#line 259 "sqlda.pgc" return 0; diff --git a/src/interfaces/ecpg/test/expected/sql-sqlda.stderr b/src/interfaces/ecpg/test/expected/sql-sqlda.stderr index 8c70100bde..2545aa1a0b 100644 --- a/src/interfaces/ecpg/test/expected/sql-sqlda.stderr +++ b/src/interfaces/ecpg/test/expected/sql-sqlda.stderr @@ -14,323 +14,447 @@ [NO_PID]: sqlca: code: 0, state: 00000 [NO_PID]: ecpg_process_output on line 84: OK: CREATE TABLE [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 94: query: insert into t1 values ( 1 , 'a' , 1.0 , 1 , 'a' , 1111111111111111111 ) , ( 2 , null , null , null , null , null ) , ( 4 , 'd' , 4.0 , 4 , 'd' , 4444444444444444444 ); with 0 parameter(s) on connection regress1 +[NO_PID]: ecpg_execute on line 94: query: insert into t1 values ( 1 , 'a' , 1.0 , 1 , 'a' , 1111111111111111111 ) , ( 2 , null , null , null , null , null ) , ( 3 , 'c' , 0.0 , 3 , 'c' , 3333333333333333333 ) , ( 4 , 'd' , 4.0 , 4 , 'd' , 4444444444444444444 ) , ( 5 , 'e' , 0.001234 , 5 , 'e' , 5555555555555555555 ); with 0 parameter(s) on connection regress1 [NO_PID]: sqlca: code: 0, state: 00000 [NO_PID]: ecpg_execute on line 94: using PQexec [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 94: OK: INSERT 0 3 +[NO_PID]: ecpg_process_output on line 94: OK: INSERT 0 5 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ECPGtrans on line 100: action "commit"; connection "regress1" +[NO_PID]: ECPGtrans on line 102: action "commit"; connection "regress1" [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: prepare_common on line 107: name st_id1; query: "SELECT * FROM t1" +[NO_PID]: prepare_common on line 109: name st_id1; query: "SELECT * FROM t1" [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 113: query: declare mycur1 cursor for SELECT * FROM t1; with 0 parameter(s) on connection regress1 +[NO_PID]: ecpg_execute on line 115: query: declare mycur1 cursor for SELECT * FROM t1; with 0 parameter(s) on connection regress1 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 113: using PQexec +[NO_PID]: ecpg_execute on line 115: using PQexec [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 113: OK: DECLARE CURSOR +[NO_PID]: ecpg_process_output on line 115: OK: DECLARE CURSOR [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 121: query: fetch 1 from mycur1; with 0 parameter(s) on connection regress1 +[NO_PID]: ecpg_execute on line 123: query: fetch 1 from mycur1; with 0 parameter(s) on connection regress1 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 121: using PQexec +[NO_PID]: ecpg_execute on line 123: using PQexec [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 121: correctly got 1 tuples with 6 fields +[NO_PID]: ecpg_process_output on line 123: correctly got 1 tuples with 6 fields [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_build_native_sqlda on line 121 sqld = 6 +[NO_PID]: ecpg_build_native_sqlda on line 123 sqld = 6 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 121: new sqlda was built +[NO_PID]: ecpg_process_output on line 123: new sqlda was built [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 121 row 0 col 0 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 123 row 0 col 0 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 121: RESULT: 1 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 123: RESULT: 1 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 121 row 0 col 1 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 123 row 0 col 1 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 121: RESULT: a offset: -1; array: no +[NO_PID]: ecpg_get_data on line 123: RESULT: a offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 121 row 0 col 2 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 123 row 0 col 2 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 121 row 0 col 3 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 123 row 0 col 3 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 121: RESULT: 1 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 123: RESULT: 1 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 121 row 0 col 4 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 123 row 0 col 4 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 121: RESULT: a offset: -1; array: no +[NO_PID]: ecpg_get_data on line 123: RESULT: a offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 121 row 0 col 5 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 123 row 0 col 5 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 121: RESULT: 1111111111111111111 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 123: RESULT: 1111111111111111111 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 121: putting result (1 tuple 6 fields) into sqlda descriptor +[NO_PID]: ecpg_process_output on line 123: putting result (1 tuple 6 fields) into sqlda descriptor [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 121: query: fetch 1 from mycur1; with 0 parameter(s) on connection regress1 +[NO_PID]: ecpg_execute on line 123: query: fetch 1 from mycur1; with 0 parameter(s) on connection regress1 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 121: using PQexec +[NO_PID]: ecpg_execute on line 123: using PQexec [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 121: correctly got 1 tuples with 6 fields +[NO_PID]: ecpg_process_output on line 123: correctly got 1 tuples with 6 fields [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_build_native_sqlda on line 121 sqld = 6 +[NO_PID]: ecpg_build_native_sqlda on line 123 sqld = 6 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 121: new sqlda was built +[NO_PID]: ecpg_process_output on line 123: new sqlda was built [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 121 row 0 col 0 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 123 row 0 col 0 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 121: RESULT: 2 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 123: RESULT: 2 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 121 row 0 col 1 IS NULL +[NO_PID]: ecpg_set_native_sqlda on line 123 row 0 col 1 IS NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 121 row 0 col 2 IS NULL +[NO_PID]: ecpg_set_native_sqlda on line 123 row 0 col 2 IS NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 121 row 0 col 3 IS NULL +[NO_PID]: ecpg_set_native_sqlda on line 123 row 0 col 3 IS NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 121 row 0 col 4 IS NULL +[NO_PID]: ecpg_set_native_sqlda on line 123 row 0 col 4 IS NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 121 row 0 col 5 IS NULL +[NO_PID]: ecpg_set_native_sqlda on line 123 row 0 col 5 IS NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 121: putting result (1 tuple 6 fields) into sqlda descriptor +[NO_PID]: ecpg_process_output on line 123: putting result (1 tuple 6 fields) into sqlda descriptor [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 121: query: fetch 1 from mycur1; with 0 parameter(s) on connection regress1 +[NO_PID]: ecpg_execute on line 123: query: fetch 1 from mycur1; with 0 parameter(s) on connection regress1 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 121: using PQexec +[NO_PID]: ecpg_execute on line 123: using PQexec [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 121: correctly got 1 tuples with 6 fields +[NO_PID]: ecpg_process_output on line 123: correctly got 1 tuples with 6 fields [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_build_native_sqlda on line 121 sqld = 6 +[NO_PID]: ecpg_build_native_sqlda on line 123 sqld = 6 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 121: new sqlda was built +[NO_PID]: ecpg_process_output on line 123: new sqlda was built [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 121 row 0 col 0 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 123 row 0 col 0 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 121: RESULT: 4 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 123: RESULT: 3 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 121 row 0 col 1 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 123 row 0 col 1 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 121: RESULT: d offset: -1; array: no +[NO_PID]: ecpg_get_data on line 123: RESULT: c offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 121 row 0 col 2 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 123 row 0 col 2 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 121 row 0 col 3 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 123 row 0 col 3 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 121: RESULT: 4 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 123: RESULT: 3 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 121 row 0 col 4 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 123 row 0 col 4 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 121: RESULT: d offset: -1; array: no +[NO_PID]: ecpg_get_data on line 123: RESULT: c offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 121 row 0 col 5 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 123 row 0 col 5 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 121: RESULT: 4444444444444444444 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 123: RESULT: 3333333333333333333 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 121: putting result (1 tuple 6 fields) into sqlda descriptor +[NO_PID]: ecpg_process_output on line 123: putting result (1 tuple 6 fields) into sqlda descriptor [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 121: query: fetch 1 from mycur1; with 0 parameter(s) on connection regress1 +[NO_PID]: ecpg_execute on line 123: query: fetch 1 from mycur1; with 0 parameter(s) on connection regress1 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 121: using PQexec +[NO_PID]: ecpg_execute on line 123: using PQexec [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 121: correctly got 0 tuples with 6 fields +[NO_PID]: ecpg_process_output on line 123: correctly got 1 tuples with 6 fields [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: raising sqlcode 100 on line 121: no data found on line 121 +[NO_PID]: ecpg_build_native_sqlda on line 123 sqld = 6 +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: ecpg_process_output on line 123: new sqlda was built +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: ecpg_set_native_sqlda on line 123 row 0 col 0 IS NOT NULL +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: ecpg_get_data on line 123: RESULT: 4 offset: -1; array: no +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: ecpg_set_native_sqlda on line 123 row 0 col 1 IS NOT NULL +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: ecpg_get_data on line 123: RESULT: d offset: -1; array: no +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: ecpg_set_native_sqlda on line 123 row 0 col 2 IS NOT NULL +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: ecpg_set_native_sqlda on line 123 row 0 col 3 IS NOT NULL +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: ecpg_get_data on line 123: RESULT: 4 offset: -1; array: no +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: ecpg_set_native_sqlda on line 123 row 0 col 4 IS NOT NULL +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: ecpg_get_data on line 123: RESULT: d offset: -1; array: no +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: ecpg_set_native_sqlda on line 123 row 0 col 5 IS NOT NULL +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: ecpg_get_data on line 123: RESULT: 4444444444444444444 offset: -1; array: no +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: ecpg_process_output on line 123: putting result (1 tuple 6 fields) into sqlda descriptor +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: ecpg_execute on line 123: query: fetch 1 from mycur1; with 0 parameter(s) on connection regress1 +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: ecpg_execute on line 123: using PQexec +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: ecpg_process_output on line 123: correctly got 1 tuples with 6 fields +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: ecpg_build_native_sqlda on line 123 sqld = 6 +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: ecpg_process_output on line 123: new sqlda was built +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: ecpg_set_native_sqlda on line 123 row 0 col 0 IS NOT NULL +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: ecpg_get_data on line 123: RESULT: 5 offset: -1; array: no +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: ecpg_set_native_sqlda on line 123 row 0 col 1 IS NOT NULL +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: ecpg_get_data on line 123: RESULT: e offset: -1; array: no +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: ecpg_set_native_sqlda on line 123 row 0 col 2 IS NOT NULL +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: ecpg_set_native_sqlda on line 123 row 0 col 3 IS NOT NULL +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: ecpg_get_data on line 123: RESULT: 5 offset: -1; array: no +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: ecpg_set_native_sqlda on line 123 row 0 col 4 IS NOT NULL +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: ecpg_get_data on line 123: RESULT: e offset: -1; array: no +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: ecpg_set_native_sqlda on line 123 row 0 col 5 IS NOT NULL +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: ecpg_get_data on line 123: RESULT: 5555555555555555555 offset: -1; array: no +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: ecpg_process_output on line 123: putting result (1 tuple 6 fields) into sqlda descriptor +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: ecpg_execute on line 123: query: fetch 1 from mycur1; with 0 parameter(s) on connection regress1 +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: ecpg_execute on line 123: using PQexec +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: ecpg_process_output on line 123: correctly got 0 tuples with 6 fields +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: raising sqlcode 100 on line 123: no data found on line 123 [NO_PID]: sqlca: code: 100, state: 02000 -[NO_PID]: ecpg_execute on line 130: query: close mycur1; with 0 parameter(s) on connection regress1 +[NO_PID]: ecpg_execute on line 132: query: close mycur1; with 0 parameter(s) on connection regress1 +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: ecpg_execute on line 132: using PQexec +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: ecpg_process_output on line 132: OK: CLOSE CURSOR +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: deallocate_one on line 135: name st_id1 +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: prepare_common on line 144: name st_id2; query: "SELECT * FROM t1" +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: ecpg_execute on line 150: query: declare mycur2 cursor for SELECT * FROM t1; with 0 parameter(s) on connection regress1 +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: ecpg_execute on line 150: using PQexec +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: ecpg_process_output on line 150: OK: DECLARE CURSOR +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: ecpg_execute on line 153: query: fetch all from mycur2; with 0 parameter(s) on connection regress1 +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: ecpg_execute on line 153: using PQexec +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: ecpg_process_output on line 153: correctly got 5 tuples with 6 fields +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: ecpg_build_native_sqlda on line 153 sqld = 6 +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: ecpg_process_output on line 153: new sqlda was built +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: ecpg_set_native_sqlda on line 153 row 4 col 0 IS NOT NULL +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: ecpg_get_data on line 153: RESULT: 5 offset: -1; array: no +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: ecpg_set_native_sqlda on line 153 row 4 col 1 IS NOT NULL +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: ecpg_get_data on line 153: RESULT: e offset: -1; array: no +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: ecpg_set_native_sqlda on line 153 row 4 col 2 IS NOT NULL +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: ecpg_set_native_sqlda on line 153 row 4 col 3 IS NOT NULL +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: ecpg_get_data on line 153: RESULT: 5 offset: -1; array: no +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: ecpg_set_native_sqlda on line 153 row 4 col 4 IS NOT NULL +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: ecpg_get_data on line 153: RESULT: e offset: -1; array: no +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: ecpg_set_native_sqlda on line 153 row 4 col 5 IS NOT NULL +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: ecpg_get_data on line 153: RESULT: 5555555555555555555 offset: -1; array: no +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: ecpg_process_output on line 153: putting result (1 tuple 6 fields) into sqlda descriptor +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: ecpg_build_native_sqlda on line 153 sqld = 6 +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: ecpg_process_output on line 153: new sqlda was built +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: ecpg_set_native_sqlda on line 153 row 3 col 0 IS NOT NULL +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: ecpg_get_data on line 153: RESULT: 4 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 130: using PQexec +[NO_PID]: ecpg_set_native_sqlda on line 153 row 3 col 1 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 130: OK: CLOSE CURSOR +[NO_PID]: ecpg_get_data on line 153: RESULT: d offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: deallocate_one on line 133: name st_id1 +[NO_PID]: ecpg_set_native_sqlda on line 153 row 3 col 2 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: prepare_common on line 142: name st_id2; query: "SELECT * FROM t1" +[NO_PID]: ecpg_set_native_sqlda on line 153 row 3 col 3 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 148: query: declare mycur2 cursor for SELECT * FROM t1; with 0 parameter(s) on connection regress1 +[NO_PID]: ecpg_get_data on line 153: RESULT: 4 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 148: using PQexec +[NO_PID]: ecpg_set_native_sqlda on line 153 row 3 col 4 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 148: OK: DECLARE CURSOR +[NO_PID]: ecpg_get_data on line 153: RESULT: d offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 151: query: fetch all from mycur2; with 0 parameter(s) on connection regress1 +[NO_PID]: ecpg_set_native_sqlda on line 153 row 3 col 5 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 151: using PQexec +[NO_PID]: ecpg_get_data on line 153: RESULT: 4444444444444444444 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 151: correctly got 3 tuples with 6 fields +[NO_PID]: ecpg_process_output on line 153: putting result (1 tuple 6 fields) into sqlda descriptor [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_build_native_sqlda on line 151 sqld = 6 +[NO_PID]: ecpg_build_native_sqlda on line 153 sqld = 6 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 151: new sqlda was built +[NO_PID]: ecpg_process_output on line 153: new sqlda was built [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 151 row 2 col 0 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 153 row 2 col 0 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 151: RESULT: 4 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 153: RESULT: 3 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 151 row 2 col 1 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 153 row 2 col 1 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 151: RESULT: d offset: -1; array: no +[NO_PID]: ecpg_get_data on line 153: RESULT: c offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 151 row 2 col 2 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 153 row 2 col 2 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 151 row 2 col 3 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 153 row 2 col 3 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 151: RESULT: 4 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 153: RESULT: 3 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 151 row 2 col 4 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 153 row 2 col 4 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 151: RESULT: d offset: -1; array: no +[NO_PID]: ecpg_get_data on line 153: RESULT: c offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 151 row 2 col 5 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 153 row 2 col 5 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 151: RESULT: 4444444444444444444 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 153: RESULT: 3333333333333333333 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 151: putting result (1 tuple 6 fields) into sqlda descriptor +[NO_PID]: ecpg_process_output on line 153: putting result (1 tuple 6 fields) into sqlda descriptor [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_build_native_sqlda on line 151 sqld = 6 +[NO_PID]: ecpg_build_native_sqlda on line 153 sqld = 6 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 151: new sqlda was built +[NO_PID]: ecpg_process_output on line 153: new sqlda was built [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 151 row 1 col 0 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 153 row 1 col 0 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 151: RESULT: 2 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 153: RESULT: 2 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 151 row 1 col 1 IS NULL +[NO_PID]: ecpg_set_native_sqlda on line 153 row 1 col 1 IS NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 151 row 1 col 2 IS NULL +[NO_PID]: ecpg_set_native_sqlda on line 153 row 1 col 2 IS NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 151 row 1 col 3 IS NULL +[NO_PID]: ecpg_set_native_sqlda on line 153 row 1 col 3 IS NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 151 row 1 col 4 IS NULL +[NO_PID]: ecpg_set_native_sqlda on line 153 row 1 col 4 IS NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 151 row 1 col 5 IS NULL +[NO_PID]: ecpg_set_native_sqlda on line 153 row 1 col 5 IS NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 151: putting result (1 tuple 6 fields) into sqlda descriptor +[NO_PID]: ecpg_process_output on line 153: putting result (1 tuple 6 fields) into sqlda descriptor [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_build_native_sqlda on line 151 sqld = 6 +[NO_PID]: ecpg_build_native_sqlda on line 153 sqld = 6 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 151: new sqlda was built +[NO_PID]: ecpg_process_output on line 153: new sqlda was built [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 151 row 0 col 0 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 153 row 0 col 0 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 151: RESULT: 1 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 153: RESULT: 1 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 151 row 0 col 1 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 153 row 0 col 1 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 151: RESULT: a offset: -1; array: no +[NO_PID]: ecpg_get_data on line 153: RESULT: a offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 151 row 0 col 2 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 153 row 0 col 2 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 151 row 0 col 3 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 153 row 0 col 3 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 151: RESULT: 1 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 153: RESULT: 1 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 151 row 0 col 4 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 153 row 0 col 4 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 151: RESULT: a offset: -1; array: no +[NO_PID]: ecpg_get_data on line 153: RESULT: a offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 151 row 0 col 5 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 153 row 0 col 5 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 151: RESULT: 1111111111111111111 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 153: RESULT: 1111111111111111111 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 151: putting result (1 tuple 6 fields) into sqlda descriptor +[NO_PID]: ecpg_process_output on line 153: putting result (1 tuple 6 fields) into sqlda descriptor [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 167: query: close mycur2; with 0 parameter(s) on connection regress1 +[NO_PID]: ecpg_execute on line 169: query: close mycur2; with 0 parameter(s) on connection regress1 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 167: using PQexec +[NO_PID]: ecpg_execute on line 169: using PQexec [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 167: OK: CLOSE CURSOR +[NO_PID]: ecpg_process_output on line 169: OK: CLOSE CURSOR [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: deallocate_one on line 170: name st_id2 +[NO_PID]: deallocate_one on line 172: name st_id2 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: prepare_common on line 192: name st_id3; query: "SELECT * FROM t1 WHERE id = $1" +[NO_PID]: prepare_common on line 194: name st_id3; query: "SELECT * FROM t1 WHERE id = $1" [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 195: query: SELECT * FROM t1 WHERE id = $1; with 1 parameter(s) on connection regress1 +[NO_PID]: ecpg_execute on line 197: query: SELECT * FROM t1 WHERE id = $1; with 1 parameter(s) on connection regress1 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 195: using PQexecPrepared for "SELECT * FROM t1 WHERE id = $1" +[NO_PID]: ecpg_execute on line 197: using PQexecPrepared for "SELECT * FROM t1 WHERE id = $1" [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_free_params on line 195: parameter 1 = 4 +[NO_PID]: ecpg_free_params on line 197: parameter 1 = 4 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 195: correctly got 1 tuples with 6 fields +[NO_PID]: ecpg_process_output on line 197: correctly got 1 tuples with 6 fields [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_build_native_sqlda on line 195 sqld = 6 +[NO_PID]: ecpg_build_native_sqlda on line 197 sqld = 6 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 195: new sqlda was built +[NO_PID]: ecpg_process_output on line 197: new sqlda was built [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 195 row 0 col 0 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 197 row 0 col 0 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 195: RESULT: 4 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 197: RESULT: 4 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 195 row 0 col 1 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 197 row 0 col 1 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 195: RESULT: d offset: -1; array: no +[NO_PID]: ecpg_get_data on line 197: RESULT: d offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 195 row 0 col 2 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 197 row 0 col 2 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 195 row 0 col 3 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 197 row 0 col 3 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 195: RESULT: 4 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 197: RESULT: 4 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 195 row 0 col 4 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 197 row 0 col 4 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 195: RESULT: d offset: -1; array: no +[NO_PID]: ecpg_get_data on line 197: RESULT: d offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 195 row 0 col 5 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 197 row 0 col 5 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 195: RESULT: 4444444444444444444 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 197: RESULT: 4444444444444444444 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 195: putting result (1 tuple 6 fields) into sqlda descriptor +[NO_PID]: ecpg_process_output on line 197: putting result (1 tuple 6 fields) into sqlda descriptor [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: deallocate_one on line 200: name st_id3 +[NO_PID]: deallocate_one on line 202: name st_id3 [NO_PID]: sqlca: code: 0, state: 00000 [NO_PID]: ECPGconnect: opening database ecpg1_regression on port [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: prepare_common on line 229: name st_id4; query: "SELECT * FROM t1 WHERE id = $1" +[NO_PID]: prepare_common on line 231: name st_id4; query: "SELECT * FROM t1 WHERE id = $1" [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 232: query: SELECT * FROM t1 WHERE id = $1; with 1 parameter(s) on connection con2 +[NO_PID]: ecpg_execute on line 234: query: SELECT * FROM t1 WHERE id = $1; with 1 parameter(s) on connection con2 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 232: using PQexecPrepared for "SELECT * FROM t1 WHERE id = $1" +[NO_PID]: ecpg_execute on line 234: using PQexecPrepared for "SELECT * FROM t1 WHERE id = $1" [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_free_params on line 232: parameter 1 = 4 +[NO_PID]: ecpg_free_params on line 234: parameter 1 = 4 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 232: correctly got 1 tuples with 6 fields +[NO_PID]: ecpg_process_output on line 234: correctly got 1 tuples with 6 fields [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_build_native_sqlda on line 232 sqld = 6 +[NO_PID]: ecpg_build_native_sqlda on line 234 sqld = 6 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 232: new sqlda was built +[NO_PID]: ecpg_process_output on line 234: new sqlda was built [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 232 row 0 col 0 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 234 row 0 col 0 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 232: RESULT: 4 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 234: RESULT: 4 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 232 row 0 col 1 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 234 row 0 col 1 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 232: RESULT: d offset: -1; array: no +[NO_PID]: ecpg_get_data on line 234: RESULT: d offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 232 row 0 col 2 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 234 row 0 col 2 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 232 row 0 col 3 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 234 row 0 col 3 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 232: RESULT: 4 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 234: RESULT: 4 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 232 row 0 col 4 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 234 row 0 col 4 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 232: RESULT: d offset: -1; array: no +[NO_PID]: ecpg_get_data on line 234: RESULT: d offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_set_native_sqlda on line 232 row 0 col 5 IS NOT NULL +[NO_PID]: ecpg_set_native_sqlda on line 234 row 0 col 5 IS NOT NULL [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 232: RESULT: 4444444444444444444 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 234: RESULT: 4444444444444444444 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 232: putting result (1 tuple 6 fields) into sqlda descriptor +[NO_PID]: ecpg_process_output on line 234: putting result (1 tuple 6 fields) into sqlda descriptor [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ECPGtrans on line 237: action "commit"; connection "con2" +[NO_PID]: ECPGtrans on line 239: action "commit"; connection "con2" [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: deallocate_one on line 240: name st_id4 +[NO_PID]: deallocate_one on line 242: name st_id4 [NO_PID]: sqlca: code: 0, state: 00000 [NO_PID]: ecpg_finish: connection con2 closed [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 251: query: drop table t1; with 0 parameter(s) on connection regress1 +[NO_PID]: ecpg_execute on line 253: query: drop table t1; with 0 parameter(s) on connection regress1 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 251: using PQexec +[NO_PID]: ecpg_execute on line 253: using PQexec [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 251: OK: DROP TABLE +[NO_PID]: ecpg_process_output on line 253: OK: DROP TABLE [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ECPGtrans on line 254: action "commit"; connection "regress1" +[NO_PID]: ECPGtrans on line 256: action "commit"; connection "regress1" [NO_PID]: sqlca: code: 0, state: 00000 [NO_PID]: ecpg_finish: connection regress1 closed [NO_PID]: sqlca: code: 0, state: 00000 diff --git a/src/interfaces/ecpg/test/expected/sql-sqlda.stdout b/src/interfaces/ecpg/test/expected/sql-sqlda.stdout index 26390df915..81a5978b1c 100644 --- a/src/interfaces/ecpg/test/expected/sql-sqlda.stdout +++ b/src/interfaces/ecpg/test/expected/sql-sqlda.stdout @@ -13,12 +13,26 @@ name sqlda descriptor: 'd2' value NULL' name sqlda descriptor: 'c' value NULL' name sqlda descriptor: 'big' value NULL' FETCH RECORD 3 +name sqlda descriptor: 'id' value 3 +name sqlda descriptor: 't' value 'c' +name sqlda descriptor: 'd1' value NUMERIC '0.0' +name sqlda descriptor: 'd2' value 3.000000 +name sqlda descriptor: 'c' value 'c ' +name sqlda descriptor: 'big' value 3333333333333333333 +FETCH RECORD 4 name sqlda descriptor: 'id' value 4 name sqlda descriptor: 't' value 'd' name sqlda descriptor: 'd1' value NUMERIC '4.0' name sqlda descriptor: 'd2' value 4.000000 name sqlda descriptor: 'c' value 'd ' name sqlda descriptor: 'big' value 4444444444444444444 +FETCH RECORD 5 +name sqlda descriptor: 'id' value 5 +name sqlda descriptor: 't' value 'e' +name sqlda descriptor: 'd1' value NUMERIC '0.001234' +name sqlda descriptor: 'd2' value 5.000000 +name sqlda descriptor: 'c' value 'e ' +name sqlda descriptor: 'big' value 5555555555555555555 FETCH RECORD 1 name sqlda descriptor: 'id' value 1 name sqlda descriptor: 't' value 'a' @@ -34,12 +48,26 @@ name sqlda descriptor: 'd2' value NULL' name sqlda descriptor: 'c' value NULL' name sqlda descriptor: 'big' value NULL' FETCH RECORD 3 +name sqlda descriptor: 'id' value 3 +name sqlda descriptor: 't' value 'c' +name sqlda descriptor: 'd1' value NUMERIC '0.0' +name sqlda descriptor: 'd2' value 3.000000 +name sqlda descriptor: 'c' value 'c ' +name sqlda descriptor: 'big' value 3333333333333333333 +FETCH RECORD 4 name sqlda descriptor: 'id' value 4 name sqlda descriptor: 't' value 'd' name sqlda descriptor: 'd1' value NUMERIC '4.0' name sqlda descriptor: 'd2' value 4.000000 name sqlda descriptor: 'c' value 'd ' name sqlda descriptor: 'big' value 4444444444444444444 +FETCH RECORD 5 +name sqlda descriptor: 'id' value 5 +name sqlda descriptor: 't' value 'e' +name sqlda descriptor: 'd1' value NUMERIC '0.001234' +name sqlda descriptor: 'd2' value 5.000000 +name sqlda descriptor: 'c' value 'e ' +name sqlda descriptor: 'big' value 5555555555555555555 EXECUTE RECORD 4 name sqlda descriptor: 'id' value 4 name sqlda descriptor: 't' value 'd' diff --git a/src/interfaces/ecpg/test/sql/sqlda.pgc b/src/interfaces/ecpg/test/sql/sqlda.pgc index ec4d256b39..4c3abca9d1 100644 --- a/src/interfaces/ecpg/test/sql/sqlda.pgc +++ b/src/interfaces/ecpg/test/sql/sqlda.pgc @@ -94,7 +94,9 @@ exec sql end declare section; exec sql insert into t1 values (1, 'a', 1.0, 1, 'a',1111111111111111111), (2, null, null, null, null,null), - (4, 'd', 4.0, 4, 'd',4444444444444444444); + (3, 'c', 0.0, 3, 'c',3333333333333333333), + (4, 'd', 4.0, 4, 'd',4444444444444444444), + (5, 'e', 0.001234, 5, 'e',5555555555555555555); strcpy(msg, "commit"); exec sql commit; -- 2.40.0