ECPG: Make the preprocessor emit ';' if the variable type for a list of
authorMichael Meskes <[email protected]>
Tue, 26 Nov 2013 16:12:39 +0000 (17:12 +0100)
committerMichael Meskes <[email protected]>
Tue, 26 Nov 2013 16:31:39 +0000 (17:31 +0100)
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 <[email protected]>

Conflicts:
src/interfaces/ecpg/preproc/ecpg.trailer

src/interfaces/ecpg/preproc/ecpg.trailer

index 508e7eee4afacc415b4e05a286e8746d1dcc53ca..757984fd67f31437ff400824d14d7529f85789f0 100644 (file)
@@ -831,7 +831,12 @@ opt_signed: SQL_SIGNED
 variable_list: variable
            { $$ = $1; }
        | variable_list ',' variable
-           { $$ = cat_str(3, $1, make_str(","), $3); }
+       {
+           if (actual_type[struct_level].type_enum == ECPGt_varchar)
+               $$ = cat_str(3, $1, make_str(";"), $3);
+           else
+               $$ = cat_str(3, $1, make_str(","), $3);
+       }
        ;
 
 variable: opt_pointer ECPGColLabel opt_array_bounds opt_bit_field opt_initializer