From 83fa037b731aa67e7626d143d30d75cae2018af5 Mon Sep 17 00:00:00 2001 From: Michael Meskes Date: Fri, 29 Jan 2010 16:28:13 +0000 Subject: [PATCH] Changed ECPG outofscope handling to always print out statements in the same order so regression testing is possible, by Zoltan Boszormenyi --- src/interfaces/ecpg/preproc/ecpg.addons | 11 +- src/interfaces/ecpg/preproc/ecpg.header | 191 +++++++++--------- src/interfaces/ecpg/preproc/ecpg.trailer | 11 +- .../ecpg/test/expected/preproc-cursor.c | 6 +- .../ecpg/test/expected/preproc-outofscope.c | 26 +-- .../test/expected/preproc-outofscope.stderr | 34 +--- .../test/expected/preproc-outofscope.stdout | 3 +- .../ecpg/test/preproc/outofscope.pgc | 1 - 8 files changed, 124 insertions(+), 159 deletions(-) diff --git a/src/interfaces/ecpg/preproc/ecpg.addons b/src/interfaces/ecpg/preproc/ecpg.addons index 6c5889ec6b..de46f51ca7 100644 --- a/src/interfaces/ecpg/preproc/ecpg.addons +++ b/src/interfaces/ecpg/preproc/ecpg.addons @@ -1,4 +1,4 @@ -/* $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/ecpg.addons,v 1.15 2010/01/26 09:07:31 meskes Exp $ */ +/* $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/ecpg.addons,v 1.16 2010/01/29 16:28:13 meskes Exp $ */ ECPG: stmtClosePortalStmt block { if (INFORMIX_MODE) @@ -331,16 +331,11 @@ ECPG: DeclareCursorStmtDECLAREcursor_namecursor_optionsCURSORopt_holdFORSelectSt comment = cat_str(3, make_str("/*"), c1, make_str("*/")); if ((braces_open > 0) && INFORMIX_MODE) /* we're in a function */ - $$ = cat_str(4, - adjust_outofscope_cursor_vars(this, true), - adjust_outofscope_cursor_vars(this, false), + $$ = cat_str(3, adjust_outofscope_cursor_vars(this), make_str("ECPG_informix_reset_sqlca();"), comment); else - $$ = cat_str(3, - adjust_outofscope_cursor_vars(this, true), - adjust_outofscope_cursor_vars(this, false), - comment); + $$ = cat2_str(adjust_outofscope_cursor_vars(this), comment); } ECPG: ClosePortalStmtCLOSEcursor_name block { diff --git a/src/interfaces/ecpg/preproc/ecpg.header b/src/interfaces/ecpg/preproc/ecpg.header index f2847f667b..167951295c 100644 --- a/src/interfaces/ecpg/preproc/ecpg.header +++ b/src/interfaces/ecpg/preproc/ecpg.header @@ -1,4 +1,4 @@ -/* $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/ecpg.header,v 1.12 2010/01/29 15:57:01 meskes Exp $ */ +/* $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/ecpg.header,v 1.13 2010/01/29 16:28:13 meskes Exp $ */ /* Copyright comment */ %{ @@ -227,7 +227,7 @@ create_questionmarks(char *name, bool array) } static char * -adjust_outofscope_cursor_vars(struct cursor *cur, bool insert) +adjust_outofscope_cursor_vars(struct cursor *cur) { /* Informix accepts DECLARE with variables that are out of scope when OPEN is called. * For instance you can DECLARE a cursor in one function, and OPEN/FETCH/CLOSE @@ -240,132 +240,137 @@ adjust_outofscope_cursor_vars(struct cursor *cur, bool insert) * instead of the variable. Do it only for local variables, not for globals. */ - struct arguments *list; - struct arguments *ptr; - struct arguments *newlist = NULL; - struct variable *newvar, *newind; char *result = make_str(""); + int insert; - list = (insert ? cur->argsinsert : cur->argsresult); - - for (ptr = list; ptr != NULL; ptr = ptr->next) + for (insert = 1; insert >= 0; insert--) { - char temp[20]; /* this should be sufficient unless you have 8 byte integers */ - char *original_var; - bool skip_set_var = false; + struct arguments *list; + struct arguments *ptr; + struct arguments *newlist = NULL; + struct variable *newvar, *newind; - /* change variable name to "ECPGget_var()" */ - original_var = ptr->variable->name; - sprintf(temp, "%d))", ecpg_internal_var); + list = (insert ? cur->argsinsert : cur->argsresult); - /* Don't emit ECPGset_var() calls for global variables */ - if (ptr->variable->brace_level == 0) - { - newvar = ptr->variable; - skip_set_var = true; - } - else if ((ptr->variable->type->type == ECPGt_char_variable) && (!strncmp(ptr->variable->name, "ECPGprepared_statement", strlen("ECPGprepared_statement")))) - { - newvar = ptr->variable; - skip_set_var = true; - } - else if ((ptr->variable->type->type != ECPGt_varchar && ptr->variable->type->type != ECPGt_char && ptr->variable->type->type != ECPGt_unsigned_char && ptr->variable->type->type != ECPGt_string) && atoi(ptr->variable->type->size) > 1) + for (ptr = list; ptr != NULL; ptr = ptr->next) { - newvar = new_variable(cat_str(4, make_str("("), mm_strdup(ecpg_type_name(ptr->variable->type->u.element->type)), make_str(" *)(ECPGget_var("), mm_strdup(temp)), ECPGmake_array_type(ECPGmake_simple_type(ptr->variable->type->u.element->type, make_str("1"), ptr->variable->type->u.element->lineno), ptr->variable->type->size), 0); - sprintf(temp, "%d, (", ecpg_internal_var++); - } - else if ((ptr->variable->type->type == ECPGt_varchar || ptr->variable->type->type == ECPGt_char || ptr->variable->type->type == ECPGt_unsigned_char || ptr->variable->type->type == ECPGt_string) && atoi(ptr->variable->type->size) > 1) - { - newvar = new_variable(cat_str(4, make_str("("), mm_strdup(ecpg_type_name(ptr->variable->type->type)), make_str(" *)(ECPGget_var("), mm_strdup(temp)), ECPGmake_simple_type(ptr->variable->type->type, ptr->variable->type->size, ptr->variable->type->lineno), 0); - if (ptr->variable->type->type == ECPGt_varchar) - sprintf(temp, "%d, &(", ecpg_internal_var++); - else - sprintf(temp, "%d, (", ecpg_internal_var++); - } - else if (ptr->variable->type->type == ECPGt_struct || ptr->variable->type->type == ECPGt_union) - { - sprintf(temp, "%d)))", ecpg_internal_var); - newvar = new_variable(cat_str(4, make_str("(*("), mm_strdup(ptr->variable->type->type_name), make_str(" *)(ECPGget_var("), mm_strdup(temp)), ECPGmake_struct_type(ptr->variable->type->u.members, ptr->variable->type->type, ptr->variable->type->type_name, ptr->variable->type->struct_sizeof), 0); - sprintf(temp, "%d, &(", ecpg_internal_var++); - } - else if (ptr->variable->type->type == ECPGt_array) - { - if (ptr->variable->type->u.element->type == ECPGt_struct || ptr->variable->type->u.element->type == ECPGt_union) + char temp[20]; + char *original_var; + bool skip_set_var = false; + + /* change variable name to "ECPGget_var()" */ + original_var = ptr->variable->name; + sprintf(temp, "%d))", ecpg_internal_var); + + /* Don't emit ECPGset_var() calls for global variables */ + if (ptr->variable->brace_level == 0) { - sprintf(temp, "%d)))", ecpg_internal_var); - newvar = new_variable(cat_str(4, make_str("(*("), mm_strdup(ptr->variable->type->u.element->type_name), make_str(" *)(ECPGget_var("), mm_strdup(temp)), ECPGmake_struct_type(ptr->variable->type->u.element->u.members, ptr->variable->type->u.element->type, ptr->variable->type->u.element->type_name, ptr->variable->type->u.element->struct_sizeof), 0); + newvar = ptr->variable; + skip_set_var = true; + } + else if ((ptr->variable->type->type == ECPGt_char_variable) && (!strncmp(ptr->variable->name, "ECPGprepared_statement", strlen("ECPGprepared_statement")))) + { + newvar = ptr->variable; + skip_set_var = true; + } + else if ((ptr->variable->type->type != ECPGt_varchar && ptr->variable->type->type != ECPGt_char && ptr->variable->type->type != ECPGt_unsigned_char && ptr->variable->type->type != ECPGt_string) && atoi(ptr->variable->type->size) > 1) + { + newvar = new_variable(cat_str(4, make_str("("), mm_strdup(ecpg_type_name(ptr->variable->type->u.element->type)), make_str(" *)(ECPGget_var("), mm_strdup(temp)), ECPGmake_array_type(ECPGmake_simple_type(ptr->variable->type->u.element->type, make_str("1"), ptr->variable->type->u.element->lineno), ptr->variable->type->size), 0); sprintf(temp, "%d, (", ecpg_internal_var++); } - else + else if ((ptr->variable->type->type == ECPGt_varchar || ptr->variable->type->type == ECPGt_char || ptr->variable->type->type == ECPGt_unsigned_char || ptr->variable->type->type == ECPGt_string) && atoi(ptr->variable->type->size) > 1) { - newvar = new_variable(cat_str(4, make_str("("), mm_strdup(ecpg_type_name(ptr->variable->type->type)), make_str(" *)(ECPGget_var("), mm_strdup(temp)), ECPGmake_array_type(ECPGmake_simple_type(ptr->variable->type->u.element->type, ptr->variable->type->u.element->size, ptr->variable->type->u.element->lineno), ptr->variable->type->size), 0); - sprintf(temp, "%d, &(", ecpg_internal_var++); + newvar = new_variable(cat_str(4, make_str("("), mm_strdup(ecpg_type_name(ptr->variable->type->type)), make_str(" *)(ECPGget_var("), mm_strdup(temp)), ECPGmake_simple_type(ptr->variable->type->type, ptr->variable->type->size, ptr->variable->type->lineno), 0); + if (ptr->variable->type->type == ECPGt_varchar) + sprintf(temp, "%d, &(", ecpg_internal_var++); + else + sprintf(temp, "%d, (", ecpg_internal_var++); } - } - else - { - newvar = new_variable(cat_str(4, make_str("*("), mm_strdup(ecpg_type_name(ptr->variable->type->type)), make_str(" *)(ECPGget_var("), mm_strdup(temp)), ECPGmake_simple_type(ptr->variable->type->type, ptr->variable->type->size, ptr->variable->type->lineno), 0); - sprintf(temp, "%d, &(", ecpg_internal_var++); - } - - /* create call to "ECPGset_var(, , )" */ - if (!skip_set_var) - result = cat_str(5, result, make_str("ECPGset_var("), mm_strdup(temp), mm_strdup(original_var), make_str("), __LINE__);\n")); - - /* now the indicator if there is one and it's not a global variable */ - if ((ptr->indicator->type->type == ECPGt_NO_INDICATOR) || (ptr->indicator->brace_level == 0)) - { - newind = ptr->indicator; - } - else - { - /* change variable name to "ECPGget_var()" */ - original_var = ptr->indicator->name; - sprintf(temp, "%d))", ecpg_internal_var); - - if (ptr->indicator->type->type == ECPGt_struct || ptr->indicator->type->type == ECPGt_union) + else if (ptr->variable->type->type == ECPGt_struct || ptr->variable->type->type == ECPGt_union) { sprintf(temp, "%d)))", ecpg_internal_var); - newind = new_variable(cat_str(4, make_str("(*("), mm_strdup(ptr->indicator->type->type_name), make_str(" *)(ECPGget_var("), mm_strdup(temp)), ECPGmake_struct_type(ptr->indicator->type->u.members, ptr->indicator->type->type, ptr->indicator->type->type_name, ptr->indicator->type->struct_sizeof), 0); + newvar = new_variable(cat_str(4, make_str("(*("), mm_strdup(ptr->variable->type->type_name), make_str(" *)(ECPGget_var("), mm_strdup(temp)), ECPGmake_struct_type(ptr->variable->type->u.members, ptr->variable->type->type, ptr->variable->type->type_name, ptr->variable->type->struct_sizeof), 0); sprintf(temp, "%d, &(", ecpg_internal_var++); } - else if (ptr->indicator->type->type == ECPGt_array) + else if (ptr->variable->type->type == ECPGt_array) { - if (ptr->indicator->type->u.element->type == ECPGt_struct || ptr->indicator->type->u.element->type == ECPGt_union) + if (ptr->variable->type->u.element->type == ECPGt_struct || ptr->variable->type->u.element->type == ECPGt_union) { sprintf(temp, "%d)))", ecpg_internal_var); - newind = new_variable(cat_str(4, make_str("(*("), mm_strdup(ptr->indicator->type->u.element->type_name), make_str(" *)(ECPGget_var("), mm_strdup(temp)), ECPGmake_struct_type(ptr->indicator->type->u.element->u.members, ptr->indicator->type->u.element->type, ptr->indicator->type->u.element->type_name, ptr->indicator->type->u.element->struct_sizeof), 0); + newvar = new_variable(cat_str(4, make_str("(*("), mm_strdup(ptr->variable->type->u.element->type_name), make_str(" *)(ECPGget_var("), mm_strdup(temp)), ECPGmake_struct_type(ptr->variable->type->u.element->u.members, ptr->variable->type->u.element->type, ptr->variable->type->u.element->type_name, ptr->variable->type->u.element->struct_sizeof), 0); sprintf(temp, "%d, (", ecpg_internal_var++); } else { - newind = new_variable(cat_str(4, make_str("("), mm_strdup(ecpg_type_name(ptr->indicator->type->u.element->type)), make_str(" *)(ECPGget_var("), mm_strdup(temp)), ECPGmake_array_type(ECPGmake_simple_type(ptr->indicator->type->u.element->type, ptr->indicator->type->u.element->size, ptr->indicator->type->u.element->lineno), ptr->indicator->type->size), 0); + newvar = new_variable(cat_str(4, make_str("("), mm_strdup(ecpg_type_name(ptr->variable->type->type)), make_str(" *)(ECPGget_var("), mm_strdup(temp)), ECPGmake_array_type(ECPGmake_simple_type(ptr->variable->type->u.element->type, ptr->variable->type->u.element->size, ptr->variable->type->u.element->lineno), ptr->variable->type->size), 0); sprintf(temp, "%d, &(", ecpg_internal_var++); } } - else if (atoi(ptr->indicator->type->size) > 1) + else { - newind = new_variable(cat_str(4, make_str("("), mm_strdup(ecpg_type_name(ptr->indicator->type->type)), make_str(" *)(ECPGget_var("), mm_strdup(temp)), ECPGmake_simple_type(ptr->indicator->type->type, ptr->indicator->type->size, ptr->variable->type->lineno), 0); - sprintf(temp, "%d, (", ecpg_internal_var++); + newvar = new_variable(cat_str(4, make_str("*("), mm_strdup(ecpg_type_name(ptr->variable->type->type)), make_str(" *)(ECPGget_var("), mm_strdup(temp)), ECPGmake_simple_type(ptr->variable->type->type, ptr->variable->type->size, ptr->variable->type->lineno), 0); + sprintf(temp, "%d, &(", ecpg_internal_var++); + } + + /* create call to "ECPGset_var(, . )" */ + if (!skip_set_var) + result = cat_str(5, result, make_str("ECPGset_var("), mm_strdup(temp), mm_strdup(original_var), make_str("), __LINE__);\n")); + + /* now the indicator if there is one and it's not a global variable */ + if ((ptr->indicator->type->type == ECPGt_NO_INDICATOR) || (ptr->indicator->brace_level == 0)) + { + newind = ptr->indicator; } else { - newind = new_variable(cat_str(4, make_str("*("), mm_strdup(ecpg_type_name(ptr->indicator->type->type)), make_str(" *)(ECPGget_var("), mm_strdup(temp)), ECPGmake_simple_type(ptr->indicator->type->type, ptr->indicator->type->size, ptr->variable->type->lineno), 0); - sprintf(temp, "%d, &(", ecpg_internal_var++); + /* change variable name to "ECPGget_var()" */ + original_var = ptr->indicator->name; + sprintf(temp, "%d))", ecpg_internal_var); + + if (ptr->indicator->type->type == ECPGt_struct || ptr->indicator->type->type == ECPGt_union) + { + sprintf(temp, "%d)))", ecpg_internal_var); + newind = new_variable(cat_str(4, make_str("(*("), mm_strdup(ptr->indicator->type->type_name), make_str(" *)(ECPGget_var("), mm_strdup(temp)), ECPGmake_struct_type(ptr->indicator->type->u.members, ptr->indicator->type->type, ptr->indicator->type->type_name, ptr->indicator->type->struct_sizeof), 0); + sprintf(temp, "%d, &(", ecpg_internal_var++); + } + else if (ptr->indicator->type->type == ECPGt_array) + { + if (ptr->indicator->type->u.element->type == ECPGt_struct || ptr->indicator->type->u.element->type == ECPGt_union) + { + sprintf(temp, "%d)))", ecpg_internal_var); + newind = new_variable(cat_str(4, make_str("(*("), mm_strdup(ptr->indicator->type->u.element->type_name), make_str(" *)(ECPGget_var("), mm_strdup(temp)), ECPGmake_struct_type(ptr->indicator->type->u.element->u.members, ptr->indicator->type->u.element->type, ptr->indicator->type->u.element->type_name, ptr->indicator->type->u.element->struct_sizeof), 0); + sprintf(temp, "%d, (", ecpg_internal_var++); + } + else + { + newind = new_variable(cat_str(4, make_str("("), mm_strdup(ecpg_type_name(ptr->indicator->type->u.element->type)), make_str(" *)(ECPGget_var("), mm_strdup(temp)), ECPGmake_array_type(ECPGmake_simple_type(ptr->indicator->type->u.element->type, ptr->indicator->type->u.element->size, ptr->indicator->type->u.element->lineno), ptr->indicator->type->size), 0); + sprintf(temp, "%d, &(", ecpg_internal_var++); + } + } + else if (atoi(ptr->indicator->type->size) > 1) + { + newind = new_variable(cat_str(4, make_str("("), mm_strdup(ecpg_type_name(ptr->indicator->type->type)), make_str(" *)(ECPGget_var("), mm_strdup(temp)), ECPGmake_simple_type(ptr->indicator->type->type, ptr->indicator->type->size, ptr->variable->type->lineno), 0); + sprintf(temp, "%d, (", ecpg_internal_var++); + } + else + { + newind = new_variable(cat_str(4, make_str("*("), mm_strdup(ecpg_type_name(ptr->indicator->type->type)), make_str(" *)(ECPGget_var("), mm_strdup(temp)), ECPGmake_simple_type(ptr->indicator->type->type, ptr->indicator->type->size, ptr->variable->type->lineno), 0); + sprintf(temp, "%d, &(", ecpg_internal_var++); + } + + /* create call to "ECPGset_var(, . )" */ + result = cat_str(5, result, make_str("ECPGset_var("), mm_strdup(temp), mm_strdup(original_var), make_str("), __LINE__);\n")); } - /* create call to "ECPGset_var(, , )" */ - result = cat_str(5, result, make_str("ECPGset_var("), mm_strdup(temp), mm_strdup(original_var), make_str("), __LINE__);\n")); + add_variable_to_tail(&newlist, newvar, newind); } - add_variable_to_tail(&newlist, newvar, newind); + if (insert) + cur->argsinsert_oos = newlist; + else + cur->argsresult_oos = newlist; } - if (insert) - cur->argsinsert_oos = newlist; - else - cur->argsresult_oos = newlist; - return result; } diff --git a/src/interfaces/ecpg/preproc/ecpg.trailer b/src/interfaces/ecpg/preproc/ecpg.trailer index 30af0b068c..21d4e5d758 100644 --- a/src/interfaces/ecpg/preproc/ecpg.trailer +++ b/src/interfaces/ecpg/preproc/ecpg.trailer @@ -1,4 +1,4 @@ -/* $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/ecpg.trailer,v 1.19 2010/01/26 09:07:31 meskes Exp $ */ +/* $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/ecpg.trailer,v 1.20 2010/01/29 16:28:13 meskes Exp $ */ statements: /*EMPTY*/ | statements statement @@ -332,16 +332,11 @@ ECPGCursorStmt: DECLARE cursor_name cursor_options CURSOR opt_hold FOR prepared comment = cat_str(3, make_str("/*"), mm_strdup(this->command), make_str("*/")); if ((braces_open > 0) && INFORMIX_MODE) /* we're in a function */ - $$ = cat_str(4, - adjust_outofscope_cursor_vars(this, true), - adjust_outofscope_cursor_vars(this, false), + $$ = cat_str(3, adjust_outofscope_cursor_vars(this), make_str("ECPG_informix_reset_sqlca();"), comment); else - $$ = cat_str(3, - adjust_outofscope_cursor_vars(this, true), - adjust_outofscope_cursor_vars(this, false), - comment); + $$ = cat2_str(adjust_outofscope_cursor_vars(this), comment); } ; diff --git a/src/interfaces/ecpg/test/expected/preproc-cursor.c b/src/interfaces/ecpg/test/expected/preproc-cursor.c index 2373475271..b61900c9f9 100644 --- a/src/interfaces/ecpg/test/expected/preproc-cursor.c +++ b/src/interfaces/ecpg/test/expected/preproc-cursor.c @@ -287,9 +287,9 @@ if (sqlca.sqlcode < 0) exit (1);} /* Dynamic cursorname test with INTO list in DECLARE stmt */ strcpy(msg, "declare"); - ECPGset_var( 3, &( curname2 ), __LINE__);\ - ECPGset_var( 1, ( t ), __LINE__);\ - ECPGset_var( 2, &( id ), __LINE__);\ + ECPGset_var( 1, &( curname2 ), __LINE__);\ + ECPGset_var( 2, ( t ), __LINE__);\ + ECPGset_var( 3, &( id ), __LINE__);\ /* declare $0 cursor for select id , t from t1 */ #line 100 "cursor.pgc" diff --git a/src/interfaces/ecpg/test/expected/preproc-outofscope.c b/src/interfaces/ecpg/test/expected/preproc-outofscope.c index de31c65fc6..aa98ff4ba3 100644 --- a/src/interfaces/ecpg/test/expected/preproc-outofscope.c +++ b/src/interfaces/ecpg/test/expected/preproc-outofscope.c @@ -305,25 +305,19 @@ if (sqlca.sqlcode < 0) exit (1);} if (sqlca.sqlcode < 0) exit (1);} #line 85 "outofscope.pgc" - { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "insert into a1 ( id , t , d1 , d2 , c ) values ( default , '\"a\"' , - 1.0 , 'nan' :: float8 , 'a' )", ECPGt_EOIT, ECPGt_EORT); + { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "insert into a1 ( id , t , d1 , d2 , c ) values ( default , 'b' , 2.0 , 3 , 'b' )", ECPGt_EOIT, ECPGt_EORT); #line 86 "outofscope.pgc" if (sqlca.sqlcode < 0) exit (1);} #line 86 "outofscope.pgc" - { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "insert into a1 ( id , t , d1 , d2 , c ) values ( default , 'b' , 2.0 , 3 , 'b' )", ECPGt_EOIT, ECPGt_EORT); -#line 87 "outofscope.pgc" - -if (sqlca.sqlcode < 0) exit (1);} -#line 87 "outofscope.pgc" - strcpy(msg, "commit"); { ECPGtrans(__LINE__, NULL, "commit"); -#line 90 "outofscope.pgc" +#line 89 "outofscope.pgc" if (sqlca.sqlcode < 0) exit (1);} -#line 90 "outofscope.pgc" +#line 89 "outofscope.pgc" /* Test out-of-scope DECLARE/OPEN/FETCH/CLOSE */ @@ -332,7 +326,7 @@ if (sqlca.sqlcode < 0) exit (1);} open_cur1(); /* exec sql whenever not found break ; */ -#line 97 "outofscope.pgc" +#line 96 "outofscope.pgc" while (1) @@ -353,26 +347,26 @@ if (sqlca.sqlcode < 0) exit (1);} strcpy(msg, "drop"); { ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "drop table a1", ECPGt_EOIT, ECPGt_EORT); -#line 116 "outofscope.pgc" +#line 115 "outofscope.pgc" if (sqlca.sqlcode < 0) exit (1);} -#line 116 "outofscope.pgc" +#line 115 "outofscope.pgc" strcpy(msg, "commit"); { ECPGtrans(__LINE__, NULL, "commit"); -#line 119 "outofscope.pgc" +#line 118 "outofscope.pgc" if (sqlca.sqlcode < 0) exit (1);} -#line 119 "outofscope.pgc" +#line 118 "outofscope.pgc" strcpy(msg, "disconnect"); { ECPGdisconnect(__LINE__, "CURRENT"); -#line 122 "outofscope.pgc" +#line 121 "outofscope.pgc" if (sqlca.sqlcode < 0) exit (1);} -#line 122 "outofscope.pgc" +#line 121 "outofscope.pgc" return (0); diff --git a/src/interfaces/ecpg/test/expected/preproc-outofscope.stderr b/src/interfaces/ecpg/test/expected/preproc-outofscope.stderr index c7dccbf1d9..de44d891b6 100644 --- a/src/interfaces/ecpg/test/expected/preproc-outofscope.stderr +++ b/src/interfaces/ecpg/test/expected/preproc-outofscope.stderr @@ -26,19 +26,13 @@ [NO_PID]: sqlca: code: 0, state: 00000 [NO_PID]: ecpg_execute on line 85: OK: INSERT 0 1 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 86: query: insert into a1 ( id , t , d1 , d2 , c ) values ( default , '"a"' , - 1.0 , 'nan' :: float8 , 'a' ); with 0 parameter(s) on connection regress1 +[NO_PID]: ecpg_execute on line 86: query: insert into a1 ( id , t , d1 , d2 , c ) values ( default , 'b' , 2.0 , 3 , 'b' ); with 0 parameter(s) on connection regress1 [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 86: OK: INSERT 0 1 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 87: query: insert into a1 ( id , t , d1 , d2 , c ) values ( default , 'b' , 2.0 , 3 , 'b' ); with 0 parameter(s) on connection regress1 -[NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 87: using PQexec -[NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 87: OK: INSERT 0 1 -[NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ECPGtrans on line 90: action "commit"; connection "regress1" +[NO_PID]: ECPGtrans on line 89: action "commit"; connection "regress1" [NO_PID]: sqlca: code: 0, state: 00000 [NO_PID]: ecpg_execute on line 40: query: declare mycur cursor for select * from a1; with 0 parameter(s) on connection regress1 [NO_PID]: sqlca: code: 0, state: 00000 @@ -86,22 +80,6 @@ [NO_PID]: sqlca: code: 0, state: 00000 [NO_PID]: ecpg_get_data on line 49: RESULT: 3 offset: -1; array: yes [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 49: RESULT: "a" offset: -1; array: yes -[NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 49: RESULT: -1.0 offset: -1; array: yes -[NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 49: RESULT: NaN offset: -1; array: yes -[NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 49: RESULT: a offset: -1; array: yes -[NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 49: query: fetch mycur; with 0 parameter(s) on connection regress1 -[NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 49: using PQexec -[NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 49: correctly got 1 tuples with 5 fields -[NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_get_data on line 49: RESULT: 4 offset: -1; array: yes -[NO_PID]: sqlca: code: 0, state: 00000 [NO_PID]: ecpg_get_data on line 49: RESULT: b offset: -1; array: yes [NO_PID]: sqlca: code: 0, state: 00000 [NO_PID]: ecpg_get_data on line 49: RESULT: 2.0 offset: -1; array: yes @@ -124,13 +102,13 @@ [NO_PID]: sqlca: code: 0, state: 00000 [NO_PID]: ecpg_execute on line 58: OK: CLOSE CURSOR [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 116: query: drop table a1; with 0 parameter(s) on connection regress1 +[NO_PID]: ecpg_execute on line 115: query: drop table a1; with 0 parameter(s) on connection regress1 [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 116: using PQexec +[NO_PID]: ecpg_execute on line 115: using PQexec [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ecpg_execute on line 116: OK: DROP TABLE +[NO_PID]: ecpg_execute on line 115: OK: DROP TABLE [NO_PID]: sqlca: code: 0, state: 00000 -[NO_PID]: ECPGtrans on line 119: action "commit"; connection "regress1" +[NO_PID]: ECPGtrans on line 118: 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/preproc-outofscope.stdout b/src/interfaces/ecpg/test/expected/preproc-outofscope.stdout index 636d4910dc..8c53ad7dfc 100644 --- a/src/interfaces/ecpg/test/expected/preproc-outofscope.stdout +++ b/src/interfaces/ecpg/test/expected/preproc-outofscope.stdout @@ -1,4 +1,3 @@ id=1 t='a' d1=1.000000 d2=2.000000 c = 'a ' id=2 t='' (NULL) d1=0.000000 (NULL) d2=0.000000 (NULL) c = '' (NULL) -id=3 t='"a"' d1=-1.000000 d2=nan c = 'a ' -id=4 t='b' d1=2.000000 d2=3.000000 c = 'b ' +id=3 t='b' d1=2.000000 d2=3.000000 c = 'b ' diff --git a/src/interfaces/ecpg/test/preproc/outofscope.pgc b/src/interfaces/ecpg/test/preproc/outofscope.pgc index 70fb6a6a1b..12cd79ac77 100644 --- a/src/interfaces/ecpg/test/preproc/outofscope.pgc +++ b/src/interfaces/ecpg/test/preproc/outofscope.pgc @@ -83,7 +83,6 @@ main (void) strcpy(msg, "insert"); exec sql insert into a1(id, t, d1, d2, c) values (default, 'a', 1.0, 2, 'a'); exec sql insert into a1(id, t, d1, d2, c) values (default, null, null, null, null); - exec sql insert into a1(id, t, d1, d2, c) values (default, '"a"', -1.0, 'nan'::float8, 'a'); exec sql insert into a1(id, t, d1, d2, c) values (default, 'b', 2.0, 3, 'b'); strcpy(msg, "commit"); -- GitLab