From: Michael Meskes Date: Tue, 26 Nov 2013 16:12:39 +0000 (+0100) Subject: ECPG: Make the preprocessor emit ';' if the variable type for a list of X-Git-Tag: REL9_1_11~13 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=5bffd42a3b0b049ea0e44a69c99ce3c3c5418af0;p=thirdparty%2Fpostgresql.git ECPG: Make the preprocessor emit ';' if the variable type for a list of variables is varchar. This fixes this test case: int main(void) { exec sql begin declare section; varchar a[50], b[50]; exec sql end declare section; return 0; } Since varchars are internally turned into custom structs and the type name is emitted for these variable declarations, the preprocessed code previously had: struct varchar_1 { ... } a _,_ struct varchar_2 { ... } b ; The comma in the generated C file was a syntax error. There are no regression test changes since it's not exercised. Patch by Boszormenyi Zoltan --- diff --git a/src/interfaces/ecpg/preproc/ecpg.trailer b/src/interfaces/ecpg/preproc/ecpg.trailer index 430983f5fa8..6d126f7300e 100644 --- a/src/interfaces/ecpg/preproc/ecpg.trailer +++ b/src/interfaces/ecpg/preproc/ecpg.trailer @@ -832,7 +832,12 @@ opt_signed: SQL_SIGNED variable_list: variable { $$ = $1; } | variable_list ',' variable - { $$ = cat_str(3, $1, mm_strdup(","), $3); } + { + if (actual_type[struct_level].type_enum == ECPGt_varchar) + $$ = cat_str(3, $1, mm_strdup(";"), $3); + else + $$ = cat_str(3, $1, mm_strdup(","), $3); + } ; variable: opt_pointer ECPGColLabel opt_array_bounds opt_bit_field opt_initializer