aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/interfaces/ecpg/ecpglib/misc.c11
-rw-r--r--src/interfaces/ecpg/preproc/ecpg.addons17
-rw-r--r--src/interfaces/ecpg/preproc/ecpg.trailer6
-rw-r--r--src/interfaces/ecpg/preproc/output.c4
-rw-r--r--src/interfaces/ecpg/preproc/preproc_extern.h2
-rw-r--r--src/interfaces/ecpg/test/expected/compat_informix-sqlda.c4
-rw-r--r--src/interfaces/ecpg/test/expected/compat_informix-test_informix.c7
-rw-r--r--src/interfaces/ecpg/test/expected/preproc-cursor.c25
-rw-r--r--src/interfaces/ecpg/test/expected/preproc-outofscope.c5
-rw-r--r--src/interfaces/ecpg/test/expected/sql-binary.c15
10 files changed, 75 insertions, 21 deletions
diff --git a/src/interfaces/ecpg/ecpglib/misc.c b/src/interfaces/ecpg/ecpglib/misc.c
index a26dfdb361f..ee0d3e98fb9 100644
--- a/src/interfaces/ecpg/ecpglib/misc.c
+++ b/src/interfaces/ecpg/ecpglib/misc.c
@@ -525,6 +525,17 @@ ECPGset_var(int number, void *pointer, int lineno)
{
struct var_list *ptr;
+ struct sqlca_t *sqlca = ECPGget_sqlca();
+
+ if (sqlca == NULL)
+ {
+ ecpg_raise(lineno, ECPG_OUT_OF_MEMORY,
+ ECPG_SQLSTATE_ECPG_OUT_OF_MEMORY, NULL);
+ return;
+ }
+
+ ecpg_init_sqlca(sqlca);
+
for (ptr = ivlist; ptr != NULL; ptr = ptr->next)
{
if (ptr->number == number)
diff --git a/src/interfaces/ecpg/preproc/ecpg.addons b/src/interfaces/ecpg/preproc/ecpg.addons
index 821d93ef079..86be5041e9f 100644
--- a/src/interfaces/ecpg/preproc/ecpg.addons
+++ b/src/interfaces/ecpg/preproc/ecpg.addons
@@ -22,7 +22,7 @@ ECPG: stmtDeallocateStmt block
output_deallocate_prepare_statement($1);
}
ECPG: stmtDeclareCursorStmt block
- { output_simple_statement($1); }
+ { output_simple_statement($1, (strncmp($1, "ECPGset_var", strlen("ECPGset_var")) == 0) ? 4 : 0); }
ECPG: stmtDiscardStmt block
ECPG: stmtFetchStmt block
{ output_statement($1, 1, ECPGst_normal); }
@@ -65,7 +65,7 @@ ECPG: stmtViewStmt rule
}
| ECPGCursorStmt
{
- output_simple_statement($1);
+ output_simple_statement($1, (strncmp($1, "ECPGset_var", strlen("ECPGset_var")) == 0) ? 4 : 0);
}
| ECPGDeallocateDescr
{
@@ -75,7 +75,7 @@ ECPG: stmtViewStmt rule
}
| ECPGDeclare
{
- output_simple_statement($1);
+ output_simple_statement($1, 0);
}
| ECPGDescribe
{
@@ -178,14 +178,14 @@ ECPG: stmtViewStmt rule
if (connection)
mmerror(PARSE_ERROR, ET_ERROR, "AT option not allowed in VAR statement");
- output_simple_statement($1);
+ output_simple_statement($1, 0);
}
| ECPGWhenever
{
if (connection)
mmerror(PARSE_ERROR, ET_ERROR, "AT option not allowed in WHENEVER statement");
- output_simple_statement($1);
+ output_simple_statement($1, 0);
}
ECPG: where_or_current_clauseWHERECURRENT_POFcursor_name block
{
@@ -327,12 +327,7 @@ ECPG: DeclareCursorStmtDECLAREcursor_namecursor_optionsCURSORopt_holdFORSelectSt
}
comment = cat_str(3, mm_strdup("/*"), c1, mm_strdup("*/"));
- if ((braces_open > 0) && INFORMIX_MODE) /* we're in a function */
- $$ = cat_str(3, adjust_outofscope_cursor_vars(this),
- mm_strdup("ECPG_informix_reset_sqlca();"),
- comment);
- else
- $$ = cat2_str(adjust_outofscope_cursor_vars(this), comment);
+ $$ = cat2_str(adjust_outofscope_cursor_vars(this), comment);
}
ECPG: ClosePortalStmtCLOSEcursor_name block
{
diff --git a/src/interfaces/ecpg/preproc/ecpg.trailer b/src/interfaces/ecpg/preproc/ecpg.trailer
index 19dc7818859..60e1f53e9d3 100644
--- a/src/interfaces/ecpg/preproc/ecpg.trailer
+++ b/src/interfaces/ecpg/preproc/ecpg.trailer
@@ -339,12 +339,8 @@ ECPGCursorStmt: DECLARE cursor_name cursor_options CURSOR opt_hold FOR prepared
comment = cat_str(3, mm_strdup("/*"), mm_strdup(this->command), mm_strdup("*/"));
- if ((braces_open > 0) && INFORMIX_MODE) /* we're in a function */
- $$ = cat_str(3, adjust_outofscope_cursor_vars(this),
- mm_strdup("ECPG_informix_reset_sqlca();"),
+ $$ = cat_str(2, adjust_outofscope_cursor_vars(this),
comment);
- else
- $$ = cat2_str(adjust_outofscope_cursor_vars(this), comment);
}
;
diff --git a/src/interfaces/ecpg/preproc/output.c b/src/interfaces/ecpg/preproc/output.c
index cdfa52608c4..f778bbe35fe 100644
--- a/src/interfaces/ecpg/preproc/output.c
+++ b/src/interfaces/ecpg/preproc/output.c
@@ -16,9 +16,11 @@ output_line_number(void)
}
void
-output_simple_statement(char *stmt)
+output_simple_statement(char *stmt, int whenever_mode)
{
output_escaped_str(stmt, false);
+ if (whenever_mode)
+ whenever_action(whenever_mode);
output_line_number();
free(stmt);
}
diff --git a/src/interfaces/ecpg/preproc/preproc_extern.h b/src/interfaces/ecpg/preproc/preproc_extern.h
index 97467800dc9..3cdbdabaa36 100644
--- a/src/interfaces/ecpg/preproc/preproc_extern.h
+++ b/src/interfaces/ecpg/preproc/preproc_extern.h
@@ -69,7 +69,7 @@ extern void output_line_number(void);
extern void output_statement(char *, int, enum ECPG_statement_type);
extern void output_prepare_statement(char *, char *);
extern void output_deallocate_prepare_statement(char *);
-extern void output_simple_statement(char *);
+extern void output_simple_statement(char *, int);
extern char *hashline_number(void);
extern int base_yyparse(void);
extern int base_yylex(void);
diff --git a/src/interfaces/ecpg/test/expected/compat_informix-sqlda.c b/src/interfaces/ecpg/test/expected/compat_informix-sqlda.c
index ad3188d1e63..7e19319d27f 100644
--- a/src/interfaces/ecpg/test/expected/compat_informix-sqlda.c
+++ b/src/interfaces/ecpg/test/expected/compat_informix-sqlda.c
@@ -236,7 +236,7 @@ if (sqlca.sqlcode < 0) exit (1);}
strcpy(msg, "declare");
- ECPG_informix_reset_sqlca(); /* declare mycur1 cursor for $1 */
+ /* declare mycur1 cursor for $1 */
#line 98 "sqlda.pgc"
@@ -311,7 +311,7 @@ if (sqlca.sqlcode < 0) exit (1);}
strcpy(msg, "declare");
- ECPG_informix_reset_sqlca(); /* declare mycur2 cursor for $1 */
+ /* declare mycur2 cursor for $1 */
#line 135 "sqlda.pgc"
diff --git a/src/interfaces/ecpg/test/expected/compat_informix-test_informix.c b/src/interfaces/ecpg/test/expected/compat_informix-test_informix.c
index 387e2e810d3..cc6504992d0 100644
--- a/src/interfaces/ecpg/test/expected/compat_informix-test_informix.c
+++ b/src/interfaces/ecpg/test/expected/compat_informix-test_informix.c
@@ -148,7 +148,12 @@ if (sqlca.sqlcode < 0) dosqlprint ( );}
sqlca.sqlcode = 100;
ECPGset_var( 0, &( i ), __LINE__);\
- ECPG_informix_reset_sqlca(); /* declare c cursor for select * from test where i <= $1 */
+ /* declare c cursor for select * from test where i <= $1 */
+#line 49 "test_informix.pgc"
+
+if (sqlca.sqlcode < 0) dosqlprint ( );
+#line 49 "test_informix.pgc"
+
#line 49 "test_informix.pgc"
printf ("%ld\n", sqlca.sqlcode);
diff --git a/src/interfaces/ecpg/test/expected/preproc-cursor.c b/src/interfaces/ecpg/test/expected/preproc-cursor.c
index 48229017421..a4e7b12c17a 100644
--- a/src/interfaces/ecpg/test/expected/preproc-cursor.c
+++ b/src/interfaces/ecpg/test/expected/preproc-cursor.c
@@ -185,6 +185,11 @@ if (sqlca.sqlcode < 0) exit (1);}
/* declare $0 cursor for select id , t from t1 */
#line 64 "cursor.pgc"
+if (sqlca.sqlcode < 0) exit (1);
+#line 64 "cursor.pgc"
+
+#line 64 "cursor.pgc"
+
strcpy(msg, "open");
{ ECPGdo(__LINE__, 0, 1, "test1", 0, ECPGst_normal, "declare $0 cursor for select id , t from t1",
@@ -321,6 +326,11 @@ if (sqlca.sqlcode < 0) exit (1);}
/* declare $0 cursor for select id , t from t1 */
#line 105 "cursor.pgc"
+if (sqlca.sqlcode < 0) exit (1);
+#line 105 "cursor.pgc"
+
+#line 105 "cursor.pgc"
+
strcpy(msg, "open");
{ ECPGdo(__LINE__, 0, 1, "test1", 0, ECPGst_normal, "declare $0 cursor for select id , t from t1",
@@ -477,10 +487,20 @@ if (sqlca.sqlcode < 0) exit (1);}
/* declare $0 cursor for $1 */
#line 149 "cursor.pgc"
+if (sqlca.sqlcode < 0) exit (1);
+#line 149 "cursor.pgc"
+
+#line 149 "cursor.pgc"
+
ECPGset_var( 5, &( curname5 ), __LINE__);\
/* declare $0 cursor for $1 */
#line 150 "cursor.pgc"
+if (sqlca.sqlcode < 0) exit (1);
+#line 150 "cursor.pgc"
+
+#line 150 "cursor.pgc"
+
strcpy(msg, "open");
{ ECPGdo(__LINE__, 0, 1, "test1", 0, ECPGst_normal, "declare $0 cursor for $1",
@@ -661,6 +681,11 @@ if (sqlca.sqlcode < 0) exit (1);}
/* declare $0 cursor for $1 */
#line 203 "cursor.pgc"
+if (sqlca.sqlcode < 0) exit (1);
+#line 203 "cursor.pgc"
+
+#line 203 "cursor.pgc"
+
strcpy(msg, "open");
{ ECPGdo(__LINE__, 0, 1, "test1", 0, ECPGst_normal, "declare $0 cursor for $1",
diff --git a/src/interfaces/ecpg/test/expected/preproc-outofscope.c b/src/interfaces/ecpg/test/expected/preproc-outofscope.c
index 1ebdc0a6ea3..3a27c53e174 100644
--- a/src/interfaces/ecpg/test/expected/preproc-outofscope.c
+++ b/src/interfaces/ecpg/test/expected/preproc-outofscope.c
@@ -192,6 +192,11 @@ get_var1(MYTYPE **myvar0, MYNULLTYPE **mynullvar0)
/* declare mycur cursor for select * from a1 */
#line 28 "outofscope.pgc"
+if (sqlca.sqlcode < 0) exit (1);
+#line 28 "outofscope.pgc"
+
+#line 28 "outofscope.pgc"
+
if (sqlca.sqlcode != 0)
exit(1);
diff --git a/src/interfaces/ecpg/test/expected/sql-binary.c b/src/interfaces/ecpg/test/expected/sql-binary.c
index 99244bbcef8..6d92ce344b6 100644
--- a/src/interfaces/ecpg/test/expected/sql-binary.c
+++ b/src/interfaces/ecpg/test/expected/sql-binary.c
@@ -103,6 +103,11 @@ if (sqlca.sqlcode < 0) exit (1);}
/* declare C cursor for select name , accs , byte from empl where idnum = $1 */
#line 36 "binary.pgc"
+if (sqlca.sqlcode < 0) exit (1);
+#line 36 "binary.pgc"
+
+#line 36 "binary.pgc"
+
{ ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "declare C cursor for select name , accs , byte from empl where idnum = $1 ",
ECPGt_long,&(empl.idnum),(long)1,(long)1,sizeof(long),
ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_EORT);
@@ -137,6 +142,11 @@ if (sqlca.sqlcode < 0) exit (1);}
/* declare B binary cursor for select name , accs , byte from empl where idnum = $1 */
#line 44 "binary.pgc"
+if (sqlca.sqlcode < 0) exit (1);
+#line 44 "binary.pgc"
+
+#line 44 "binary.pgc"
+
{ ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "declare B binary cursor for select name , accs , byte from empl where idnum = $1 ",
ECPGt_long,&(empl.idnum),(long)1,(long)1,sizeof(long),
ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_EORT);
@@ -174,6 +184,11 @@ if (sqlca.sqlcode < 0) exit (1);}
/* declare A binary cursor for select byte from empl where idnum = $1 */
#line 55 "binary.pgc"
+if (sqlca.sqlcode < 0) exit (1);
+#line 55 "binary.pgc"
+
+#line 55 "binary.pgc"
+
{ ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "declare A binary cursor for select byte from empl where idnum = $1 ",
ECPGt_long,&(empl.idnum),(long)1,(long)1,sizeof(long),
ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_EORT);