@@ -4,8 +4,18 @@ statements: /*EMPTY*/
44 | statements statement
55 ;
66
7- statement: ecpgstart at toplevel_stmt ';' { connection = NULL; }
7+ statement: ecpgstart at toplevel_stmt ';'
8+ {
9+ if (connection)
10+ free(connection);
11+ connection = NULL;
12+ }
813 | ecpgstart toplevel_stmt ';'
14+ {
15+ if (connection)
16+ free(connection);
17+ connection = NULL;
18+ }
919 | ecpgstart ECPGVarDeclaration
1020 {
1121 fprintf(base_yyout, "%s", $2);
@@ -1101,41 +1111,33 @@ UsingConst: Iconst { $$ = $1; }
11011111 */
11021112ECPGDescribe: SQL_DESCRIBE INPUT_P prepared_name using_descriptor
11031113 {
1104- const char *con = connection ? connection : "NULL";
1105- mmerror(PARSE_ERROR, ET_WARNING, "using unsupported DESCRIBE statement");
1106- $$ = (char *) mm_alloc(sizeof("1, , ") + strlen(con) + strlen($3));
1107- sprintf($$, "1, %s, %s", con, $3);
1114+ $$.input = 1;
1115+ $$.stmt_name = $3;
11081116 }
11091117 | SQL_DESCRIBE opt_output prepared_name using_descriptor
11101118 {
1111- const char *con = connection ? connection : "NULL";
11121119 struct variable *var;
1113-
11141120 var = argsinsert->variable;
11151121 remove_variable_from_list(&argsinsert, var);
11161122 add_variable_to_head(&argsresult, var, &no_indicator);
11171123
1118- $$ = (char *) mm_alloc(sizeof("0, , ") + strlen(con) + strlen($3)) ;
1119- sprintf($$, "0, %s, %s", con, $3) ;
1124+ $$.input = 0 ;
1125+ $$.stmt_name = $3 ;
11201126 }
11211127 | SQL_DESCRIBE opt_output prepared_name into_descriptor
11221128 {
1123- const char *con = connection ? connection : "NULL";
1124- $$ = (char *) mm_alloc(sizeof("0, , ") + strlen(con) + strlen($3));
1125- sprintf($$, "0, %s, %s", con, $3);
1129+ $$.input = 0;
1130+ $$.stmt_name = $3;
11261131 }
11271132 | SQL_DESCRIBE INPUT_P prepared_name into_sqlda
11281133 {
1129- const char *con = connection ? connection : "NULL";
1130- mmerror(PARSE_ERROR, ET_WARNING, "using unsupported DESCRIBE statement");
1131- $$ = (char *) mm_alloc(sizeof("1, , ") + strlen(con) + strlen($3));
1132- sprintf($$, "1, %s, %s", con, $3);
1134+ $$.input = 1;
1135+ $$.stmt_name = $3;
11331136 }
11341137 | SQL_DESCRIBE opt_output prepared_name into_sqlda
11351138 {
1136- const char *con = connection ? connection : "NULL";
1137- $$ = (char *) mm_alloc(sizeof("0, , ") + strlen(con) + strlen($3));
1138- sprintf($$, "0, %s, %s", con, $3);
1139+ $$.input = 0;
1140+ $$.stmt_name = $3;
11391141 }
11401142 ;
11411143
@@ -1862,8 +1864,8 @@ c_anything: ecpg_ident { $$ = $1; }
18621864 | ':' { $$ = mm_strdup(":"); }
18631865 ;
18641866
1865- DeallocateStmt: DEALLOCATE prepared_name { $$ = $2; }
1866- | DEALLOCATE PREPARE prepared_name { $$ = $3; }
1867+ DeallocateStmt: DEALLOCATE prepared_name { check_declared_list($2); $$ = $2; }
1868+ | DEALLOCATE PREPARE prepared_name { check_declared_list($3); $$ = $3; }
18671869 | DEALLOCATE ALL { $$ = mm_strdup("all"); }
18681870 | DEALLOCATE PREPARE ALL { $$ = mm_strdup("all"); }
18691871 ;
0 commit comments