diff --git a/src/interfaces/ecpg/preproc/ecpg.trailer b/src/interfaces/ecpg/preproc/ecpg.trailer index 96c55349e8..8919631edb 100644 --- a/src/interfaces/ecpg/preproc/ecpg.trailer +++ b/src/interfaces/ecpg/preproc/ecpg.trailer @@ -1101,16 +1101,21 @@ UsingConst: Iconst { $$ = $1; } */ ECPGDescribe: SQL_DESCRIBE INPUT_P prepared_name using_descriptor { - const char *con = connection ? connection : "NULL"; + const char *con; + + check_declared_list($3); + con = connection ? connection : "NULL"; mmerror(PARSE_ERROR, ET_WARNING, "using unsupported DESCRIBE statement"); $$ = (char *) mm_alloc(sizeof("1, , ") + strlen(con) + strlen($3)); sprintf($$, "1, %s, %s", con, $3); } | SQL_DESCRIBE opt_output prepared_name using_descriptor { - const char *con = connection ? connection : "NULL"; + const char *con; struct variable *var; + check_declared_list($3); + con = connection ? connection : "NULL"; var = argsinsert->variable; remove_variable_from_list(&argsinsert, var); add_variable_to_head(&argsresult, var, &no_indicator); @@ -1120,20 +1125,29 @@ ECPGDescribe: SQL_DESCRIBE INPUT_P prepared_name using_descriptor } | SQL_DESCRIBE opt_output prepared_name into_descriptor { - const char *con = connection ? connection : "NULL"; + const char *con; + + check_declared_list($3); + con = connection ? connection : "NULL"; $$ = (char *) mm_alloc(sizeof("0, , ") + strlen(con) + strlen($3)); sprintf($$, "0, %s, %s", con, $3); } | SQL_DESCRIBE INPUT_P prepared_name into_sqlda { - const char *con = connection ? connection : "NULL"; + const char *con; + + check_declared_list($3); + con = connection ? connection : "NULL"; mmerror(PARSE_ERROR, ET_WARNING, "using unsupported DESCRIBE statement"); $$ = (char *) mm_alloc(sizeof("1, , ") + strlen(con) + strlen($3)); sprintf($$, "1, %s, %s", con, $3); } | SQL_DESCRIBE opt_output prepared_name into_sqlda { - const char *con = connection ? connection : "NULL"; + const char *con; + + check_declared_list($3); + con = connection ? connection : "NULL"; $$ = (char *) mm_alloc(sizeof("0, , ") + strlen(con) + strlen($3)); sprintf($$, "0, %s, %s", con, $3); } @@ -1862,8 +1876,8 @@ c_anything: ecpg_ident { $$ = $1; } | ':' { $$ = mm_strdup(":"); } ; -DeallocateStmt: DEALLOCATE prepared_name { $$ = $2; } - | DEALLOCATE PREPARE prepared_name { $$ = $3; } +DeallocateStmt: DEALLOCATE prepared_name { check_declared_list($2); $$ = $2; } + | DEALLOCATE PREPARE prepared_name { check_declared_list($3); $$ = $3; } | DEALLOCATE ALL { $$ = mm_strdup("all"); } | DEALLOCATE PREPARE ALL { $$ = mm_strdup("all"); } ; diff --git a/src/interfaces/ecpg/test/expected/sql-declare.c b/src/interfaces/ecpg/test/expected/sql-declare.c index 7ca540df28..c06726699a 100644 --- a/src/interfaces/ecpg/test/expected/sql-declare.c +++ b/src/interfaces/ecpg/test/expected/sql-declare.c @@ -109,6 +109,7 @@ void printResult(char *tc_name, int loop); + #line 18 "declare.pgc" int f1 [ ARRAY_SZIE ] ; @@ -117,8 +118,11 @@ void printResult(char *tc_name, int loop); #line 20 "declare.pgc" char f3 [ ARRAY_SZIE ] [ 20 ] ; -/* exec sql end declare section */ + #line 21 "declare.pgc" + int count ; +/* exec sql end declare section */ +#line 22 "declare.pgc" int main(void) @@ -128,55 +132,55 @@ int main(void) ECPGdebug(1, stderr); { ECPGconnect(__LINE__, 0, "ecpg1_regression" , NULL, NULL , "con1", 0); -#line 29 "declare.pgc" +#line 30 "declare.pgc" if (sqlca.sqlcode < 0) sqlprint();} -#line 29 "declare.pgc" +#line 30 "declare.pgc" { ECPGconnect(__LINE__, 0, "ecpg2_regression" , NULL, NULL , "con2", 0); -#line 30 "declare.pgc" +#line 31 "declare.pgc" if (sqlca.sqlcode < 0) sqlprint();} -#line 30 "declare.pgc" +#line 31 "declare.pgc" { ECPGdo(__LINE__, 0, 1, "con1", 0, ECPGst_normal, "create table source ( f1 integer , f2 integer , f3 varchar ( 20 ) )", ECPGt_EOIT, ECPGt_EORT); -#line 32 "declare.pgc" +#line 33 "declare.pgc" if (sqlca.sqlcode < 0) sqlprint();} -#line 32 "declare.pgc" +#line 33 "declare.pgc" { ECPGdo(__LINE__, 0, 1, "con2", 0, ECPGst_normal, "create table source ( f1 integer , f2 integer , f3 varchar ( 20 ) )", ECPGt_EOIT, ECPGt_EORT); -#line 33 "declare.pgc" +#line 34 "declare.pgc" if (sqlca.sqlcode < 0) sqlprint();} -#line 33 "declare.pgc" +#line 34 "declare.pgc" { ECPGdo(__LINE__, 0, 1, "con1", 0, ECPGst_normal, "insert into source values ( 1 , 10 , 'db on con1' )", ECPGt_EOIT, ECPGt_EORT); -#line 35 "declare.pgc" +#line 36 "declare.pgc" if (sqlca.sqlcode < 0) sqlprint();} -#line 35 "declare.pgc" +#line 36 "declare.pgc" { ECPGdo(__LINE__, 0, 1, "con1", 0, ECPGst_normal, "insert into source values ( 2 , 20 , 'db on con1' )", ECPGt_EOIT, ECPGt_EORT); -#line 36 "declare.pgc" +#line 37 "declare.pgc" if (sqlca.sqlcode < 0) sqlprint();} -#line 36 "declare.pgc" +#line 37 "declare.pgc" { ECPGdo(__LINE__, 0, 1, "con2", 0, ECPGst_normal, "insert into source values ( 1 , 10 , 'db on con2' )", ECPGt_EOIT, ECPGt_EORT); -#line 38 "declare.pgc" +#line 39 "declare.pgc" if (sqlca.sqlcode < 0) sqlprint();} -#line 38 "declare.pgc" +#line 39 "declare.pgc" { ECPGdo(__LINE__, 0, 1, "con2", 0, ECPGst_normal, "insert into source values ( 2 , 20 , 'db on con2' )", ECPGt_EOIT, ECPGt_EORT); -#line 39 "declare.pgc" +#line 40 "declare.pgc" if (sqlca.sqlcode < 0) sqlprint();} -#line 39 "declare.pgc" +#line 40 "declare.pgc" commitTable(); @@ -184,25 +188,25 @@ if (sqlca.sqlcode < 0) sqlprint();} execute_test(); { ECPGdo(__LINE__, 0, 1, "con1", 0, ECPGst_normal, "drop table if exists source", ECPGt_EOIT, ECPGt_EORT); -#line 45 "declare.pgc" +#line 46 "declare.pgc" if (sqlca.sqlcode < 0) sqlprint();} -#line 45 "declare.pgc" +#line 46 "declare.pgc" { ECPGdo(__LINE__, 0, 1, "con2", 0, ECPGst_normal, "drop table if exists source", ECPGt_EOIT, ECPGt_EORT); -#line 46 "declare.pgc" +#line 47 "declare.pgc" if (sqlca.sqlcode < 0) sqlprint();} -#line 46 "declare.pgc" +#line 47 "declare.pgc" commitTable(); { ECPGdisconnect(__LINE__, "ALL"); -#line 50 "declare.pgc" +#line 51 "declare.pgc" if (sqlca.sqlcode < 0) sqlprint();} -#line 50 "declare.pgc" +#line 51 "declare.pgc" return 0; @@ -219,13 +223,13 @@ void execute_test(void) -#line 63 "declare.pgc" +#line 64 "declare.pgc" int i ; -#line 64 "declare.pgc" +#line 65 "declare.pgc" char * selectString = "SELECT f1,f2,f3 FROM source" ; /* exec sql end declare section */ -#line 65 "declare.pgc" +#line 66 "declare.pgc" /* @@ -235,28 +239,28 @@ void execute_test(void) reset(); /* declare \"stmt_1\" as an SQL identifier */ -#line 73 "declare.pgc" +#line 74 "declare.pgc" { ECPGprepare(__LINE__, NULL, 0, "stmt_1", selectString); -#line 74 "declare.pgc" +#line 75 "declare.pgc" if (sqlca.sqlcode < 0) sqlprint();} -#line 74 "declare.pgc" +#line 75 "declare.pgc" /* declare cur_1 cursor for $1 */ -#line 75 "declare.pgc" +#line 76 "declare.pgc" { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "declare cur_1 cursor for $1", ECPGt_char_variable,(ECPGprepared_statement(NULL, "stmt_1", __LINE__)),(long)1,(long)1,(1)*sizeof(char), ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_EORT); -#line 76 "declare.pgc" +#line 77 "declare.pgc" if (sqlca.sqlcode < 0) sqlprint();} -#line 76 "declare.pgc" +#line 77 "declare.pgc" /* exec sql whenever not found break ; */ -#line 78 "declare.pgc" +#line 79 "declare.pgc" i = 0; while (1) @@ -268,30 +272,30 @@ if (sqlca.sqlcode < 0) sqlprint();} ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_char,(f3[i]),(long)20,(long)1,(20)*sizeof(char), ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT); -#line 82 "declare.pgc" +#line 83 "declare.pgc" if (sqlca.sqlcode == ECPG_NOT_FOUND) break; -#line 82 "declare.pgc" +#line 83 "declare.pgc" if (sqlca.sqlcode < 0) sqlprint();} -#line 82 "declare.pgc" +#line 83 "declare.pgc" i++; } { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "close cur_1", ECPGt_EOIT, ECPGt_EORT); -#line 85 "declare.pgc" +#line 86 "declare.pgc" if (sqlca.sqlcode < 0) sqlprint();} -#line 85 "declare.pgc" +#line 86 "declare.pgc" { ECPGdeallocate(__LINE__, 0, NULL, "stmt_1"); -#line 86 "declare.pgc" +#line 87 "declare.pgc" if (sqlca.sqlcode < 0) sqlprint();} -#line 86 "declare.pgc" +#line 87 "declare.pgc" /* exec sql whenever not found continue ; */ -#line 87 "declare.pgc" +#line 88 "declare.pgc" printResult("testcase1", 2); @@ -304,28 +308,55 @@ if (sqlca.sqlcode < 0) sqlprint();} reset(); /* declare \"stmt_2\" as an SQL identifier */ -#line 98 "declare.pgc" +#line 99 "declare.pgc" { ECPGprepare(__LINE__, "con1", 0, "stmt_2", selectString); -#line 99 "declare.pgc" +#line 100 "declare.pgc" if (sqlca.sqlcode < 0) sqlprint();} -#line 99 "declare.pgc" +#line 100 "declare.pgc" /* declare cur_2 cursor for $1 */ -#line 100 "declare.pgc" +#line 101 "declare.pgc" { ECPGdo(__LINE__, 0, 1, "con1", 0, ECPGst_normal, "declare cur_2 cursor for $1", ECPGt_char_variable,(ECPGprepared_statement("con1", "stmt_2", __LINE__)),(long)1,(long)1,(1)*sizeof(char), ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_EORT); -#line 101 "declare.pgc" +#line 102 "declare.pgc" if (sqlca.sqlcode < 0) sqlprint();} -#line 101 "declare.pgc" +#line 102 "declare.pgc" + + + /* Of cause DESCRIBE clause can be used */ + ECPGallocate_desc(__LINE__, "mydesc"); +#line 105 "declare.pgc" + +if (sqlca.sqlcode < 0) sqlprint(); +#line 105 "declare.pgc" + + { ECPGdescribe(__LINE__, 0, 0, "con1", "stmt_2", + ECPGt_descriptor, "mydesc", 1L, 1L, 1L, + ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT);} +#line 106 "declare.pgc" + + { ECPGget_desc_header(__LINE__, "mydesc", &(count)); + +#line 107 "declare.pgc" + +if (sqlca.sqlcode < 0) sqlprint();} +#line 107 "declare.pgc" + + printf("descriptor: number of lines : %d\n\n", count); + { ECPGdeallocate(__LINE__, 0, "con1", "mydesc"); +#line 109 "declare.pgc" + +if (sqlca.sqlcode < 0) sqlprint();} +#line 109 "declare.pgc" /* exec sql whenever not found break ; */ -#line 103 "declare.pgc" +#line 111 "declare.pgc" i = 0; while (1) @@ -337,30 +368,30 @@ if (sqlca.sqlcode < 0) sqlprint();} ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_char,(f3[i]),(long)20,(long)1,(20)*sizeof(char), ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT); -#line 107 "declare.pgc" +#line 115 "declare.pgc" if (sqlca.sqlcode == ECPG_NOT_FOUND) break; -#line 107 "declare.pgc" +#line 115 "declare.pgc" if (sqlca.sqlcode < 0) sqlprint();} -#line 107 "declare.pgc" +#line 115 "declare.pgc" i++; } { ECPGdo(__LINE__, 0, 1, "con1", 0, ECPGst_normal, "close cur_2", ECPGt_EOIT, ECPGt_EORT); -#line 110 "declare.pgc" +#line 118 "declare.pgc" if (sqlca.sqlcode < 0) sqlprint();} -#line 110 "declare.pgc" +#line 118 "declare.pgc" - { ECPGdeallocate(__LINE__, 0, NULL, "stmt_2"); -#line 111 "declare.pgc" + { ECPGdeallocate(__LINE__, 0, "con1", "stmt_2"); +#line 119 "declare.pgc" if (sqlca.sqlcode < 0) sqlprint();} -#line 111 "declare.pgc" +#line 119 "declare.pgc" /* exec sql whenever not found continue ; */ -#line 112 "declare.pgc" +#line 120 "declare.pgc" printResult("testcase2", 2); @@ -372,28 +403,28 @@ if (sqlca.sqlcode < 0) sqlprint();} reset(); /* declare \"stmt_3\" as an SQL identifier */ -#line 122 "declare.pgc" +#line 130 "declare.pgc" { ECPGprepare(__LINE__, "con1", 0, "stmt_3", selectString); -#line 123 "declare.pgc" +#line 131 "declare.pgc" if (sqlca.sqlcode < 0) sqlprint();} -#line 123 "declare.pgc" +#line 131 "declare.pgc" /* declare cur_3 cursor for $1 */ -#line 124 "declare.pgc" +#line 132 "declare.pgc" { ECPGdo(__LINE__, 0, 1, "con1", 0, ECPGst_normal, "declare cur_3 cursor for $1", ECPGt_char_variable,(ECPGprepared_statement("con1", "stmt_3", __LINE__)),(long)1,(long)1,(1)*sizeof(char), ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_EORT); -#line 125 "declare.pgc" +#line 133 "declare.pgc" if (sqlca.sqlcode < 0) sqlprint();} -#line 125 "declare.pgc" +#line 133 "declare.pgc" /* exec sql whenever not found break ; */ -#line 127 "declare.pgc" +#line 135 "declare.pgc" i = 0; while (1) @@ -405,30 +436,30 @@ if (sqlca.sqlcode < 0) sqlprint();} ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_char,(f3[i]),(long)20,(long)1,(20)*sizeof(char), ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT); -#line 131 "declare.pgc" +#line 139 "declare.pgc" if (sqlca.sqlcode == ECPG_NOT_FOUND) break; -#line 131 "declare.pgc" +#line 139 "declare.pgc" if (sqlca.sqlcode < 0) sqlprint();} -#line 131 "declare.pgc" +#line 139 "declare.pgc" i++; } { ECPGdo(__LINE__, 0, 1, "con1", 0, ECPGst_normal, "close cur_3", ECPGt_EOIT, ECPGt_EORT); -#line 134 "declare.pgc" +#line 142 "declare.pgc" if (sqlca.sqlcode < 0) sqlprint();} -#line 134 "declare.pgc" +#line 142 "declare.pgc" - { ECPGdeallocate(__LINE__, 0, "con2", "stmt_3"); -#line 135 "declare.pgc" + { ECPGdeallocate(__LINE__, 0, "con1", "stmt_3"); +#line 143 "declare.pgc" if (sqlca.sqlcode < 0) sqlprint();} -#line 135 "declare.pgc" +#line 143 "declare.pgc" /* exec sql whenever not found continue ; */ -#line 136 "declare.pgc" +#line 144 "declare.pgc" printResult("testcase3", 2); @@ -441,28 +472,28 @@ if (sqlca.sqlcode < 0) sqlprint();} reset(); /* declare \"stmt_4\" as an SQL identifier */ -#line 147 "declare.pgc" +#line 155 "declare.pgc" { ECPGprepare(__LINE__, "con2", 0, "stmt_4", selectString); -#line 148 "declare.pgc" +#line 156 "declare.pgc" if (sqlca.sqlcode < 0) sqlprint();} -#line 148 "declare.pgc" +#line 156 "declare.pgc" /* declare cur_4 cursor for $1 */ -#line 149 "declare.pgc" +#line 157 "declare.pgc" { ECPGdo(__LINE__, 0, 1, "con2", 0, ECPGst_normal, "declare cur_4 cursor for $1", ECPGt_char_variable,(ECPGprepared_statement("con2", "stmt_4", __LINE__)),(long)1,(long)1,(1)*sizeof(char), ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_EORT); -#line 150 "declare.pgc" +#line 158 "declare.pgc" if (sqlca.sqlcode < 0) sqlprint();} -#line 150 "declare.pgc" +#line 158 "declare.pgc" /* exec sql whenever not found break ; */ -#line 152 "declare.pgc" +#line 160 "declare.pgc" i = 0; while (1) @@ -474,30 +505,30 @@ if (sqlca.sqlcode < 0) sqlprint();} ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_char,(f3[i]),(long)20,(long)1,(20)*sizeof(char), ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT); -#line 156 "declare.pgc" +#line 164 "declare.pgc" if (sqlca.sqlcode == ECPG_NOT_FOUND) break; -#line 156 "declare.pgc" +#line 164 "declare.pgc" if (sqlca.sqlcode < 0) sqlprint();} -#line 156 "declare.pgc" +#line 164 "declare.pgc" i++; } { ECPGdo(__LINE__, 0, 1, "con2", 0, ECPGst_normal, "close cur_4", ECPGt_EOIT, ECPGt_EORT); -#line 159 "declare.pgc" +#line 167 "declare.pgc" if (sqlca.sqlcode < 0) sqlprint();} -#line 159 "declare.pgc" +#line 167 "declare.pgc" { ECPGdeallocate(__LINE__, 0, "con2", "stmt_4"); -#line 160 "declare.pgc" +#line 168 "declare.pgc" if (sqlca.sqlcode < 0) sqlprint();} -#line 160 "declare.pgc" +#line 168 "declare.pgc" /* exec sql whenever not found continue ; */ -#line 161 "declare.pgc" +#line 169 "declare.pgc" printResult("testcase4", 2); @@ -509,13 +540,13 @@ if (sqlca.sqlcode < 0) sqlprint();} reset(); /* declare \"stmt_5\" as an SQL identifier */ -#line 171 "declare.pgc" +#line 179 "declare.pgc" { ECPGprepare(__LINE__, NULL, 0, "stmt_5", selectString); -#line 172 "declare.pgc" +#line 180 "declare.pgc" if (sqlca.sqlcode < 0) sqlprint();} -#line 172 "declare.pgc" +#line 180 "declare.pgc" { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_execute, "stmt_5", ECPGt_EOIT, ECPGt_int,(f1),(long)1,(long)ARRAY_SZIE,sizeof(int), @@ -524,17 +555,17 @@ if (sqlca.sqlcode < 0) sqlprint();} ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_char,(f3),(long)20,(long)ARRAY_SZIE,(20)*sizeof(char), ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT); -#line 173 "declare.pgc" +#line 181 "declare.pgc" if (sqlca.sqlcode < 0) sqlprint();} -#line 173 "declare.pgc" +#line 181 "declare.pgc" { ECPGdeallocate(__LINE__, 0, NULL, "stmt_5"); -#line 175 "declare.pgc" +#line 183 "declare.pgc" if (sqlca.sqlcode < 0) sqlprint();} -#line 175 "declare.pgc" +#line 183 "declare.pgc" printResult("testcase5", 2); @@ -543,16 +574,16 @@ if (sqlca.sqlcode < 0) sqlprint();} void commitTable() { { ECPGtrans(__LINE__, "con1", "commit"); -#line 182 "declare.pgc" +#line 190 "declare.pgc" if (sqlca.sqlcode < 0) sqlprint();} -#line 182 "declare.pgc" +#line 190 "declare.pgc" { ECPGtrans(__LINE__, "con2", "commit"); -#line 183 "declare.pgc" +#line 191 "declare.pgc" if (sqlca.sqlcode < 0) sqlprint();} -#line 183 "declare.pgc" +#line 191 "declare.pgc" } diff --git a/src/interfaces/ecpg/test/expected/sql-declare.stderr b/src/interfaces/ecpg/test/expected/sql-declare.stderr index 71aa21ece4..b068c4205d 100644 --- a/src/interfaces/ecpg/test/expected/sql-declare.stderr +++ b/src/interfaces/ecpg/test/expected/sql-declare.stderr @@ -4,283 +4,282 @@ [NO_PID]: sqlca: code: 0, state: 00000 [NO_PID]: ECPGconnect: opening database ecpg2_regression on port [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 32: query: create table source ( f1 integer , f2 integer , f3 varchar ( 20 ) ); with 0 parameter(s) on connection con1 -[NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 32: using PQexec -[NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 32: OK: CREATE TABLE -[NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 33: query: create table source ( f1 integer , f2 integer , f3 varchar ( 20 ) ); with 0 parameter(s) on connection con2 +[NO_PID]: ecpg_execute on line 33: query: create table source ( f1 integer , f2 integer , f3 varchar ( 20 ) ); with 0 parameter(s) on connection con1 [NO_PID]: sqlca: code: 0, state: 00000 [NO_PID]: ecpg_execute on line 33: using PQexec [NO_PID]: sqlca: code: 0, state: 00000 [NO_PID]: ecpg_process_output on line 33: OK: CREATE TABLE [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 35: query: insert into source values ( 1 , 10 , 'db on con1' ); with 0 parameter(s) on connection con1 +[NO_PID]: ecpg_execute on line 34: query: create table source ( f1 integer , f2 integer , f3 varchar ( 20 ) ); with 0 parameter(s) on connection con2 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 35: using PQexec +[NO_PID]: ecpg_execute on line 34: using PQexec [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 35: OK: INSERT 0 1 +[NO_PID]: ecpg_process_output on line 34: OK: CREATE TABLE [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 36: query: insert into source values ( 2 , 20 , 'db on con1' ); with 0 parameter(s) on connection con1 +[NO_PID]: ecpg_execute on line 36: query: insert into source values ( 1 , 10 , 'db on con1' ); with 0 parameter(s) on connection con1 [NO_PID]: sqlca: code: 0, state: 00000 [NO_PID]: ecpg_execute on line 36: using PQexec [NO_PID]: sqlca: code: 0, state: 00000 [NO_PID]: ecpg_process_output on line 36: OK: INSERT 0 1 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 38: query: insert into source values ( 1 , 10 , 'db on con2' ); with 0 parameter(s) on connection con2 +[NO_PID]: ecpg_execute on line 37: query: insert into source values ( 2 , 20 , 'db on con1' ); with 0 parameter(s) on connection con1 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 38: using PQexec +[NO_PID]: ecpg_execute on line 37: using PQexec [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 38: OK: INSERT 0 1 +[NO_PID]: ecpg_process_output on line 37: OK: INSERT 0 1 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 39: query: insert into source values ( 2 , 20 , 'db on con2' ); with 0 parameter(s) on connection con2 +[NO_PID]: ecpg_execute on line 39: query: insert into source values ( 1 , 10 , 'db on con2' ); with 0 parameter(s) on connection con2 [NO_PID]: sqlca: code: 0, state: 00000 [NO_PID]: ecpg_execute on line 39: using PQexec [NO_PID]: sqlca: code: 0, state: 00000 [NO_PID]: ecpg_process_output on line 39: OK: INSERT 0 1 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ECPGtrans on line 182: action "commit"; connection "con1" +[NO_PID]: ecpg_execute on line 40: query: insert into source values ( 2 , 20 , 'db on con2' ); with 0 parameter(s) on connection con2 +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: ecpg_execute on line 40: using PQexec +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: ecpg_process_output on line 40: OK: INSERT 0 1 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ECPGtrans on line 183: action "commit"; connection "con2" +[NO_PID]: ECPGtrans on line 190: action "commit"; connection "con1" [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: prepare_common on line 74: name stmt_1; query: "SELECT f1,f2,f3 FROM source" +[NO_PID]: ECPGtrans on line 191: action "commit"; connection "con2" [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 76: query: declare cur_1 cursor for SELECT f1,f2,f3 FROM source; with 0 parameter(s) on connection con2 +[NO_PID]: prepare_common on line 75: name stmt_1; query: "SELECT f1,f2,f3 FROM source" [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 76: using PQexec +[NO_PID]: ecpg_execute on line 77: query: declare cur_1 cursor for SELECT f1,f2,f3 FROM source; with 0 parameter(s) on connection con2 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 76: OK: DECLARE CURSOR +[NO_PID]: ecpg_execute on line 77: using PQexec [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 82: query: fetch cur_1; with 0 parameter(s) on connection con2 +[NO_PID]: ecpg_process_output on line 77: OK: DECLARE CURSOR [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 82: using PQexec +[NO_PID]: ecpg_execute on line 83: query: fetch cur_1; with 0 parameter(s) on connection con2 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 82: correctly got 1 tuples with 3 fields +[NO_PID]: ecpg_execute on line 83: using PQexec [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 82: RESULT: 1 offset: -1; array: no +[NO_PID]: ecpg_process_output on line 83: correctly got 1 tuples with 3 fields [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 82: RESULT: 10 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 83: RESULT: 1 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 82: RESULT: db on con2 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 83: RESULT: 10 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 82: query: fetch cur_1; with 0 parameter(s) on connection con2 +[NO_PID]: ecpg_get_data on line 83: RESULT: db on con2 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 82: using PQexec +[NO_PID]: ecpg_execute on line 83: query: fetch cur_1; with 0 parameter(s) on connection con2 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 82: correctly got 1 tuples with 3 fields +[NO_PID]: ecpg_execute on line 83: using PQexec [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 82: RESULT: 2 offset: -1; array: no +[NO_PID]: ecpg_process_output on line 83: correctly got 1 tuples with 3 fields [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 82: RESULT: 20 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 83: RESULT: 2 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 82: RESULT: db on con2 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 83: RESULT: 20 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 82: query: fetch cur_1; with 0 parameter(s) on connection con2 +[NO_PID]: ecpg_get_data on line 83: RESULT: db on con2 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 82: using PQexec +[NO_PID]: ecpg_execute on line 83: query: fetch cur_1; with 0 parameter(s) on connection con2 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 82: correctly got 0 tuples with 3 fields +[NO_PID]: ecpg_execute on line 83: using PQexec [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: raising sqlcode 100 on line 82: no data found on line 82 +[NO_PID]: ecpg_process_output on line 83: correctly got 0 tuples with 3 fields +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: raising sqlcode 100 on line 83: no data found on line 83 [NO_PID]: sqlca: code: 100, state: 02000 -[NO_PID]: ecpg_execute on line 85: query: close cur_1; with 0 parameter(s) on connection con2 +[NO_PID]: ecpg_execute on line 86: query: close cur_1; with 0 parameter(s) on connection con2 +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: ecpg_execute on line 86: using PQexec [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 85: using PQexec +[NO_PID]: ecpg_process_output on line 86: OK: CLOSE CURSOR [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 85: OK: CLOSE CURSOR +[NO_PID]: deallocate_one on line 87: name stmt_1 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: deallocate_one on line 86: name stmt_1 +[NO_PID]: prepare_common on line 100: name stmt_2; query: "SELECT f1,f2,f3 FROM source" [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: prepare_common on line 99: name stmt_2; query: "SELECT f1,f2,f3 FROM source" +[NO_PID]: ecpg_execute on line 102: query: declare cur_2 cursor for SELECT f1,f2,f3 FROM source; with 0 parameter(s) on connection con1 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 101: query: declare cur_2 cursor for SELECT f1,f2,f3 FROM source; with 0 parameter(s) on connection con1 +[NO_PID]: ecpg_execute on line 102: using PQexec [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 101: using PQexec +[NO_PID]: ecpg_process_output on line 102: OK: DECLARE CURSOR [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 101: OK: DECLARE CURSOR +[NO_PID]: ECPGget_desc_header: found 3 attributes [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 107: query: fetch cur_2; with 0 parameter(s) on connection con1 +[NO_PID]: raising sqlcode -230 on line 109: invalid statement name "mydesc" on line 109 +[NO_PID]: sqlca: code: -230, state: 26000 +SQL error: invalid statement name "mydesc" on line 109 +[NO_PID]: ecpg_execute on line 115: query: fetch cur_2; with 0 parameter(s) on connection con1 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 107: 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 107: correctly got 1 tuples with 3 fields +[NO_PID]: ecpg_process_output on line 115: correctly got 1 tuples with 3 fields [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 107: RESULT: 1 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 115: RESULT: 1 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 107: RESULT: 10 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 115: RESULT: 10 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 107: RESULT: db on con1 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 115: RESULT: db on con1 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 107: query: fetch cur_2; with 0 parameter(s) on connection con1 +[NO_PID]: ecpg_execute on line 115: query: fetch cur_2; with 0 parameter(s) on connection con1 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 107: 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 107: correctly got 1 tuples with 3 fields +[NO_PID]: ecpg_process_output on line 115: correctly got 1 tuples with 3 fields [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 107: RESULT: 2 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 115: RESULT: 2 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 107: RESULT: 20 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 115: RESULT: 20 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 107: RESULT: db on con1 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 115: RESULT: db on con1 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 107: query: fetch cur_2; with 0 parameter(s) on connection con1 +[NO_PID]: ecpg_execute on line 115: query: fetch cur_2; with 0 parameter(s) on connection con1 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 107: 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 107: correctly got 0 tuples with 3 fields +[NO_PID]: ecpg_process_output on line 115: correctly got 0 tuples with 3 fields [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: raising sqlcode 100 on line 107: no data found on line 107 +[NO_PID]: raising sqlcode 100 on line 115: no data found on line 115 [NO_PID]: sqlca: code: 100, state: 02000 -[NO_PID]: ecpg_execute on line 110: query: close cur_2; with 0 parameter(s) on connection con1 -[NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 110: using PQexec +[NO_PID]: ecpg_execute on line 118: query: close cur_2; with 0 parameter(s) on connection con1 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 110: OK: CLOSE CURSOR +[NO_PID]: ecpg_execute on line 118: using PQexec [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: raising sqlcode -230 on line 111: invalid statement name "stmt_2" on line 111 -[NO_PID]: sqlca: code: -230, state: 26000 -SQL error: invalid statement name "stmt_2" on line 111 -[NO_PID]: prepare_common on line 123: name stmt_3; query: "SELECT f1,f2,f3 FROM source" +[NO_PID]: ecpg_process_output on line 118: OK: CLOSE CURSOR [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 125: query: declare cur_3 cursor for SELECT f1,f2,f3 FROM source; with 0 parameter(s) on connection con1 +[NO_PID]: deallocate_one on line 119: name stmt_2 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 125: using PQexec +[NO_PID]: prepare_common on line 131: name stmt_3; query: "SELECT f1,f2,f3 FROM source" [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 125: OK: DECLARE CURSOR +[NO_PID]: ecpg_execute on line 133: query: declare cur_3 cursor for SELECT f1,f2,f3 FROM source; with 0 parameter(s) on connection con1 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 131: query: fetch cur_3; with 0 parameter(s) on connection con1 +[NO_PID]: ecpg_execute on line 133: using PQexec [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 131: using PQexec +[NO_PID]: ecpg_process_output on line 133: OK: DECLARE CURSOR [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 131: correctly got 1 tuples with 3 fields +[NO_PID]: ecpg_execute on line 139: query: fetch cur_3; with 0 parameter(s) on connection con1 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 131: RESULT: 1 offset: -1; array: no +[NO_PID]: ecpg_execute on line 139: using PQexec [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 131: RESULT: 10 offset: -1; array: no +[NO_PID]: ecpg_process_output on line 139: correctly got 1 tuples with 3 fields [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 131: RESULT: db on con1 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 139: RESULT: 1 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 131: query: fetch cur_3; with 0 parameter(s) on connection con1 +[NO_PID]: ecpg_get_data on line 139: RESULT: 10 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 131: using PQexec +[NO_PID]: ecpg_get_data on line 139: RESULT: db on con1 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 131: correctly got 1 tuples with 3 fields +[NO_PID]: ecpg_execute on line 139: query: fetch cur_3; with 0 parameter(s) on connection con1 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 131: RESULT: 2 offset: -1; array: no +[NO_PID]: ecpg_execute on line 139: using PQexec [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 131: RESULT: 20 offset: -1; array: no +[NO_PID]: ecpg_process_output on line 139: correctly got 1 tuples with 3 fields [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 131: RESULT: db on con1 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 139: RESULT: 2 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 131: query: fetch cur_3; with 0 parameter(s) on connection con1 +[NO_PID]: ecpg_get_data on line 139: RESULT: 20 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 131: using PQexec +[NO_PID]: ecpg_get_data on line 139: RESULT: db on con1 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 131: correctly got 0 tuples with 3 fields +[NO_PID]: ecpg_execute on line 139: query: fetch cur_3; with 0 parameter(s) on connection con1 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: raising sqlcode 100 on line 131: no data found on line 131 -[NO_PID]: sqlca: code: 100, state: 02000 -[NO_PID]: ecpg_execute on line 134: query: close cur_3; with 0 parameter(s) on connection con1 +[NO_PID]: ecpg_execute on line 139: using PQexec [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 134: using PQexec +[NO_PID]: ecpg_process_output on line 139: correctly got 0 tuples with 3 fields [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 134: OK: CLOSE CURSOR +[NO_PID]: raising sqlcode 100 on line 139: no data found on line 139 +[NO_PID]: sqlca: code: 100, state: 02000 +[NO_PID]: ecpg_execute on line 142: query: close cur_3; with 0 parameter(s) on connection con1 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: raising sqlcode -230 on line 135: invalid statement name "stmt_3" on line 135 -[NO_PID]: sqlca: code: -230, state: 26000 -SQL error: invalid statement name "stmt_3" on line 135 -[NO_PID]: prepare_common on line 148: name stmt_4; query: "SELECT f1,f2,f3 FROM source" +[NO_PID]: ecpg_execute on line 142: using PQexec [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 150: query: declare cur_4 cursor for SELECT f1,f2,f3 FROM source; with 0 parameter(s) on connection con2 +[NO_PID]: ecpg_process_output on line 142: OK: CLOSE CURSOR [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 150: using PQexec +[NO_PID]: deallocate_one on line 143: name stmt_3 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 150: OK: DECLARE CURSOR +[NO_PID]: prepare_common on line 156: name stmt_4; query: "SELECT f1,f2,f3 FROM source" [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 156: query: fetch cur_4; with 0 parameter(s) on connection con2 +[NO_PID]: ecpg_execute on line 158: query: declare cur_4 cursor for SELECT f1,f2,f3 FROM source; with 0 parameter(s) on connection con2 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 156: using PQexec +[NO_PID]: ecpg_execute on line 158: using PQexec [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 156: correctly got 1 tuples with 3 fields +[NO_PID]: ecpg_process_output on line 158: OK: DECLARE CURSOR [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 156: RESULT: 1 offset: -1; array: no +[NO_PID]: ecpg_execute on line 164: query: fetch cur_4; with 0 parameter(s) on connection con2 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 156: RESULT: 10 offset: -1; array: no +[NO_PID]: ecpg_execute on line 164: using PQexec [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 156: RESULT: db on con2 offset: -1; array: no +[NO_PID]: ecpg_process_output on line 164: correctly got 1 tuples with 3 fields [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 156: query: fetch cur_4; with 0 parameter(s) on connection con2 +[NO_PID]: ecpg_get_data on line 164: RESULT: 1 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 156: using PQexec +[NO_PID]: ecpg_get_data on line 164: RESULT: 10 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 156: correctly got 1 tuples with 3 fields +[NO_PID]: ecpg_get_data on line 164: RESULT: db on con2 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 156: RESULT: 2 offset: -1; array: no +[NO_PID]: ecpg_execute on line 164: query: fetch cur_4; with 0 parameter(s) on connection con2 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 156: RESULT: 20 offset: -1; array: no +[NO_PID]: ecpg_execute on line 164: using PQexec [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 156: RESULT: db on con2 offset: -1; array: no +[NO_PID]: ecpg_process_output on line 164: correctly got 1 tuples with 3 fields [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 156: query: fetch cur_4; with 0 parameter(s) on connection con2 +[NO_PID]: ecpg_get_data on line 164: RESULT: 2 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 156: using PQexec +[NO_PID]: ecpg_get_data on line 164: RESULT: 20 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 156: correctly got 0 tuples with 3 fields +[NO_PID]: ecpg_get_data on line 164: RESULT: db on con2 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: raising sqlcode 100 on line 156: no data found on line 156 -[NO_PID]: sqlca: code: 100, state: 02000 -[NO_PID]: ecpg_execute on line 159: query: close cur_4; with 0 parameter(s) on connection con2 +[NO_PID]: ecpg_execute on line 164: query: fetch cur_4; with 0 parameter(s) on connection con2 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 159: using PQexec +[NO_PID]: ecpg_execute on line 164: using PQexec [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 159: OK: CLOSE CURSOR +[NO_PID]: ecpg_process_output on line 164: correctly got 0 tuples with 3 fields [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: deallocate_one on line 160: name stmt_4 +[NO_PID]: raising sqlcode 100 on line 164: no data found on line 164 +[NO_PID]: sqlca: code: 100, state: 02000 +[NO_PID]: ecpg_execute on line 167: query: close cur_4; with 0 parameter(s) on connection con2 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: prepare_common on line 172: name stmt_5; query: "SELECT f1,f2,f3 FROM source" +[NO_PID]: ecpg_execute on line 167: using PQexec [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 173: query: SELECT f1,f2,f3 FROM source; with 0 parameter(s) on connection con2 +[NO_PID]: ecpg_process_output on line 167: OK: CLOSE CURSOR [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 173: using PQexecPrepared for "SELECT f1,f2,f3 FROM source" +[NO_PID]: deallocate_one on line 168: name stmt_4 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 173: correctly got 2 tuples with 3 fields +[NO_PID]: prepare_common on line 180: name stmt_5; query: "SELECT f1,f2,f3 FROM source" [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 173: RESULT: 1 offset: -1; array: no +[NO_PID]: ecpg_execute on line 181: query: SELECT f1,f2,f3 FROM source; with 0 parameter(s) on connection con2 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 173: RESULT: 2 offset: -1; array: no +[NO_PID]: ecpg_execute on line 181: using PQexecPrepared for "SELECT f1,f2,f3 FROM source" [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 173: RESULT: 10 offset: -1; array: no +[NO_PID]: ecpg_process_output on line 181: correctly got 2 tuples with 3 fields [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 173: RESULT: 20 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 181: RESULT: 1 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 173: RESULT: db on con2 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 181: RESULT: 2 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 173: RESULT: db on con2 offset: -1; array: no +[NO_PID]: ecpg_get_data on line 181: RESULT: 10 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: deallocate_one on line 175: name stmt_5 +[NO_PID]: ecpg_get_data on line 181: RESULT: 20 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 45: query: drop table if exists source; with 0 parameter(s) on connection con1 +[NO_PID]: ecpg_get_data on line 181: RESULT: db on con2 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 45: using PQexec +[NO_PID]: ecpg_get_data on line 181: RESULT: db on con2 offset: -1; array: no [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_process_output on line 45: OK: DROP TABLE +[NO_PID]: deallocate_one on line 183: name stmt_5 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 46: query: drop table if exists source; with 0 parameter(s) on connection con2 +[NO_PID]: ecpg_execute on line 46: query: drop table if exists source; with 0 parameter(s) on connection con1 [NO_PID]: sqlca: code: 0, state: 00000 [NO_PID]: ecpg_execute on line 46: using PQexec [NO_PID]: sqlca: code: 0, state: 00000 [NO_PID]: ecpg_process_output on line 46: OK: DROP TABLE [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ECPGtrans on line 182: action "commit"; connection "con1" +[NO_PID]: ecpg_execute on line 47: query: drop table if exists source; with 0 parameter(s) on connection con2 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ECPGtrans on line 183: action "commit"; connection "con2" +[NO_PID]: ecpg_execute on line 47: using PQexec [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_finish: connection con2 closed +[NO_PID]: ecpg_process_output on line 47: OK: DROP TABLE [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: deallocate_one on line 0: name stmt_3 +[NO_PID]: ECPGtrans on line 190: action "commit"; connection "con1" [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: deallocate_one on line 0: name stmt_2 +[NO_PID]: ECPGtrans on line 191: action "commit"; connection "con2" +[NO_PID]: sqlca: code: 0, state: 00000 +[NO_PID]: ecpg_finish: connection con2 closed [NO_PID]: sqlca: code: 0, state: 00000 [NO_PID]: ecpg_finish: connection con1 closed [NO_PID]: sqlca: code: 0, state: 00000 diff --git a/src/interfaces/ecpg/test/expected/sql-declare.stdout b/src/interfaces/ecpg/test/expected/sql-declare.stdout index 3352d47cc4..3e14100cf7 100644 --- a/src/interfaces/ecpg/test/expected/sql-declare.stdout +++ b/src/interfaces/ecpg/test/expected/sql-declare.stdout @@ -2,6 +2,8 @@ f1=1, f2=10, f3=db on con2 f1=2, f2=20, f3=db on con2 +descriptor: number of lines : 3 + ****testcase2 test results:**** f1=1, f2=10, f3=db on con1 f1=2, f2=20, f3=db on con1 diff --git a/src/interfaces/ecpg/test/sql/declare.pgc b/src/interfaces/ecpg/test/sql/declare.pgc index f9ef468741..773ae3ea18 100644 --- a/src/interfaces/ecpg/test/sql/declare.pgc +++ b/src/interfaces/ecpg/test/sql/declare.pgc @@ -18,6 +18,7 @@ EXEC SQL BEGIN DECLARE SECTION; int f1[ARRAY_SZIE]; int f2[ARRAY_SZIE]; char f3[ARRAY_SZIE][20]; +int count; EXEC SQL END DECLARE SECTION; int main(void) @@ -100,6 +101,13 @@ void execute_test(void) EXEC SQL DECLARE cur_2 CURSOR FOR stmt_2; EXEC SQL OPEN cur_2; + /* Of cause DESCRIBE clause can be used */ + EXEC SQL ALLOCATE DESCRIPTOR mydesc; + EXEC SQL DESCRIBE stmt_2 INTO SQL DESCRIPTOR mydesc; + EXEC SQL GET DESCRIPTOR mydesc :count = COUNT; + printf("descriptor: number of lines : %d\n\n", count); + EXEC SQL DEALLOCATE mydesc; + EXEC SQL WHENEVER NOT FOUND DO BREAK; i = 0; while (1)