@@ -683,7 +683,7 @@ adjust_array(enum ECPGttype type_enum, int *dimension, int *length, int type_dim
683
683
DAY_P , DECIMAL , DECLARE , DEFAULT , DELETE , DESC , DISTINCT , DOUBLE , DROP ,
684
684
ELSE , END_TRANS , EXCEPT , EXECUTE , EXISTS , EXTRACT ,
685
685
FALSE_P , FETCH , FLOAT , FOR , FOREIGN , FROM , FULL ,
686
- GRANT , GROUP , HAVING , HOUR_P ,
686
+ GLOBAL , GRANT , GROUP , HAVING , HOUR_P ,
687
687
IN , INNER_P , INSENSITIVE , INSERT , INTERSECT , INTERVAL , INTO , IS ,
688
688
ISOLATION , JOIN , KEY , LANGUAGE , LEADING , LEFT , LEVEL , LIKE , LOCAL ,
689
689
MATCH , MINUTE_P , MONTH_P , NAMES ,
@@ -702,24 +702,28 @@ adjust_array(enum ECPGttype type_enum, int *dimension, int *length, int type_dim
702
702
%token TRIGGER
703
703
704
704
/* Keywords (in SQL92 non-reserved words) */
705
- %token TYPE_P
705
+ %token COMMITTED , SERIALIZABLE , TYPE_P
706
706
707
707
/* Keywords for Postgres support (not in SQL92 reserved words)
708
708
*
709
709
* The CREATEDB and CREATEUSER tokens should go away
710
710
* when some sort of pg_privileges relation is introduced.
711
711
* - Todd A. Brandys 1998-01-01?
712
712
*/
713
- %token ABORT_TRANS , AFTER , AGGREGATE , ANALYZE , BACKWARD , BEFORE , BINARY ,
713
+ %token ABORT_TRANS , ACCESS , AFTER , AGGREGATE , ANALYZE ,
714
+ BACKWARD , BEFORE , BINARY ,
714
715
CACHE , CLUSTER , COPY , CREATEDB , CREATEUSER , CYCLE ,
715
- DATABASE , DELIMITERS , DO , EACH , ENCODING , EXPLAIN , EXTEND ,
716
+ DATABASE , DELIMITERS , DO ,
717
+ EACH , ENCODING , EXCLUSIVE , EXPLAIN , EXTEND ,
716
718
FORWARD , FUNCTION , HANDLER ,
717
719
INCREMENT , INDEX , INHERITS , INSTEAD , ISNULL ,
718
- LANCOMPILER , LIMIT , LISTEN , UNLISTEN , LOAD , LOCATION , LOCK_P , MAXVALUE , MINVALUE , MOVE ,
720
+ LANCOMPILER , LIMIT , LISTEN , UNLISTEN , LOAD , LOCATION , LOCK_P ,
721
+ MAXVALUE , MINVALUE , MODE , MOVE ,
719
722
NEW , NOCREATEDB , NOCREATEUSER , NONE , NOTHING , NOTIFY , NOTNULL ,
720
723
OFFSET , OIDS , OPERATOR , PASSWORD , PROCEDURAL ,
721
724
RENAME , RESET , RETURNS , ROW , RULE ,
722
- SERIAL , SEQUENCE , SETOF , SHOW , START , STATEMENT , STDIN , STDOUT , TRUSTED ,
725
+ SERIAL , SEQUENCE , SETOF , SHARE , SHOW , START , STATEMENT , STDIN , STDOUT ,
726
+ TRUSTED ,
723
727
UNLISTEN , UNTIL , VACUUM , VALID , VERBOSE , VERSION
724
728
725
729
/* Special keywords, not in the query language - see the "lex" file */
@@ -776,7 +780,7 @@ adjust_array(enum ECPGttype type_enum, int *dimension, int *length, int type_dim
776
780
%type <str> opt_decimal Character character opt_varying opt_charset
777
781
%type <str> opt_collate Datetime datetime opt_timezone opt_interval
778
782
%type <str> numeric a_expr_or_null row_expr row_descriptor row_list
779
- %type <str> SelectStmt SubSelect result OptTemp
783
+ %type <str> SelectStmt SubSelect result OptTemp OptTempType OptTempScope
780
784
%type <str> opt_table opt_union opt_unique sort_clause sortby_list
781
785
%type <str> sortby OptUseOp opt_inh_star relation_name_list name_list
782
786
%type <str> group_clause having_clause from_clause c_list
@@ -812,10 +816,11 @@ adjust_array(enum ECPGttype type_enum, int *dimension, int *length, int type_dim
812
816
%type <str> GrantStmt privileges operation_commalist operation
813
817
%type <str> cursor_clause opt_cursor opt_readonly opt_of opt_lmode
814
818
%type <str> case_expr when_clause_list case_default case_arg when_clause
815
- %type <str> select_clause opt_select_limit select_limit_value ,
819
+ %type <str> select_clause opt_select_limit select_limit_value
816
820
%type <str> select_offset_value table_list using_expr join_expr
817
821
%type <str> using_list from_expr table_expr join_clause join_type
818
822
%type <str> join_qual update_list join_clause join_clause_with_union
823
+ %type <str> opt_level opt_lock lock_type
819
824
820
825
%type <str> ECPGWhenever ECPGConnect connection_target ECPGOpen opt_using
821
826
%type <str> indicator ECPGExecute ecpg_expr dotext ECPGPrepare
@@ -1126,25 +1131,9 @@ VariableSetStmt: SET ColId TO var_value
1126
1131
{
1127
1132
$$ = cat2_str(make1_str(" set time zone" ), $4 );
1128
1133
}
1129
- | SET TRANSACTION ISOLATION LEVEL READ ColId
1134
+ | SET TRANSACTION ISOLATION LEVEL opt_level
1130
1135
{
1131
- if (strcasecmp($6 , " COMMITTED" ))
1132
- {
1133
- sprintf (errortext, " syntax error at or near \" %s\" " , $6 );
1134
- yyerror (errortext);
1135
- }
1136
-
1137
- $$ = cat2_str(make1_str(" set transaction isolation level read" ), $6 );
1138
- }
1139
- | SET TRANSACTION ISOLATION LEVEL ColId
1140
- {
1141
- if (strcasecmp($5 , " SERIALIZABLE" ))
1142
- {
1143
- sprintf (errortext, " syntax error at or near \" %s\" " , $5 );
1144
- yyerror (errortext);
1145
- }
1146
-
1147
- $$ = cat2_str(make1_str(" set transaction isolation level read" ), $5 );
1136
+ $$ = cat2_str(make1_str(" set transaction isolation level" ), $5 );
1148
1137
}
1149
1138
| SET NAMES encoding
1150
1139
{
@@ -1156,6 +1145,11 @@ VariableSetStmt: SET ColId TO var_value
1156
1145
}
1157
1146
;
1158
1147
1148
+ opt_level : READ COMMITTED { $$ = make1_str(" read committed" ); }
1149
+ | SERIALIZABLE { $$ = make1_str(" serializable" ); }
1150
+ ;
1151
+
1152
+
1159
1153
var_value : Sconst { $$ = $1 ; }
1160
1154
| DEFAULT { $$ = make1_str(" default" ); }
1161
1155
;
@@ -1300,11 +1294,24 @@ CreateStmt: CREATE OptTemp TABLE relation_name '(' OptTableElementList ')'
1300
1294
}
1301
1295
;
1302
1296
1303
- OptTemp : TEMP { $$ = make1_str(" temp" ); }
1297
+ OptTemp : OptTempType { $$ = $1 ; }
1298
+ | OptTempScope OptTempType { $$ = cat2_str($1 ,$2 ); }
1299
+ ;
1300
+
1301
+ OptTempType : TEMP { $$ = make1_str(" temp" ); }
1304
1302
| TEMPORARY { $$ = make1_str(" temporary" ); }
1305
1303
| /* EMPTY */ { $$ = make1_str(" " ); }
1306
1304
;
1307
1305
1306
+ OptTempScope : GLOBAL
1307
+ {
1308
+ yyerror (" GLOBAL TEMPORARY TABLE is not currently supported" );
1309
+ $$ = make1_str(" global" );
1310
+ }
1311
+ | LOCAL { $$ = make1_str(" local" ); }
1312
+ ;
1313
+
1314
+
1308
1315
OptTableElementList : OptTableElementList ' ,' OptTableElement
1309
1316
{
1310
1317
$$ = cat3_str($1 , make1_str(" ," ), $3 );
@@ -2674,84 +2681,25 @@ DeleteStmt: DELETE FROM relation_name
2674
2681
}
2675
2682
;
2676
2683
2677
- LockStmt : LOCK_P opt_table relation_name
2678
- {
2679
- $$ = cat3_str(make1_str(" lock" ), $2 , $3 );
2680
- }
2681
- | LOCK_P opt_table relation_name IN opt_lmode ROW IDENT IDENT
2682
- {
2683
- if (strcasecmp($8 , " MODE" ))
2684
- {
2685
- sprintf (errortext, " syntax error at or near \" %s\" " , $8 );
2686
- yyerror (errortext);
2687
- }
2688
- if ($5 != NULL )
2689
- {
2690
- if (strcasecmp($5 , " SHARE" ))
2691
- {
2692
- sprintf (errortext, " syntax error at or near \" %s\" " , $5 );
2693
- yyerror (errortext);
2694
- }
2695
- if (strcasecmp($7 , " EXCLUSIVE" ))
2696
- {
2697
- sprintf (errortext, " syntax error at or near \" %s\" " , $7 );
2698
- yyerror (errortext);
2699
- }
2700
- }
2701
- else
2702
- {
2703
- if (strcasecmp($7 , " SHARE" ) && strcasecmp($7 , " EXCLUSIVE" ))
2704
- {
2705
- sprintf (errortext, " syntax error at or near \" %s\" " , $7 );
2706
- yyerror (errortext);
2707
- }
2708
- }
2709
-
2710
- $$ =cat4_str(cat5_str(make1_str(" lock" ), $2 , $3 , make1_str(" in" ), $5 ), make1_str(" row" ), $7 , $8 );
2711
- }
2712
- | LOCK_P opt_table relation_name IN IDENT IDENT IDENT
2713
- {
2714
- if (strcasecmp($7 , " MODE" ))
2715
- {
2716
- sprintf (errortext, " syntax error at or near \" %s\" " , $7 );
2717
- yyerror (errortext);
2718
- }
2719
- if (strcasecmp($5 , " ACCESS" ))
2720
- {
2721
- sprintf (errortext, " syntax error at or near \" %s\" " , $5 );
2722
- yyerror (errortext);
2723
- }
2724
- if (strcasecmp($6 , " SHARE" ) && strcasecmp($6 , " EXCLUSIVE" ))
2725
- {
2726
- sprintf (errortext, " syntax error at or near \" %s\" " , $6 );
2727
- yyerror (errortext);
2728
- }
2729
-
2730
- $$ =cat3_str(cat5_str(make1_str(" lock" ), $2 , $3 , make1_str(" in" ), $5 ), $6 , $7 );
2731
- }
2732
- | LOCK_P opt_table relation_name IN IDENT IDENT
2684
+ LockStmt : LOCK_P opt_table relation_name opt_lock
2733
2685
{
2734
- if (strcasecmp($6 , " MODE" ))
2735
- {
2736
- sprintf (errortext, " syntax error at or near \" %s\" " , $6 );
2737
- yyerror (errortext);
2738
- }
2739
- if (strcasecmp($5 , " SHARE" ) && strcasecmp($5 , " EXCLUSIVE" ))
2740
- {
2741
- sprintf (errortext, " syntax error at or near \" %s\" " , $5 );
2742
- yyerror (errortext);
2743
- }
2744
-
2745
- $$ =cat2_str(cat5_str(make1_str(" lock" ), $2 , $3 , make1_str(" in" ), $5 ), $6 );
2686
+ $$ = cat4_str(make1_str(" lock" ), $2 , $3 , $4 );
2746
2687
}
2747
2688
;
2748
2689
2749
- opt_lmode : IDENT { $$ = $1 ; }
2750
- | /* EMPTY*/ { $$ = make1_str(" " ); }
2690
+ opt_lock : lock_type MODE { $$ = cat2_str( $1 , make1_str( " mode " )) ; }
2691
+ | /* EMPTY*/ { $$ = make1_str(" " );}
2751
2692
;
2752
2693
2694
+ lock_type : SHARE ROW EXCLUSIVE { $$ = make1_str(" share row exclusive" ); }
2695
+ | ROW opt_lmode { $$ = cat2_str(make1_str(" row" ), $2 );}
2696
+ | ACCESS opt_lmode { $$ = cat2_str(make1_str(" access" ), $2 );}
2697
+ | opt_lmode { $$ = $1 ; }
2698
+ ;
2753
2699
2754
-
2700
+ opt_lmode : SHARE { $$ = make1_str(" share" ); }
2701
+ | EXCLUSIVE { $$ = make1_str(" exclusive" ); }
2702
+ ;
2755
2703
2756
2704
/* ****************************************************************************
2757
2705
*
@@ -3397,9 +3345,6 @@ opt_decimal: '(' Iconst ',' Iconst ')'
3397
3345
3398
3346
/* SQL92 character data types
3399
3347
* The following implements CHAR() and VARCHAR().
3400
- * We do it here instead of the 'Generic' production
3401
- * because we don't want to allow arrays of VARCHAR().
3402
- * I haven't thought about whether that will work or not.
3403
3348
* - ay 6/95
3404
3349
*/
3405
3350
Character : character ' (' Iconst ' )'
@@ -4427,12 +4372,14 @@ TypeId: ColId
4427
4372
ColId : ident { $$ = $1 ; }
4428
4373
| datetime { $$ = $1 ; }
4429
4374
| ABSOLUTE { $$ = make1_str(" absolute" ); }
4375
+ | ACCESS { $$ = make1_str(" access" ); }
4430
4376
| ACTION { $$ = make1_str(" action" ); }
4431
4377
| AFTER { $$ = make1_str(" after" ); }
4432
4378
| AGGREGATE { $$ = make1_str(" aggregate" ); }
4433
4379
| BACKWARD { $$ = make1_str(" backward" ); }
4434
4380
| BEFORE { $$ = make1_str(" before" ); }
4435
4381
| CACHE { $$ = make1_str(" cache" ); }
4382
+ | COMMITTED { $$ = make1_str(" committed" ); }
4436
4383
| CREATEDB { $$ = make1_str(" createdb" ); }
4437
4384
| CREATEUSER { $$ = make1_str(" createuser" ); }
4438
4385
| CYCLE { $$ = make1_str(" cycle" ); }
@@ -4441,6 +4388,7 @@ ColId: ident { $$ = $1; }
4441
4388
| DOUBLE { $$ = make1_str(" double" ); }
4442
4389
| EACH { $$ = make1_str(" each" ); }
4443
4390
| ENCODING { $$ = make1_str(" encoding" ); }
4391
+ | EXCLUSIVE { $$ = make1_str(" exclusive" ); }
4444
4392
| FORWARD { $$ = make1_str(" forward" ); }
4445
4393
| FUNCTION { $$ = make1_str(" function" ); }
4446
4394
| HANDLER { $$ = make1_str(" handler" ); }
@@ -4457,6 +4405,7 @@ ColId: ident { $$ = $1; }
4457
4405
| MATCH { $$ = make1_str(" match" ); }
4458
4406
| MAXVALUE { $$ = make1_str(" maxvalue" ); }
4459
4407
| MINVALUE { $$ = make1_str(" minvalue" ); }
4408
+ | MODE { $$ = make1_str(" mode" ); }
4460
4409
| NEXT { $$ = make1_str(" next" ); }
4461
4410
| NOCREATEDB { $$ = make1_str(" nocreatedb" ); }
4462
4411
| NOCREATEUSER { $$ = make1_str(" nocreateuser" ); }
@@ -4481,6 +4430,8 @@ ColId: ident { $$ = $1; }
4481
4430
| SCROLL { $$ = make1_str(" scroll" ); }
4482
4431
| SEQUENCE { $$ = make1_str(" sequence" ); }
4483
4432
| SERIAL { $$ = make1_str(" serial" ); }
4433
+ | SERIALIZABLE { $$ = make1_str(" serializable" ); }
4434
+ | SHARE { $$ = make1_str(" share" ); }
4484
4435
| START { $$ = make1_str(" start" ); }
4485
4436
| STATEMENT { $$ = make1_str(" statement" ); }
4486
4437
| STDIN { $$ = make1_str(" stdin" ); }
0 commit comments