@@ -199,7 +199,7 @@ make_name(void)
199199OF ,ON ,ONLY ,OPTION ,OR ,ORDER ,OUTER_P ,OVERLAPS ,
200200PARTIAL ,POSITION ,PRECISION ,PRIMARY ,PRIOR ,PRIVILEGES ,PROCEDURE ,PUBLIC ,
201201READ ,REFERENCES ,RELATIVE ,REVOKE ,RIGHT ,ROLLBACK ,
202- SCROLL ,SECOND_P ,SELECT ,SESSION_USER ,SET ,SUBSTRING ,
202+ SCROLL ,SECOND_P ,SELECT ,SESSION_USER ,SET ,SOME , SUBSTRING ,
203203TABLE ,TEMPORARY ,THEN ,TIME ,TIMESTAMP ,TIMEZONE_HOUR ,
204204TIMEZONE_MINUTE ,TO ,TRAILING ,TRANSACTION ,TRIM ,TRUE_P ,
205205UNION ,UNIQUE ,UPDATE ,USER ,USING ,
@@ -280,7 +280,7 @@ make_name(void)
280280%type <str> key_match ColLabel SpecialRuleRelation ColId columnDef
281281%type <str> ColConstraint ColConstraintElem NumericOnly FloatOnly
282282%type <str> OptTableElementList OptTableElement TableConstraint
283- %type <str> ConstraintElem key_actions ColQualList
283+ %type <str> ConstraintElem key_actions ColQualList TokenId
284284%type <str> target_list target_el update_target_list alias_clause
285285%type <str> update_target_el opt_id relation_name database_name
286286%type <str> access_method attr_name class index_name name func_name
@@ -292,7 +292,7 @@ make_name(void)
292292%type <str> Typename SimpleTypename Generic Numeric generic opt_float opt_numeric
293293%type <str> opt_decimal Character character opt_varying opt_charset
294294%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
296296%type <str> SelectStmt SubSelect result OptTemp ConstraintAttributeSpec
297297%type <str> opt_table opt_all sort_clause sortby_list ConstraintAttr
298298%type <str> sortby OptUseOp opt_inh_star relation_name_list name_list
@@ -306,7 +306,7 @@ make_name(void)
306306%type <str> ClosePortalStmt DropStmt VacuumStmt opt_verbose func_arg
307307%type <str> opt_analyze opt_va_list va_list ExplainStmt index_params
308308%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
310310%type <str> func_args_list func_args opt_with ProcedureStmt def_arg
311311%type <str> def_elem def_list definition def_name def_type DefineStmt
312312%type <str> opt_instead event event_object RuleActionList opt_using
@@ -790,6 +790,8 @@ var_value: Sconst{ $$ = $1; }
790790
791791$$ =$1 ;
792792}
793+ /* "OFF" is not a token, so it is handled by the name_list production*/
794+ | ON {$$ = make_str(" on" ); }
793795| DEFAULT {$$ = make_str(" default" ); }
794796;
795797
@@ -1443,17 +1445,18 @@ DropTrigStmt: DROP TRIGGER name ON relation_name
14431445 *
14441446 *****************************************************************************/
14451447
1446- DefineStmt :CREATE def_type def_rest
1448+ DefineStmt :CREATE def_type def_name definition
14471449{
1448- $$ = cat_str(3 , make_str(" create" ),$2 ,$3 );
1450+ $$ = cat_str(3 , make_str(" create" ),$2 ,$3 , $4 );
14491451}
14501452;
1451-
1453+ /*
14521454def_rest: def_name definition
14531455{
14541456$$ = cat2_str($1, $2);
14551457}
14561458;
1459+ */
14571460
14581461def_type :OPERATOR {$$ = make_str(" operator" ); }
14591462| TYPE_P {$$ = make_str(" type" ); }
@@ -1462,8 +1465,12 @@ def_type: OPERATOR{ $$ = make_str("operator"); }
14621465
14631466def_name :PROCEDURE {$$ = make_str(" procedure" ); }
14641467| JOIN {$$ = make_str(" join" ); }
1465- | ColId {$$ =$1 ; }
14661468| all_Op {$$ =$1 ; }
1469+ | typename {$$ =$1 ; }
1470+ | TokenId {$$ =$1 ; }
1471+ | INTERVAL {$$ = make_str(" interval" ); }
1472+ | TIME {$$ = make_str(" time" ); }
1473+ | TIMESTAMP {$$ = make_str(" timestamp" ); }
14671474;
14681475
14691476definition :' (' def_list ' )' {$$ = cat_str(3 , make_str(" (" ),$2 , make_str(" )" )); }
@@ -1486,14 +1493,11 @@ def_elem: def_name '=' def_arg{
14861493}
14871494;
14881495
1489- def_arg :ColId {$$ =$1 ; }
1496+ def_arg :func_return {$$ =$1 ; }
1497+ | TokenId {$$ =$1 ; }
14901498| all_Op {$$ =$1 ; }
14911499| NumericOnly {$$ =$1 ; }
14921500| Sconst {$$ =$1 ; }
1493- | SETOF ColId
1494- {
1495- $$ = cat2_str(make_str(" setof" ),$2 );
1496- }
14971501;
14981502
14991503/* ****************************************************************************
@@ -2934,6 +2938,13 @@ SimpleTypename: Generic{ $$ = $1; }
29342938| Character {$$ =$1 ; }
29352939;
29362940
2941+ typename :generic {$$ =$1 ; }
2942+ | numeric {$$ =$1 ; }
2943+ | bit {$$ =$1 ; }
2944+ | character {$$ =$1 ; }
2945+ | datetime {$$ =$1 ; }
2946+ ;
2947+
29372948Generic :generic
29382949{
29392950$$ =$1 ;
@@ -3015,6 +3026,13 @@ Numeric: FLOAT opt_float
30153026}
30163027;
30173028
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+
30183036opt_float :' (' Iconst ' )'
30193037{
30203038if (atol($2 ) <1 )
@@ -3244,6 +3262,7 @@ row_descriptor: row_list ',' a_expr
32443262;
32453263
32463264sub_type :ANY {$$ = make_str(" ANY" ); }
3265+ | SOME {$$ = make_str(" SOME" ); }
32473266| ALL {$$ = make_str(" ALL" ); }
32483267 ;
32493268
@@ -4942,21 +4961,27 @@ opt_symbol:symbol{ $$ = $1; }
49424961
49434962symbol :ColLabel {$$ =$1 ; };
49444963
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
49474967 * 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"); }
49544968*/
49554969ECPGColId :/* to be used instead of ColId*/
49564970ECPGKeywords {$$ =$1 ; }
49574971| ident {$$ =$1 ; }
4972+ | TokenId {$$ =$1 ; }
49584973| 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" ); }
49604985| ACCESS {$$ = make_str(" access" ); }
49614986| ACTION {$$ = make_str(" action" ); }
49624987| ADD {$$ = make_str(" add" ); }
@@ -4999,7 +5024,6 @@ ECPGColId: /* to be used instead of ColId */
49995024| INSENSITIVE {$$ = make_str(" insensitive" ); }
50005025| INSERT {$$ = make_str(" insert" ); }
50015026| INSTEAD {$$ = make_str(" instead" ); }
5002- | INTERVAL {$$ = make_str(" interval" ); }
50035027| ISOLATION {$$ = make_str(" isolation" ); }
50045028| KEY {$$ = make_str(" key" ); }
50055029| LANGUAGE {$$ = make_str(" language" ); }
@@ -5052,14 +5076,11 @@ ECPGColId: /* to be used instead of ColId */
50525076| SYSID {$$ = make_str(" sysid" ); }
50535077| TEMP {$$ = make_str(" temp" ); }
50545078| TEMPORARY {$$ = make_str(" temporary" ); }
5055- | TIME {$$ = make_str(" time" ); }
5056- | TIMESTAMP {$$ = make_str(" timestamp" ); }
50575079| TIMEZONE_HOUR {$$ = make_str(" timezone_hour" ); }
50585080| TIMEZONE_MINUTE {$$ = make_str(" timezone_minute" ); }
50595081| TRIGGER {$$ = make_str(" trigger" ); }
50605082| TRUNCATE {$$ = make_str(" truncate" ); }
50615083| TRUSTED {$$ = make_str(" trusted" ); }
5062- | TYPE_P {$$ = make_str(" type" ); }
50635084| UNLISTEN {$$ = make_str(" unlisten" ); }
50645085| UNTIL {$$ = make_str(" until" ); }
50655086| UPDATE {$$ = make_str(" update" ); }
@@ -5073,23 +5094,13 @@ ECPGColId: /* to be used instead of ColId */
50735094| ZONE {$$ = make_str(" zone" ); }
50745095;
50755096
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- */
50895097ECPGColLabel :ECPGColId {$$ =$1 ; }
50905098| ABORT_TRANS {$$ = make_str(" abort" ); }
5099+ | ALL {$$ = make_str(" all" ); }
50915100| ANALYZE {$$ = make_str(" analyze" ); }
5101+ | ANY {$$ = make_str(" any" ); }
50925102| ASC {$$ = make_str(" asc" ); }
5103+ | BETWEEN {$$ = make_str(" between" ); }
50935104| BINARY {$$ = make_str(" binary" ); }
50945105| BIT {$$ = make_str(" bit" ); }
50955106| BOTH {$$ = make_str(" both" ); }
@@ -5118,6 +5129,7 @@ ECPGColLabel: ECPGColId{ $$ = $1; }
51185129| DO {$$ = make_str(" do" ); }
51195130| ELSE {$$ = make_str(" else" ); }
51205131| END_TRANS {$$ = make_str(" end" ); }
5132+ | EXCEPT {$$ = make_str(" except" ); }
51215133| EXISTS {$$ = make_str(" exists" ); }
51225134| EXPLAIN {$$ = make_str(" explain" ); }
51235135| EXTEND {$$ = make_str(" extend" ); }
@@ -5127,15 +5139,20 @@ ECPGColLabel: ECPGColId{ $$ = $1; }
51275139| FOREIGN {$$ = make_str(" foreign" ); }
51285140| FROM {$$ = make_str(" from" ); }
51295141| FULL {$$ = make_str(" full" ); }
5142+ | IN {$$ = make_str(" in" ); }
5143+ | IS {$$ = make_str(" is" ); }
5144+ | ISNULL {$$ = make_str(" isnull" ); }
51305145| GLOBAL {$$ = make_str(" global" ); }
51315146| GROUP {$$ = make_str(" group" ); }
51325147| HAVING {$$ = make_str(" having" ); }
51335148| INITIALLY {$$ = make_str(" initially" ); }
51345149| INNER_P {$$ = make_str(" inner" ); }
5150+ | INTERSECT {$$ = make_str(" intersect" ); }
51355151| INTO {$$ = make_str(" into" ); }
51365152| JOIN {$$ = make_str(" join" ); }
51375153| LEADING {$$ = make_str(" leading" ); }
51385154| LEFT {$$ = make_str(" left" ); }
5155+ | LIKE {$$ = make_str(" like" ); }
51395156| LISTEN {$$ = make_str(" listen" ); }
51405157| LOAD {$$ = make_str(" load" ); }
51415158| LOCK_P {$$ = make_str(" lock" ); }
@@ -5144,11 +5161,17 @@ ECPGColLabel: ECPGColId{ $$ = $1; }
51445161| NCHAR {$$ = make_str(" nchar" ); }
51455162| NEW {$$ = make_str(" new" ); }
51465163| 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" ); }
51475168| NUMERIC {$$ = make_str(" numeric" ); }
51485169| OFFSET {$$ = make_str(" offset" ); }
51495170| ON {$$ = make_str(" on" ); }
5171+ | OR {$$ = make_str(" or" ); }
51505172| ORDER {$$ = make_str(" order" ); }
51515173| OUTER_P {$$ = make_str(" outer" ); }
5174+ | OVERLAPS {$$ = make_str(" overlaps" ); }
51525175| POSITION {$$ = make_str(" position" ); }
51535176| PRECISION {$$ = make_str(" precision" ); }
51545177| PRIMARY {$$ = make_str(" primary" ); }