@@ -344,7 +344,7 @@ make_name(void)
344344%type <str> constraints_set_mode comment_type comment_cl comment_ag
345345%type <str> CreateGroupStmt AlterGroupStmt DropGroupStmt key_delete
346346%type <str> opt_force key_update CreateSchemaStmt PosIntStringConst
347- %type <str> SessionList SessionClause SetSessionStmt IntConst PosIntConst
347+ %type <str> IntConst PosIntConst
348348%type <str> select_limit opt_for_update_clause CheckPointStmt
349349
350350%type <str> ECPGWhenever ECPGConnect connection_target ECPGOpen
@@ -444,7 +444,6 @@ stmt: AlterSchemaStmt { output_statement($1, 0, NULL, connection); }
444444output_statement ($1 ,1 ,NULL , connection);
445445}
446446| RuleStmt { output_statement($1 ,0 ,NULL , connection); }
447- | SetSessionStmt { output_statement($1 ,0 ,NULL , connection); }
448447| TransactionStmt {
449448fprintf (yyout," { ECPGtrans(__LINE__, %s,\" %s\" );" , connection ? connection :" NULL" , $1 );
450449whenever_action (2 );
@@ -776,43 +775,6 @@ DropSchemaStmt: DROP SCHEMA UserId
776775}
777776;
778777
779- /* ****************************************************************************
780- *
781- * Manipulate a postgresql session
782- *
783- *
784- *****************************************************************************/
785-
786- SetSessionStmt :SET SESSION CHARACTERISTICS AS SessionList
787- {
788- $$ = cat2_str(make_str(" set session characteristics as" ),$5 );
789- }
790- ;
791-
792- SessionList :SessionList ' ,' SessionClause
793- {
794- $$ = cat_str(3 ,$1 , make_str(" ," ),$3 );
795- }
796- | SessionClause
797- {
798- $$ =$1 ;
799- }
800- ;
801-
802- SessionClause :TRANSACTION COMMIT opt_boolean
803- {
804- $$ = cat2_str(make_str(" transaction commit" ),$3 );
805- }
806- | TIME ZONE zone_value
807- {
808- $$ = cat2_str(make_str(" time zone" ),$3 );
809- }
810- | TRANSACTION ISOLATION LEVEL opt_level
811- {
812- $$ = cat2_str(make_str(" transaction isolation level" ),$4 );
813- }
814- ;
815-
816778/* ****************************************************************************
817779 *
818780 * Set PG internal variable
@@ -838,6 +800,10 @@ VariableSetStmt: SET ColId TO var_value
838800{
839801$$ = cat2_str(make_str(" set transaction isolation level" ),$5 );
840802}
803+ | SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL opt_level
804+ {
805+ $$ = cat2_str(make_str(" set session characteristics as transaction isolation level" ),$8 );
806+ }
841807| SET NAMES opt_encoding
842808 {
843809$$ = cat2_str(make_str(" set names" ),$3 );
@@ -3599,26 +3565,36 @@ position_list: b_expr IN b_expr
35993565{$$ = EMPTY; }
36003566;
36013567
3602- substr_list :expr_list substr_from substr_for
3568+ substr_list :a_expr substr_from substr_for
36033569{
36043570$$ = cat_str(3 ,$1 ,$2 ,$3 );
36053571}
3572+ | a_expr substr_for substr_from
3573+ {
3574+ $$ = cat_str(3 ,$1 ,$2 ,$3 );
3575+ }
3576+ | a_expr substr_from
3577+ {
3578+ $$ = cat2_str($1 ,$2 );
3579+ }
3580+ | a_expr substr_for
3581+ {
3582+ $$ = cat2_str($1 ,$2 );
3583+ }
3584+ | expr_list
3585+ {
3586+ $$ =$1 ;
3587+ }
36063588| /* EMPTY*/
36073589{$$ = EMPTY; }
36083590;
36093591
3610- substr_from :FROM expr_list
3592+ substr_from :FROM a_expr
36113593{$$ = cat2_str(make_str(" from" ),$2 ); }
3612- | /* EMPTY*/
3613- {
3614- $$ = EMPTY;
3615- }
36163594;
36173595
3618- substr_for :FOR expr_list
3596+ substr_for :FOR a_expr
36193597{$$ = cat2_str(make_str(" for" ),$2 ); }
3620- | /* EMPTY*/
3621- {$$ = EMPTY; }
36223598;
36233599
36243600trim_list :a_expr FROM expr_list
@@ -3783,6 +3759,7 @@ relation_name:SpecialRuleRelation
37833759}
37843760;
37853761
3762+ name :ColId {$$ =$1 ; };
37863763database_name :ColId {$$ =$1 ; };
37873764access_method :ColId {$$ =$1 ; };
37883765attr_name :ColId {$$ =$1 ; };
@@ -3793,8 +3770,17 @@ index_name:ColId{ $$ = $1; };
37933770 * Include date/time keywords as SQL92 extension.
37943771 * Include TYPE as a SQL92 unreserved keyword. - thomas 1997-10-05
37953772*/
3796- name :ColId {$$ =$1 ; };
3797- func_name :ColId {$$ =$1 ; };
3773+ func_name :ColId {$$ =$1 ; };
3774+ | BETWEEN { $$ = make_str("between");}
3775+ | ILIKE{ $$ = make_str("ilike");}
3776+ | IN{ $$ = make_str("in");}
3777+ | IS{ $$ = make_str("is");}
3778+ | ISNULL{ $$ = make_str("isnull");}
3779+ | LIKE{ $$ = make_str("like");}
3780+ | NOTNULL{ $$ = make_str("notnull");}
3781+ | OVERLAPS{ $$ = make_str("overlaps");}
3782+ ;
3783+
37983784
37993785file_name :StringConst {$$ =$1 ; };
38003786
@@ -4967,12 +4953,6 @@ opt_symbol:symbol{ $$ = $1; }
49674953
49684954symbol :ColLabel {$$ =$1 ; };
49694955
4970- /* Any tokens which show up as operators will screw up the parsing if
4971- * allowed as identifiers, but are acceptable as ColLabels:
4972- * BETWEEN, IN, IS, ISNULL, NOTNULL, OVERLAPS
4973- * Thanks to Tom Lane for pointing this out. - thomas 2000-03-29
4974- */
4975-
49764956/* Parser tokens to be used as identifiers.
49774957 * Tokens involving data types should appear in ColId only,
49784958 * since they will conflict with real TypeName productions.
@@ -4991,6 +4971,7 @@ TokenId: ABSOLUTE{ $$ = make_str("absolute"); }
49914971| CACHE {$$ = make_str(" cache" ); }
49924972| CASCADE {$$ = make_str(" cascade" ); }
49934973| CHAIN {$$ = make_str(" chain" ); }
4974+ | CHARACTERISTICS {$$ = make_str(" characteristics" ); }
49944975| CHECKPOINT {$$ = make_str(" checkpoint" ); }
49954976| CLOSE {$$ = make_str(" close" ); }
49964977| COMMENT {$$ = make_str(" comment" ); }
@@ -5017,7 +4998,6 @@ TokenId: ABSOLUTE{ $$ = make_str("absolute"); }
50174998| FUNCTION {$$ = make_str(" function" ); }
50184999| GRANT {$$ = make_str(" grant" ); }
50195000| HANDLER {$$ = make_str(" handler" ); }
5020- | ILIKE {$$ = make_str(" ilike" ); }
50215001| IMMEDIATE {$$ = make_str(" immediate" ); }
50225002| INCREMENT {$$ = make_str(" increment" ); }
50235003| INDEX {$$ = make_str(" index" ); }
@@ -5030,7 +5010,6 @@ TokenId: ABSOLUTE{ $$ = make_str("absolute"); }
50305010| LANGUAGE {$$ = make_str(" language" ); }
50315011| LANCOMPILER {$$ = make_str(" lancompiler" ); }
50325012| LEVEL {$$ = make_str(" level" ); }
5033- | LIKE {$$ = make_str(" like" ); }
50345013| LOCATION {$$ = make_str(" location" ); }
50355014| MATCH {$$ = make_str(" match" ); }
50365015| MAXVALUE {$$ = make_str(" maxvalue" ); }
@@ -5165,6 +5144,7 @@ ECPGColLabel: ECPGColId{ $$ = $1; }
51655144| GLOBAL {$$ = make_str(" global" ); }
51665145| GROUP {$$ = make_str(" group" ); }
51675146| HAVING {$$ = make_str(" having" ); }
5147+ | ILIKE {$$ = make_str(" ilike" ); }
51685148| INITIALLY {$$ = make_str(" initially" ); }
51695149| INNER_P {$$ = make_str(" inner" ); }
51705150| INTERSECT {$$ = make_str(" intersect" ); }
@@ -5173,6 +5153,8 @@ ECPGColLabel: ECPGColId{ $$ = $1; }
51735153| JOIN {$$ = make_str(" join" ); }
51745154| LEADING {$$ = make_str(" leading" ); }
51755155| LEFT {$$ = make_str(" left" ); }
5156+ | LIKE {$$ = make_str(" like" ); }
5157+ | LIMIT {$$ = make_str(" limit" ); }
51765158| LISTEN {$$ = make_str(" listen" ); }
51775159| LOAD {$$ = make_str(" load" ); }
51785160| LOCK_P {$$ = make_str(" lock" ); }