@@ -199,7 +199,7 @@ make_name(void)
199
199
OF , ON , ONLY , OPTION , OR , ORDER , OUTER_P , OVERLAPS ,
200
200
PARTIAL , POSITION , PRECISION , PRIMARY , PRIOR , PRIVILEGES , PROCEDURE , PUBLIC ,
201
201
READ , REFERENCES , RELATIVE , REVOKE , RIGHT , ROLLBACK ,
202
- SCROLL , SECOND_P , SELECT , SESSION_USER , SET , SUBSTRING ,
202
+ SCROLL , SECOND_P , SELECT , SESSION_USER , SET , SOME , SUBSTRING ,
203
203
TABLE , TEMPORARY , THEN , TIME , TIMESTAMP , TIMEZONE_HOUR ,
204
204
TIMEZONE_MINUTE , TO , TRAILING , TRANSACTION , TRIM , TRUE_P ,
205
205
UNION , UNIQUE , UPDATE , USER , USING ,
@@ -280,7 +280,7 @@ make_name(void)
280
280
%type <str> key_match ColLabel SpecialRuleRelation ColId columnDef
281
281
%type <str> ColConstraint ColConstraintElem NumericOnly FloatOnly
282
282
%type <str> OptTableElementList OptTableElement TableConstraint
283
- %type <str> ConstraintElem key_actions ColQualList
283
+ %type <str> ConstraintElem key_actions ColQualList TokenId
284
284
%type <str> target_list target_el update_target_list alias_clause
285
285
%type <str> update_target_el opt_id relation_name database_name
286
286
%type <str> access_method attr_name class index_name name func_name
@@ -292,7 +292,7 @@ make_name(void)
292
292
%type <str> Typename SimpleTypename Generic Numeric generic opt_float opt_numeric
293
293
%type <str> opt_decimal Character character opt_varying opt_charset
294
294
%type <str> opt_collate Datetime datetime opt_timezone opt_interval
295
- %type <str> row_expr row_descriptor row_list
295
+ %type <str> row_expr row_descriptor row_list typename numeric
296
296
%type <str> SelectStmt SubSelect result OptTemp ConstraintAttributeSpec
297
297
%type <str> opt_table opt_all sort_clause sortby_list ConstraintAttr
298
298
%type <str> sortby OptUseOp opt_inh_star relation_name_list name_list
@@ -306,7 +306,7 @@ make_name(void)
306
306
%type <str> ClosePortalStmt DropStmt VacuumStmt opt_verbose func_arg
307
307
%type <str> opt_analyze opt_va_list va_list ExplainStmt index_params
308
308
%type <str> index_list func_index index_elem opt_type opt_class access_method_clause
309
- %type <str> index_opt_unique IndexStmt func_return def_rest
309
+ %type <str> index_opt_unique IndexStmt func_return
310
310
%type <str> func_args_list func_args opt_with ProcedureStmt def_arg
311
311
%type <str> def_elem def_list definition def_name def_type DefineStmt
312
312
%type <str> opt_instead event event_object RuleActionList opt_using
@@ -790,6 +790,8 @@ var_value: Sconst { $$ = $1; }
790
790
791
791
$$ = $1 ;
792
792
}
793
+ /* "OFF" is not a token, so it is handled by the name_list production */
794
+ | ON { $$ = make_str(" on" ); }
793
795
| DEFAULT { $$ = make_str(" default" ); }
794
796
;
795
797
@@ -1443,17 +1445,18 @@ DropTrigStmt: DROP TRIGGER name ON relation_name
1443
1445
*
1444
1446
*****************************************************************************/
1445
1447
1446
- DefineStmt : CREATE def_type def_rest
1448
+ DefineStmt : CREATE def_type def_name definition
1447
1449
{
1448
- $$ = cat_str(3 , make_str(" create" ), $2 , $3 );
1450
+ $$ = cat_str(3 , make_str(" create" ), $2 , $3 , $4 );
1449
1451
}
1450
1452
;
1451
-
1453
+ /*
1452
1454
def_rest: def_name definition
1453
1455
{
1454
1456
$$ = cat2_str($1, $2);
1455
1457
}
1456
1458
;
1459
+ */
1457
1460
1458
1461
def_type : OPERATOR { $$ = make_str(" operator" ); }
1459
1462
| TYPE_P { $$ = make_str(" type" ); }
@@ -1462,8 +1465,12 @@ def_type: OPERATOR { $$ = make_str("operator"); }
1462
1465
1463
1466
def_name : PROCEDURE { $$ = make_str(" procedure" ); }
1464
1467
| JOIN { $$ = make_str(" join" ); }
1465
- | ColId { $$ = $1 ; }
1466
1468
| all_Op { $$ = $1 ; }
1469
+ | typename { $$ = $1 ; }
1470
+ | TokenId { $$ = $1 ; }
1471
+ | INTERVAL { $$ = make_str(" interval" ); }
1472
+ | TIME { $$ = make_str(" time" ); }
1473
+ | TIMESTAMP { $$ = make_str(" timestamp" ); }
1467
1474
;
1468
1475
1469
1476
definition : ' (' def_list ' )' { $$ = cat_str(3 , make_str(" (" ), $2 , make_str(" )" )); }
@@ -1486,14 +1493,11 @@ def_elem: def_name '=' def_arg {
1486
1493
}
1487
1494
;
1488
1495
1489
- def_arg : ColId { $$ = $1 ; }
1496
+ def_arg : func_return { $$ = $1 ; }
1497
+ | TokenId { $$ = $1 ; }
1490
1498
| all_Op { $$ = $1 ; }
1491
1499
| NumericOnly { $$ = $1 ; }
1492
1500
| Sconst { $$ = $1 ; }
1493
- | SETOF ColId
1494
- {
1495
- $$ = cat2_str(make_str(" setof" ), $2 );
1496
- }
1497
1501
;
1498
1502
1499
1503
/* ****************************************************************************
@@ -2934,6 +2938,13 @@ SimpleTypename: Generic { $$ = $1; }
2934
2938
| Character { $$ = $1 ; }
2935
2939
;
2936
2940
2941
+ typename : generic { $$ = $1 ; }
2942
+ | numeric { $$ = $1 ; }
2943
+ | bit { $$ = $1 ; }
2944
+ | character { $$ = $1 ; }
2945
+ | datetime { $$ = $1 ; }
2946
+ ;
2947
+
2937
2948
Generic : generic
2938
2949
{
2939
2950
$$ = $1 ;
@@ -3015,6 +3026,13 @@ Numeric: FLOAT opt_float
3015
3026
}
3016
3027
;
3017
3028
3029
+ numeric : FLOAT { $$ = make_str(" float" ); }
3030
+ | DOUBLE PRECISION { $$ = make_str(" double precision" ); }
3031
+ | DECIMAL { $$ = make_str(" decimal" ); }
3032
+ | DEC { $$ = make_str(" dec" ); }
3033
+ | NUMERIC { $$ = make_str(" numeric" ); }
3034
+ ;
3035
+
3018
3036
opt_float : ' (' Iconst ' )'
3019
3037
{
3020
3038
if (atol($2 ) < 1 )
@@ -3244,6 +3262,7 @@ row_descriptor: row_list ',' a_expr
3244
3262
;
3245
3263
3246
3264
sub_type : ANY { $$ = make_str(" ANY" ); }
3265
+ | SOME { $$ = make_str(" SOME" ); }
3247
3266
| ALL { $$ = make_str(" ALL" ); }
3248
3267
;
3249
3268
@@ -4942,21 +4961,27 @@ opt_symbol: symbol { $$ = $1; }
4942
4961
4943
4962
symbol : ColLabel { $$ = $1 ; };
4944
4963
4945
- /* These show up as operators, and will screw up the parsing if
4946
- * allowed as identifiers or labels.
4964
+ /* Any tokens which show up as operators will screw up the parsing if
4965
+ * allowed as identifiers, but are acceptable as ColLabels:
4966
+ * BETWEEN, IN, IS, ISNULL, NOTNULL, OVERLAPS
4947
4967
* Thanks to Tom Lane for pointing this out. - thomas 2000-03-29
4948
- | BETWEEN { $$ = make_str("between"); }
4949
- | IN { $$ = make_str("in"); }
4950
- | IS { $$ = make_str("is"); }
4951
- | ISNULL { $$ = make_str("isnull"); }
4952
- | NOTNULL { $$ = make_str("notnull"); }
4953
- | OVERLAPS { $$ = make_str("overlaps"); }
4954
4968
*/
4955
4969
ECPGColId : /* to be used instead of ColId */
4956
4970
ECPGKeywords { $$ = $1 ; }
4957
4971
| ident { $$ = $1 ; }
4972
+ | TokenId { $$ = $1 ; }
4958
4973
| datetime { $$ = $1 ; }
4959
- | ABSOLUTE { $$ = make_str(" absolute" ); }
4974
+ | INTERVAL { $$ = make_str(" interval" ); }
4975
+ | TIME { $$ = make_str(" time" ); }
4976
+ | TIMESTAMP { $$ = make_str(" timestamp" ); }
4977
+ | TYPE_P { $$ = make_str(" type" ); }
4978
+ ;
4979
+
4980
+ /* Parser tokens to be used as identifiers.
4981
+ * Tokens involving data types should appear in ColId only,
4982
+ * since they will conflict with real TypeName productions.
4983
+ */
4984
+ TokenId : ABSOLUTE { $$ = make_str(" absolute" ); }
4960
4985
| ACCESS { $$ = make_str(" access" ); }
4961
4986
| ACTION { $$ = make_str(" action" ); }
4962
4987
| ADD { $$ = make_str(" add" ); }
@@ -4999,7 +5024,6 @@ ECPGColId: /* to be used instead of ColId */
4999
5024
| INSENSITIVE { $$ = make_str(" insensitive" ); }
5000
5025
| INSERT { $$ = make_str(" insert" ); }
5001
5026
| INSTEAD { $$ = make_str(" instead" ); }
5002
- | INTERVAL { $$ = make_str(" interval" ); }
5003
5027
| ISOLATION { $$ = make_str(" isolation" ); }
5004
5028
| KEY { $$ = make_str(" key" ); }
5005
5029
| LANGUAGE { $$ = make_str(" language" ); }
@@ -5052,14 +5076,11 @@ ECPGColId: /* to be used instead of ColId */
5052
5076
| SYSID { $$ = make_str(" sysid" ); }
5053
5077
| TEMP { $$ = make_str(" temp" ); }
5054
5078
| TEMPORARY { $$ = make_str(" temporary" ); }
5055
- | TIME { $$ = make_str(" time" ); }
5056
- | TIMESTAMP { $$ = make_str(" timestamp" ); }
5057
5079
| TIMEZONE_HOUR { $$ = make_str(" timezone_hour" ); }
5058
5080
| TIMEZONE_MINUTE { $$ = make_str(" timezone_minute" ); }
5059
5081
| TRIGGER { $$ = make_str(" trigger" ); }
5060
5082
| TRUNCATE { $$ = make_str(" truncate" ); }
5061
5083
| TRUSTED { $$ = make_str(" trusted" ); }
5062
- | TYPE_P { $$ = make_str(" type" ); }
5063
5084
| UNLISTEN { $$ = make_str(" unlisten" ); }
5064
5085
| UNTIL { $$ = make_str(" until" ); }
5065
5086
| UPDATE { $$ = make_str(" update" ); }
@@ -5073,23 +5094,13 @@ ECPGColId: /* to be used instead of ColId */
5073
5094
| ZONE { $$ = make_str(" zone" ); }
5074
5095
;
5075
5096
5076
- /* These show up as operators, and will screw up the parsing if
5077
- * allowed as identifiers or labels.
5078
- * Thanks to Tom Lane for pointing this out. - thomas 2000-03-29
5079
- | ALL { $$ = make_str("all"); }
5080
- | ANY { $$ = make_str("any"); }
5081
- | EXCEPT { $$ = make_str("except"); }
5082
- | INTERSECT { $$ = make_str("intersect"); }
5083
- | LIKE { $$ = make_str("like"); }
5084
- | NOT { $$ = make_str("not"); }
5085
- | NULLIF { $$ = make_str("nullif"); }
5086
- | NULL_P { $$ = make_str("null"); }
5087
- | OR { $$ = make_str("or"); }
5088
- */
5089
5097
ECPGColLabel : ECPGColId { $$ = $1 ; }
5090
5098
| ABORT_TRANS { $$ = make_str(" abort" ); }
5099
+ | ALL { $$ = make_str(" all" ); }
5091
5100
| ANALYZE { $$ = make_str(" analyze" ); }
5101
+ | ANY { $$ = make_str(" any" ); }
5092
5102
| ASC { $$ = make_str(" asc" ); }
5103
+ | BETWEEN { $$ = make_str(" between" ); }
5093
5104
| BINARY { $$ = make_str(" binary" ); }
5094
5105
| BIT { $$ = make_str(" bit" ); }
5095
5106
| BOTH { $$ = make_str(" both" ); }
@@ -5118,6 +5129,7 @@ ECPGColLabel: ECPGColId { $$ = $1; }
5118
5129
| DO { $$ = make_str(" do" ); }
5119
5130
| ELSE { $$ = make_str(" else" ); }
5120
5131
| END_TRANS { $$ = make_str(" end" ); }
5132
+ | EXCEPT { $$ = make_str(" except" ); }
5121
5133
| EXISTS { $$ = make_str(" exists" ); }
5122
5134
| EXPLAIN { $$ = make_str(" explain" ); }
5123
5135
| EXTEND { $$ = make_str(" extend" ); }
@@ -5127,15 +5139,20 @@ ECPGColLabel: ECPGColId { $$ = $1; }
5127
5139
| FOREIGN { $$ = make_str(" foreign" ); }
5128
5140
| FROM { $$ = make_str(" from" ); }
5129
5141
| FULL { $$ = make_str(" full" ); }
5142
+ | IN { $$ = make_str(" in" ); }
5143
+ | IS { $$ = make_str(" is" ); }
5144
+ | ISNULL { $$ = make_str(" isnull" ); }
5130
5145
| GLOBAL { $$ = make_str(" global" ); }
5131
5146
| GROUP { $$ = make_str(" group" ); }
5132
5147
| HAVING { $$ = make_str(" having" ); }
5133
5148
| INITIALLY { $$ = make_str(" initially" ); }
5134
5149
| INNER_P { $$ = make_str(" inner" ); }
5150
+ | INTERSECT { $$ = make_str(" intersect" ); }
5135
5151
| INTO { $$ = make_str(" into" ); }
5136
5152
| JOIN { $$ = make_str(" join" ); }
5137
5153
| LEADING { $$ = make_str(" leading" ); }
5138
5154
| LEFT { $$ = make_str(" left" ); }
5155
+ | LIKE { $$ = make_str(" like" ); }
5139
5156
| LISTEN { $$ = make_str(" listen" ); }
5140
5157
| LOAD { $$ = make_str(" load" ); }
5141
5158
| LOCK_P { $$ = make_str(" lock" ); }
@@ -5144,11 +5161,17 @@ ECPGColLabel: ECPGColId { $$ = $1; }
5144
5161
| NCHAR { $$ = make_str(" nchar" ); }
5145
5162
| NEW { $$ = make_str(" new" ); }
5146
5163
| NONE { $$ = make_str(" none" ); }
5164
+ | NOT { $$ = make_str(" not" ); }
5165
+ | NOTNULL { $$ = make_str(" notnull" ); }
5166
+ | NULLIF { $$ = make_str(" nullif" ); }
5167
+ | NULL_P { $$ = make_str(" null" ); }
5147
5168
| NUMERIC { $$ = make_str(" numeric" ); }
5148
5169
| OFFSET { $$ = make_str(" offset" ); }
5149
5170
| ON { $$ = make_str(" on" ); }
5171
+ | OR { $$ = make_str(" or" ); }
5150
5172
| ORDER { $$ = make_str(" order" ); }
5151
5173
| OUTER_P { $$ = make_str(" outer" ); }
5174
+ | OVERLAPS { $$ = make_str(" overlaps" ); }
5152
5175
| POSITION { $$ = make_str(" position" ); }
5153
5176
| PRECISION { $$ = make_str(" precision" ); }
5154
5177
| PRIMARY { $$ = make_str(" primary" ); }
0 commit comments