diff options
Diffstat (limited to 'src/interfaces/ecpg/preproc/output.c')
-rw-r--r-- | src/interfaces/ecpg/preproc/output.c | 24 |
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); } |