@@ -724,7 +724,7 @@ adjust_array(enum ECPGttype type_enum, int *dimension, int *length, int type_dim
724
724
*/
725
725
%token ABORT_TRANS , ACCESS , AFTER , AGGREGATE , ANALYZE ,
726
726
BACKWARD , BEFORE , BINARY ,
727
- CACHE , CLUSTER , COPY , CREATEDB , CREATEUSER , CYCLE ,
727
+ CACHE , CLUSTER , COMMENT , COPY , CREATEDB , CREATEUSER , CYCLE ,
728
728
DATABASE , DELIMITERS , DO ,
729
729
EACH , ENCODING , EXCLUSIVE , EXPLAIN , EXTEND ,
730
730
FORWARD , FUNCTION , HANDLER ,
@@ -785,7 +785,7 @@ adjust_array(enum ECPGttype type_enum, int *dimension, int *length, int type_dim
785
785
%type <str> update_target_el opt_id relation_name database_name
786
786
%type <str> access_method attr_name class index_name name func_name
787
787
%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
789
789
%type <str> opt_indirection expr_list extract_list extract_arg
790
790
%type <str> position_list substr_list substr_from
791
791
%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
839
839
%type <str> constraints_set_mode
840
840
841
841
%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
845
845
%type <str> opt_pointer cvariable ECPGDisconnect dis_name
846
846
%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
848
848
%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
851
851
%type <str> enum_type civariableonly ECPGCursorStmt ECPGDeallocate
852
852
%type <str> ECPGFree ECPGDeclare ECPGVar sql_variable_declarations
853
853
%type <str> sql_declaration sql_variable_list sql_variable opt_at
@@ -882,6 +882,7 @@ opt_at: SQL_AT connection_target { connection = $2; }
882
882
stmt : AddAttrStmt { output_statement($1 , 0 ); }
883
883
| AlterUserStmt { output_statement($1 , 0 ); }
884
884
| ClosePortalStmt { output_statement($1 , 0 ); }
885
+ | CommentStmt { output_statement($1 , 0 ); }
885
886
| CopyStmt { output_statement($1 , 0 ); }
886
887
| CreateStmt { output_statement($1 , 0 ); }
887
888
| CreateAsStmt { output_statement($1 , 0 ); }
@@ -1892,7 +1893,23 @@ opt_portal_name: IN name { $$ = cat2_str(make1_str("in"), $2); }
1892
1893
| /* EMPTY*/ { $$ = make1_str(" " ); }
1893
1894
;
1894
1895
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
+
1896
1913
/* ****************************************************************************
1897
1914
*
1898
1915
* QUERY:
@@ -4195,6 +4212,7 @@ ColId: ident { $$ = $1; }
4195
4212
| BACKWARD { $$ = make1_str(" backward" ); }
4196
4213
| BEFORE { $$ = make1_str(" before" ); }
4197
4214
| CACHE { $$ = make1_str(" cache" ); }
4215
+ | COMMENT { $$ = make1_str(" comment" ); }
4198
4216
| COMMITTED { $$ = make1_str(" committed" ); }
4199
4217
| CONSTRAINTS { $$ = make1_str(" constraints" ); }
4200
4218
| CREATEDB { $$ = make1_str(" createdb" ); }
@@ -4265,6 +4283,7 @@ ColId: ident { $$ = $1; }
4265
4283
| TIMEZONE_HOUR { $$ = make1_str(" timezone_hour" ); }
4266
4284
| TIMEZONE_MINUTE { $$ = make1_str(" timezone_minute" ); }
4267
4285
| TRIGGER { $$ = make1_str(" trigger" ); }
4286
+ | TRUNCATE { $$ = make1_str(" truncate" ); }
4268
4287
| TRUSTED { $$ = make1_str(" trusted" ); }
4269
4288
| TYPE_P { $$ = make1_str(" type" ); }
4270
4289
| VALID { $$ = make1_str(" valid" ); }
@@ -4673,8 +4692,7 @@ type: simple_type
4673
4692
{
4674
4693
$$ .type_str = $1 ;
4675
4694
$$ .type_enum = ECPGt_int;
4676
-
4677
- $$ .type_dimension = -1 ;
4695
+ $$ .type_dimension = -1 ;
4678
4696
$$ .type_index = -1 ;
4679
4697
}
4680
4698
| symbol
@@ -4689,7 +4707,7 @@ type: simple_type
4689
4707
struct_member_list[struct_level] = ECPGstruct_member_dup(this ->struct_member_list);
4690
4708
}
4691
4709
4692
- enum_type : s_enum ' {' c_line ' }'
4710
+ enum_type : s_enum ' {' c_list ' }'
4693
4711
{
4694
4712
$$ = cat4_str($1 , make1_str(" {" ), $3 , make1_str(" }" ));
4695
4713
}
@@ -4828,7 +4846,7 @@ variable: opt_pointer symbol opt_array_bounds opt_initializer
4828
4846
}
4829
4847
4830
4848
opt_initializer : /* empty */ { $$ = make1_str(" " ); }
4831
- | ' =' vartext { $$ = make2_str(make1_str(" =" ), $2 ); }
4849
+ | ' =' c_term { $$ = make2_str(make1_str(" =" ), $2 ); }
4832
4850
4833
4851
opt_pointer : /* empty */ { $$ = make1_str(" " ); }
4834
4852
| ' *' { $$ = make1_str(" *" ); }
@@ -5367,7 +5385,7 @@ action : SQL_CONTINUE {
5367
5385
$<action>$.command = strdup($3 );
5368
5386
$<action>$.str = cat2_str(make1_str(" goto " ), $3 );
5369
5387
}
5370
- | DO name ' (' dotext ' )' {
5388
+ | DO name ' (' c_args ' )' {
5371
5389
$<action>$.code = W_DO;
5372
5390
$<action>$.command = make4_str($2 , make1_str(" (" ), $4 , make1_str(" )" ));
5373
5391
$<action>$.str = cat2_str(make1_str(" do" ), mm_strdup($<action>$.command ));
@@ -5377,7 +5395,7 @@ action : SQL_CONTINUE {
5377
5395
$<action>$.command = NULL ;
5378
5396
$<action>$.str = make1_str(" break" );
5379
5397
}
5380
- | SQL_CALL name ' (' dotext ' )' {
5398
+ | SQL_CALL name ' (' c_args ' )' {
5381
5399
$<action>$.code = W_DO;
5382
5400
$<action>$.command = make4_str($2 , make1_str(" (" ), $4 , make1_str(" )" ));
5383
5401
$<action>$.str = cat2_str(make1_str(" call" ), mm_strdup($<action>$.command ));
@@ -5726,11 +5744,8 @@ into_list : coutputvariable | into_list ',' coutputvariable;
5726
5744
5727
5745
ecpgstart : SQL_START { reset_variables();}
5728
5746
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 ; }
5734
5749
5735
5750
coutputvariable : cvariable indicator {
5736
5751
add_variable (&argsresult, find_variable($1 ), ($2 == NULL ) ? &no_indicator : find_variable($2 ));
@@ -5754,6 +5769,7 @@ indicator: /* empty */ { $$ = NULL; }
5754
5769
5755
5770
ident : IDENT { $$ = $1 ; }
5756
5771
| CSTRING { $$ = make3_str(make1_str(" \" " ), $1 , make1_str(" \" " )); };
5772
+
5757
5773
/*
5758
5774
* C stuff
5759
5775
*/
@@ -5762,13 +5778,27 @@ symbol: IDENT { $$ = $1; }
5762
5778
5763
5779
cpp_line : CPP_LINE { $$ = $1 ; }
5764
5780
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(" }" )); }
5770
5796
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(" ;" ); }
5772
5802
5773
5803
c_anything : IDENT { $$ = $1 ; }
5774
5804
| CSTRING { $$ = make3_str(make1_str(" \" " ), $1 , make1_str(" \" " )); }
@@ -5800,22 +5830,9 @@ c_anything: IDENT { $$ = $1; }
5800
5830
| S_ANYTHING { $$ = make_name(); }
5801
5831
| ' [' { $$ = make1_str(" [" ); }
5802
5832
| ' ]' { $$ = make1_str(" ]" ); }
5803
- | ' (' { $$ = make1_str(" (" ); }
5804
- | ' )' { $$ = make1_str(" )" ); }
5833
+ /* | '(' { $$ = make1_str("("); }
5834
+ | ')' { $$ = make1_str(")"); }*/
5805
5835
| ' =' { $$ = 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(" }" )); }
5819
5836
5820
5837
blockstart : ' {' {
5821
5838
braces_open++;
0 commit comments