summaryrefslogtreecommitdiff
path: root/src/interfaces/ecpg/preproc/output.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/interfaces/ecpg/preproc/output.c')
-rw-r--r--src/interfaces/ecpg/preproc/output.c24
1 files changed, 15 insertions, 9 deletions
diff --git a/src/interfaces/ecpg/preproc/output.c b/src/interfaces/ecpg/preproc/output.c
index 6b46ae6ccaf..1851809e63f 100644
--- a/src/interfaces/ecpg/preproc/output.c
+++ b/src/interfaces/ecpg/preproc/output.c
@@ -128,24 +128,30 @@ static char *ecpg_statement_type_name[] = {
"ECPGst_normal",
"ECPGst_execute",
"ECPGst_exec_immediate",
- "ECPGst_prepnormal"
+ "ECPGst_prepnormal",
+ "ECPGst_prepare",
+ "ECPGst_exec_with_exprlist"
};
void
output_statement(char *stmt, int whenever_mode, enum ECPG_statement_type st)
{
fprintf(base_yyout, "{ ECPGdo(__LINE__, %d, %d, %s, %d, ", compat, force_indicator, connection ? connection : "NULL", questionmarks);
+
+ if (st == ECPGst_prepnormal && !auto_prepare)
+ st = ECPGst_normal;
+
+ /*
+ * In following cases, stmt is CSTRING or char_variable. They must be output directly.
+ * - prepared_name of EXECUTE without exprlist
+ * - execstring of EXECUTE IMMEDIATE
+ */
+ fprintf(base_yyout, "%s, ", ecpg_statement_type_name[st]);
if (st == ECPGst_execute || st == ECPGst_exec_immediate)
- {
- fprintf(base_yyout, "%s, %s, ", ecpg_statement_type_name[st], stmt);
- }
+ fprintf(base_yyout, "%s, ", stmt);
else
{
- if (st == ECPGst_prepnormal && auto_prepare)
- fputs("ECPGst_prepnormal, \"", base_yyout);
- else
- fputs("ECPGst_normal, \"", base_yyout);
-
+ fputs("\"", base_yyout);
output_escaped_str(stmt, false);
fputs("\", ", base_yyout);
}