@@ -724,7 +724,7 @@ adjust_array(enum ECPGttype type_enum, int *dimension, int *length, int type_dim
724724 */
725725%token ABORT_TRANS , ACCESS , AFTER , AGGREGATE , ANALYZE ,
726726 BACKWARD , BEFORE , BINARY ,
727- CACHE , CLUSTER , COPY , CREATEDB , CREATEUSER , CYCLE ,
727+ CACHE , CLUSTER , COMMENT , COPY , CREATEDB , CREATEUSER , CYCLE ,
728728 DATABASE , DELIMITERS , DO ,
729729 EACH , ENCODING , EXCLUSIVE , EXPLAIN , EXTEND ,
730730 FORWARD , FUNCTION , HANDLER ,
@@ -785,7 +785,7 @@ adjust_array(enum ECPGttype type_enum, int *dimension, int *length, int type_dim
785785%type <str> update_target_el opt_id relation_name database_name
786786%type <str> access_method attr_name class index_name name func_name
787787%type <str> file_name AexprConst ParamNo TypeId
788- %type <str> in_expr_nodes a_expr b_expr TruncateStmt
788+ %type <str> in_expr_nodes a_expr b_expr TruncateStmt CommentStmt
789789%type <str> opt_indirection expr_list extract_list extract_arg
790790%type <str> position_list substr_list substr_from
791791%type <str> trim_list in_expr substr_for attr attrs
@@ -839,15 +839,15 @@ adjust_array(enum ECPGttype type_enum, int *dimension, int *length, int type_dim
839839%type <str> constraints_set_mode
840840
841841%type <str> ECPGWhenever ECPGConnect connection_target ECPGOpen opt_using
842- %type <str> indicator ECPGExecute ecpg_expr dotext ECPGPrepare
843- %type <str> storage_clause opt_initializer vartext c_anything blockstart
844- %type <str> blockend variable_list variable var_anything do_anything
842+ %type <str> indicator ECPGExecute ecpg_expr ECPGPrepare
843+ %type <str> storage_clause opt_initializer c_anything blockstart
844+ %type <str> blockend variable_list variable c_thing c_term
845845%type <str> opt_pointer cvariable ECPGDisconnect dis_name
846846%type <str> stmt symbol opt_symbol ECPGRelease execstring server_name
847- %type <str> connection_object opt_server opt_port c_thing opt_reference
847+ %type <str> connection_object opt_server opt_port c_stuff opt_reference
848848%type <str> user_name opt_user char_variable ora_user ident
849- %type <str> db_prefix server opt_options opt_connection_name
850- %type <str> ECPGSetConnection c_line cpp_line s_enum ECPGTypedef
849+ %type <str> db_prefix server opt_options opt_connection_name c_list
850+ %type <str> ECPGSetConnection cpp_line s_enum ECPGTypedef c_args
851851%type <str> enum_type civariableonly ECPGCursorStmt ECPGDeallocate
852852%type <str> ECPGFree ECPGDeclare ECPGVar sql_variable_declarations
853853%type <str> sql_declaration sql_variable_list sql_variable opt_at
@@ -882,6 +882,7 @@ opt_at: SQL_AT connection_target { connection = $2; }
882882stmt : AddAttrStmt { output_statement($1 , 0 ); }
883883 | AlterUserStmt { output_statement($1 , 0 ); }
884884 | ClosePortalStmt { output_statement($1 , 0 ); }
885+ | CommentStmt { output_statement($1 , 0 ); }
885886 | CopyStmt { output_statement($1 , 0 ); }
886887 | CreateStmt { output_statement($1 , 0 ); }
887888 | CreateAsStmt { output_statement($1 , 0 ); }
@@ -1892,7 +1893,23 @@ opt_portal_name: IN name { $$ = cat2_str(make1_str("in"), $2); }
18921893 | /* EMPTY*/ { $$ = make1_str(" " ); }
18931894 ;
18941895
1895-
1896+ /* ****************************************************************************
1897+ *
1898+ * QUERY:
1899+ * comment on [ table <relname> | column <relname>.<attribu
1900+ * is 'text'
1901+ *
1902+ *****************************************************************************/
1903+ CommentStmt : COMMENT ON COLUMN relation_name ' .' attr_name IS Sconst
1904+ {
1905+ cat2_str (cat5_str(make1_str(" comment on column" ), $4, make1_str(" ," ), $6, make1_str(" is" )), $8);
1906+ }
1907+ | COMMENT ON TABLE relation_name IS Sconst
1908+ {
1909+ cat4_str (make1_str(" comment on table" ), $4, make1_str(" is" ), $6);
1910+ }
1911+ ;
1912+
18961913/* ****************************************************************************
18971914 *
18981915 * QUERY:
@@ -4195,6 +4212,7 @@ ColId: ident { $$ = $1; }
41954212 | BACKWARD { $$ = make1_str(" backward" ); }
41964213 | BEFORE { $$ = make1_str(" before" ); }
41974214 | CACHE { $$ = make1_str(" cache" ); }
4215+ | COMMENT { $$ = make1_str(" comment" ); }
41984216 | COMMITTED { $$ = make1_str(" committed" ); }
41994217 | CONSTRAINTS { $$ = make1_str(" constraints" ); }
42004218 | CREATEDB { $$ = make1_str(" createdb" ); }
@@ -4265,6 +4283,7 @@ ColId: ident { $$ = $1; }
42654283 | TIMEZONE_HOUR { $$ = make1_str(" timezone_hour" ); }
42664284 | TIMEZONE_MINUTE { $$ = make1_str(" timezone_minute" ); }
42674285 | TRIGGER { $$ = make1_str(" trigger" ); }
4286+ | TRUNCATE { $$ = make1_str(" truncate" ); }
42684287 | TRUSTED { $$ = make1_str(" trusted" ); }
42694288 | TYPE_P { $$ = make1_str(" type" ); }
42704289 | VALID { $$ = make1_str(" valid" ); }
@@ -4673,8 +4692,7 @@ type: simple_type
46734692 {
46744693 $$ .type_str = $1 ;
46754694 $$ .type_enum = ECPGt_int;
4676-
4677- $$ .type_dimension = -1 ;
4695+ $$ .type_dimension = -1 ;
46784696 $$ .type_index = -1 ;
46794697 }
46804698 | symbol
@@ -4689,7 +4707,7 @@ type: simple_type
46894707 struct_member_list[struct_level] = ECPGstruct_member_dup(this ->struct_member_list);
46904708 }
46914709
4692- enum_type : s_enum ' {' c_line ' }'
4710+ enum_type : s_enum ' {' c_list ' }'
46934711 {
46944712 $$ = cat4_str($1 , make1_str(" {" ), $3 , make1_str(" }" ));
46954713 }
@@ -4828,7 +4846,7 @@ variable: opt_pointer symbol opt_array_bounds opt_initializer
48284846 }
48294847
48304848opt_initializer : /* empty */ { $$ = make1_str(" " ); }
4831- | ' =' vartext { $$ = make2_str(make1_str(" =" ), $2 ); }
4849+ | ' =' c_term { $$ = make2_str(make1_str(" =" ), $2 ); }
48324850
48334851opt_pointer : /* empty */ { $$ = make1_str(" " ); }
48344852 | ' *' { $$ = make1_str(" *" ); }
@@ -5367,7 +5385,7 @@ action : SQL_CONTINUE {
53675385 $<action>$.command = strdup($3 );
53685386 $<action>$.str = cat2_str(make1_str(" goto " ), $3 );
53695387}
5370- | DO name ' (' dotext ' )' {
5388+ | DO name ' (' c_args ' )' {
53715389 $<action>$.code = W_DO;
53725390 $<action>$.command = make4_str($2 , make1_str(" (" ), $4 , make1_str(" )" ));
53735391 $<action>$.str = cat2_str(make1_str(" do" ), mm_strdup($<action>$.command ));
@@ -5377,7 +5395,7 @@ action : SQL_CONTINUE {
53775395 $<action>$.command = NULL ;
53785396 $<action>$.str = make1_str(" break" );
53795397}
5380- | SQL_CALL name ' (' dotext ' )' {
5398+ | SQL_CALL name ' (' c_args ' )' {
53815399 $<action>$.code = W_DO;
53825400 $<action>$.command = make4_str($2 , make1_str(" (" ), $4 , make1_str(" )" ));
53835401 $<action>$.str = cat2_str(make1_str(" call" ), mm_strdup($<action>$.command ));
@@ -5726,11 +5744,8 @@ into_list : coutputvariable | into_list ',' coutputvariable;
57265744
57275745ecpgstart : SQL_START { reset_variables();}
57285746
5729- dotext : /* empty */ { $$ = make1_str(" " ); }
5730- | dotext do_anything { $$ = make2_str($1 , $2 ); }
5731-
5732- vartext : var_anything { $$ = $1 ; }
5733- | vartext var_anything { $$ = make2_str($1 , $2 ); }
5747+ c_args : /* empty */ { $$ = make1_str(" " ); }
5748+ | c_list { $$ = $1 ; }
57345749
57355750coutputvariable : cvariable indicator {
57365751 add_variable (&argsresult, find_variable($1 ), ($2 == NULL ) ? &no_indicator : find_variable($2 ));
@@ -5754,6 +5769,7 @@ indicator: /* empty */ { $$ = NULL; }
57545769
57555770ident : IDENT { $$ = $1 ; }
57565771 | CSTRING { $$ = make3_str(make1_str(" \" " ), $1 , make1_str(" \" " )); };
5772+
57575773/*
57585774 * C stuff
57595775 */
@@ -5762,13 +5778,27 @@ symbol: IDENT { $$ = $1; }
57625778
57635779cpp_line : CPP_LINE { $$ = $1 ; }
57645780
5765- c_line : c_anything { $$ = $1 ; }
5766- | c_line c_anything
5767- {
5768- $$ = make2_str($1 , $2 );
5769- }
5781+ c_stuff : c_anything { $$ = $1 ; }
5782+ | c_stuff c_anything
5783+ {
5784+ $$ = cat2_str($1 , $2 );
5785+ }
5786+ | c_stuff ' (' c_stuff ' )'
5787+ {
5788+ $$ = cat4_str($1 , make1_str(" (" ), $3 , make1_str(" )" ));
5789+ }
5790+
5791+ c_list : c_term { $$ = $1 ; }
5792+ | c_term ' ,' c_list { $$ = make3_str($1 , make1_str(" ," ), $3 ); }
5793+
5794+ c_term : c_stuff { $$ = $1 ; }
5795+ | ' {' c_list ' }' { $$ = make3_str(make1_str(" {" ), $2 , make1_str(" }" )); }
57705796
5771- c_thing : c_anything | ' ;' { $$ = make1_str(" ;" ); }
5797+ c_thing : c_anything { $$ = $1 ; }
5798+ | ' (' { $$ = make1_str(" (" ); }
5799+ | ' )' { $$ = make1_str(" )" ); }
5800+ | ' ,' { $$ = make1_str(" ," ); }
5801+ | ' ;' { $$ = make1_str(" ;" ); }
57725802
57735803c_anything : IDENT { $$ = $1 ; }
57745804 | CSTRING { $$ = make3_str(make1_str(" \" " ), $1 , make1_str(" \" " )); }
@@ -5800,22 +5830,9 @@ c_anything: IDENT { $$ = $1; }
58005830 | S_ANYTHING { $$ = make_name(); }
58015831 | ' [' { $$ = make1_str(" [" ); }
58025832 | ' ]' { $$ = make1_str(" ]" ); }
5803- | ' (' { $$ = make1_str(" (" ); }
5804- | ' )' { $$ = make1_str(" )" ); }
5833+ /* | '(' { $$ = make1_str("("); }
5834+ | ')' { $$ = make1_str(")"); }*/
58055835 | ' =' { $$ = make1_str(" =" ); }
5806- | ' ,' { $$ = make1_str(" ," ); }
5807-
5808- do_anything : IDENT { $$ = $1 ; }
5809- | CSTRING { $$ = make3_str(make1_str(" \" " ), $1 , make1_str(" \" " ));}
5810- | Iconst { $$ = $1 ; }
5811- | Fconst { $$ = $1 ; }
5812- | ' ,' { $$ = make1_str(" ," ); }
5813-
5814- var_anything : IDENT { $$ = $1 ; }
5815- | CSTRING { $$ = make3_str(make1_str(" \" " ), $1 , make1_str(" \" " )); }
5816- | Iconst { $$ = $1 ; }
5817- | Fconst { $$ = $1 ; }
5818- | ' {' c_line ' }' { $$ = make3_str(make1_str(" {" ), $2 , make1_str(" }" )); }
58195836
58205837blockstart : ' {' {
58215838 braces_open++;
0 commit comments