aboutsummaryrefslogtreecommitdiff
path: root/src/interfaces/ecpg/preproc/preproc.y
diff options
context:
space:
mode:
Diffstat (limited to 'src/interfaces/ecpg/preproc/preproc.y')
-rw-r--r--src/interfaces/ecpg/preproc/preproc.y98
1 files changed, 40 insertions, 58 deletions
diff --git a/src/interfaces/ecpg/preproc/preproc.y b/src/interfaces/ecpg/preproc/preproc.y
index 061f8d0027d..a29dd22948a 100644
--- a/src/interfaces/ecpg/preproc/preproc.y
+++ b/src/interfaces/ecpg/preproc/preproc.y
@@ -344,7 +344,7 @@ make_name(void)
%type <str> constraints_set_mode comment_type comment_cl comment_ag
%type <str> CreateGroupStmt AlterGroupStmt DropGroupStmt key_delete
%type <str> opt_force key_update CreateSchemaStmt PosIntStringConst
-%type <str> SessionList SessionClause SetSessionStmt IntConst PosIntConst
+%type <str> IntConst PosIntConst
%type <str> select_limit opt_for_update_clause CheckPointStmt
%type <str> ECPGWhenever ECPGConnect connection_target ECPGOpen
@@ -444,7 +444,6 @@ stmt: AlterSchemaStmt { output_statement($1, 0, NULL, connection); }
output_statement($1, 1, NULL, connection);
}
| RuleStmt { output_statement($1, 0, NULL, connection); }
- | SetSessionStmt { output_statement($1, 0, NULL, connection); }
| TransactionStmt {
fprintf(yyout, "{ ECPGtrans(__LINE__, %s, \"%s\");", connection ? connection : "NULL", $1);
whenever_action(2);
@@ -778,43 +777,6 @@ DropSchemaStmt: DROP SCHEMA UserId
/*****************************************************************************
*
- * Manipulate a postgresql session
- *
- *
- *****************************************************************************/
-
-SetSessionStmt: SET SESSION CHARACTERISTICS AS SessionList
- {
- $$ = cat2_str(make_str("set session characteristics as"), $5);
- }
- ;
-
-SessionList: SessionList ',' SessionClause
- {
- $$ = cat_str(3, $1, make_str(","), $3);
- }
- | SessionClause
- {
- $$ = $1;
- }
- ;
-
-SessionClause: TRANSACTION COMMIT opt_boolean
- {
- $$ = cat2_str(make_str("transaction commit"), $3);
- }
- | TIME ZONE zone_value
- {
- $$ = cat2_str(make_str("time zone"), $3);
- }
- | TRANSACTION ISOLATION LEVEL opt_level
- {
- $$ = cat2_str(make_str("transaction isolation level"), $4);
- }
- ;
-
-/*****************************************************************************
- *
* Set PG internal variable
* SET name TO 'var_value'
* Include SQL92 syntax (thomas 1997-10-22):
@@ -838,6 +800,10 @@ VariableSetStmt: SET ColId TO var_value
{
$$ = cat2_str(make_str("set transaction isolation level"), $5);
}
+ | SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL opt_level
+ {
+ $$ = cat2_str(make_str("set session characteristics as transaction isolation level"), $8);
+ }
| SET NAMES opt_encoding
{
$$ = cat2_str(make_str("set names"), $3);
@@ -3599,26 +3565,36 @@ position_list: b_expr IN b_expr
{ $$ = EMPTY; }
;
-substr_list: expr_list substr_from substr_for
+substr_list: a_expr substr_from substr_for
{
$$ = cat_str(3, $1, $2, $3);
}
+ | a_expr substr_for substr_from
+ {
+ $$ = cat_str(3, $1, $2, $3);
+ }
+ | a_expr substr_from
+ {
+ $$ = cat2_str($1, $2);
+ }
+ | a_expr substr_for
+ {
+ $$ = cat2_str($1, $2);
+ }
+ | expr_list
+ {
+ $$ = $1;
+ }
| /* EMPTY */
{ $$ = EMPTY; }
;
-substr_from: FROM expr_list
+substr_from: FROM a_expr
{ $$ = cat2_str(make_str("from"), $2); }
- | /* EMPTY */
- {
- $$ = EMPTY;
- }
;
-substr_for: FOR expr_list
+substr_for: FOR a_expr
{ $$ = cat2_str(make_str("for"), $2); }
- | /* EMPTY */
- { $$ = EMPTY; }
;
trim_list: a_expr FROM expr_list
@@ -3783,6 +3759,7 @@ relation_name: SpecialRuleRelation
}
;
+name: ColId { $$ = $1; };
database_name: ColId { $$ = $1; };
access_method: ColId { $$ = $1; };
attr_name: ColId { $$ = $1; };
@@ -3793,8 +3770,17 @@ index_name: ColId { $$ = $1; };
* Include date/time keywords as SQL92 extension.
* Include TYPE as a SQL92 unreserved keyword. - thomas 1997-10-05
*/
-name: ColId { $$ = $1; };
-func_name: ColId { $$ = $1; };
+func_name: ColId { $$ = $1; };
+ | BETWEEN { $$ = make_str("between");}
+ | ILIKE { $$ = make_str("ilike");}
+ | IN { $$ = make_str("in");}
+ | IS { $$ = make_str("is");}
+ | ISNULL { $$ = make_str("isnull");}
+ | LIKE { $$ = make_str("like");}
+ | NOTNULL { $$ = make_str("notnull");}
+ | OVERLAPS { $$ = make_str("overlaps");}
+ ;
+
file_name: StringConst { $$ = $1; };
@@ -4967,12 +4953,6 @@ opt_symbol: symbol { $$ = $1; }
symbol: ColLabel { $$ = $1; };
-/* Any tokens which show up as operators will screw up the parsing if
- * allowed as identifiers, but are acceptable as ColLabels:
- * BETWEEN, IN, IS, ISNULL, NOTNULL, OVERLAPS
- * Thanks to Tom Lane for pointing this out. - thomas 2000-03-29
- */
-
/* Parser tokens to be used as identifiers.
* Tokens involving data types should appear in ColId only,
* since they will conflict with real TypeName productions.
@@ -4991,6 +4971,7 @@ TokenId: ABSOLUTE { $$ = make_str("absolute"); }
| CACHE { $$ = make_str("cache"); }
| CASCADE { $$ = make_str("cascade"); }
| CHAIN { $$ = make_str("chain"); }
+ | CHARACTERISTICS { $$ = make_str("characteristics"); }
| CHECKPOINT { $$ = make_str("checkpoint"); }
| CLOSE { $$ = make_str("close"); }
| COMMENT { $$ = make_str("comment"); }
@@ -5017,7 +4998,6 @@ TokenId: ABSOLUTE { $$ = make_str("absolute"); }
| FUNCTION { $$ = make_str("function"); }
| GRANT { $$ = make_str("grant"); }
| HANDLER { $$ = make_str("handler"); }
- | ILIKE { $$ = make_str("ilike"); }
| IMMEDIATE { $$ = make_str("immediate"); }
| INCREMENT { $$ = make_str("increment"); }
| INDEX { $$ = make_str("index"); }
@@ -5030,7 +5010,6 @@ TokenId: ABSOLUTE { $$ = make_str("absolute"); }
| LANGUAGE { $$ = make_str("language"); }
| LANCOMPILER { $$ = make_str("lancompiler"); }
| LEVEL { $$ = make_str("level"); }
- | LIKE { $$ = make_str("like"); }
| LOCATION { $$ = make_str("location"); }
| MATCH { $$ = make_str("match"); }
| MAXVALUE { $$ = make_str("maxvalue"); }
@@ -5165,6 +5144,7 @@ ECPGColLabel: ECPGColId { $$ = $1; }
| GLOBAL { $$ = make_str("global"); }
| GROUP { $$ = make_str("group"); }
| HAVING { $$ = make_str("having"); }
+ | ILIKE { $$ = make_str("ilike"); }
| INITIALLY { $$ = make_str("initially"); }
| INNER_P { $$ = make_str("inner"); }
| INTERSECT { $$ = make_str("intersect"); }
@@ -5173,6 +5153,8 @@ ECPGColLabel: ECPGColId { $$ = $1; }
| JOIN { $$ = make_str("join"); }
| LEADING { $$ = make_str("leading"); }
| LEFT { $$ = make_str("left"); }
+ | LIKE { $$ = make_str("like"); }
+ | LIMIT { $$ = make_str("limit"); }
| LISTEN { $$ = make_str("listen"); }
| LOAD { $$ = make_str("load"); }
| LOCK_P { $$ = make_str("lock"); }