mirror of
https://github.com/postgres/postgres.git
synced 2025-07-12 21:01:52 +03:00
Make SET SESSION CHARACTERISTICS compliant with SQL 99. Remove redundant,
non-standard clauses. Allow CHARACTERISTICS as unquoted identifier. Merge related reference pages.
This commit is contained in:
@ -6,7 +6,7 @@
|
||||
* Portions Copyright (c) 1996-2000, PostgreSQL, Inc
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* $Id: analyze.c,v 1.167 2000/11/18 16:17:20 petere Exp $
|
||||
* $Id: analyze.c,v 1.168 2000/11/24 20:16:39 petere Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -208,38 +208,6 @@ transformStmt(ParseState *pstate, Node *parseTree)
|
||||
result = transformAlterTableStmt(pstate, (AlterTableStmt *) parseTree);
|
||||
break;
|
||||
|
||||
case T_SetSessionStmt:
|
||||
{
|
||||
List *l;
|
||||
/* Session is a list of SetVariable nodes
|
||||
* so just run through the list.
|
||||
*/
|
||||
SetSessionStmt *stmt = (SetSessionStmt *) parseTree;
|
||||
|
||||
l = stmt->args;
|
||||
/* First check for duplicate keywords (disallowed by SQL99) */
|
||||
while (l != NULL)
|
||||
{
|
||||
VariableSetStmt *v = (VariableSetStmt *) lfirst(l);
|
||||
List *ll = lnext(l);
|
||||
while (ll != NULL)
|
||||
{
|
||||
VariableSetStmt *vv = (VariableSetStmt *) lfirst(ll);
|
||||
if (strcmp(v->name, vv->name) == 0)
|
||||
elog(ERROR, "SET SESSION CHARACTERISTICS duplicated entry not allowed");
|
||||
ll = lnext(ll);
|
||||
}
|
||||
l = lnext(l);
|
||||
}
|
||||
|
||||
l = stmt->args;
|
||||
result = transformStmt(pstate, lfirst(l));
|
||||
l = lnext(l);
|
||||
if (l != NULL)
|
||||
extras_after = lappend(extras_after, lfirst(l));
|
||||
}
|
||||
break;
|
||||
|
||||
/*------------------------
|
||||
* Optimizable statements
|
||||
*------------------------
|
||||
|
@ -11,7 +11,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.209 2000/11/14 18:37:49 tgl Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.210 2000/11/24 20:16:39 petere Exp $
|
||||
*
|
||||
* HISTORY
|
||||
* AUTHOR DATE MAJOR EVENT
|
||||
@ -134,15 +134,12 @@ static void doNegateFloat(Value *v);
|
||||
NotifyStmt, OptimizableStmt, ProcedureStmt, ReindexStmt,
|
||||
RemoveAggrStmt, RemoveFuncStmt, RemoveOperStmt,
|
||||
RenameStmt, RevokeStmt, RuleActionStmt, RuleActionStmtOrEmpty,
|
||||
RuleStmt, SelectStmt, SetSessionStmt, TransactionStmt, TruncateStmt,
|
||||
RuleStmt, SelectStmt, TransactionStmt, TruncateStmt,
|
||||
UnlistenStmt, UpdateStmt, VacuumStmt, VariableResetStmt,
|
||||
VariableSetStmt, VariableShowStmt, ViewStmt, CheckPointStmt
|
||||
|
||||
%type <node> select_no_parens, select_clause, simple_select
|
||||
|
||||
%type <list> SessionList
|
||||
%type <node> SessionClause
|
||||
|
||||
%type <node> alter_column_action
|
||||
%type <ival> drop_behavior
|
||||
|
||||
@ -459,7 +456,6 @@ stmt : AlterSchemaStmt
|
||||
| RevokeStmt
|
||||
| OptimizableStmt
|
||||
| RuleStmt
|
||||
| SetSessionStmt
|
||||
| TransactionStmt
|
||||
| ViewStmt
|
||||
| LoadStmt
|
||||
@ -706,55 +702,6 @@ DropSchemaStmt: DROP SCHEMA UserId
|
||||
}
|
||||
|
||||
|
||||
/*****************************************************************************
|
||||
*
|
||||
* Manipulate a postgresql session
|
||||
*
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
SetSessionStmt: SET SESSION CHARACTERISTICS AS SessionList
|
||||
{
|
||||
SetSessionStmt *n = makeNode(SetSessionStmt);
|
||||
n->args = $5;
|
||||
$$ = (Node*)n;
|
||||
}
|
||||
;
|
||||
|
||||
SessionList: SessionList ',' SessionClause
|
||||
{
|
||||
$$ = lappend($1, $3);
|
||||
}
|
||||
| SessionClause
|
||||
{
|
||||
$$ = makeList1($1);
|
||||
}
|
||||
;
|
||||
|
||||
SessionClause: TRANSACTION COMMIT opt_boolean
|
||||
{
|
||||
VariableSetStmt *n = makeNode(VariableSetStmt);
|
||||
n->name = "autocommit";
|
||||
n->value = $3;
|
||||
$$ = (Node *) n;
|
||||
}
|
||||
| TIME ZONE zone_value
|
||||
{
|
||||
VariableSetStmt *n = makeNode(VariableSetStmt);
|
||||
n->name = "timezone";
|
||||
n->value = $3;
|
||||
$$ = (Node *) n;
|
||||
}
|
||||
| TRANSACTION ISOLATION LEVEL opt_level
|
||||
{
|
||||
VariableSetStmt *n = makeNode(VariableSetStmt);
|
||||
n->name = "DefaultXactIsoLevel";
|
||||
n->value = $4;
|
||||
$$ = (Node *) n;
|
||||
}
|
||||
;
|
||||
|
||||
|
||||
/*****************************************************************************
|
||||
*
|
||||
* Set PG internal variable
|
||||
@ -792,6 +739,13 @@ VariableSetStmt: SET ColId TO var_value
|
||||
n->value = $5;
|
||||
$$ = (Node *) n;
|
||||
}
|
||||
| SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL opt_level
|
||||
{
|
||||
VariableSetStmt *n = makeNode(VariableSetStmt);
|
||||
n->name = "DefaultXactIsoLevel";
|
||||
n->value = $8;
|
||||
$$ = (Node *) n;
|
||||
}
|
||||
| SET NAMES opt_encoding
|
||||
{
|
||||
VariableSetStmt *n = makeNode(VariableSetStmt);
|
||||
@ -5444,6 +5398,7 @@ TokenId: ABSOLUTE { $$ = "absolute"; }
|
||||
| CACHE { $$ = "cache"; }
|
||||
| CASCADE { $$ = "cascade"; }
|
||||
| CHAIN { $$ = "chain"; }
|
||||
| CHARACTERISTICS { $$ = "characteristics"; }
|
||||
| CHECKPOINT { $$ = "checkpoint"; }
|
||||
| CLOSE { $$ = "close"; }
|
||||
| COMMENT { $$ = "comment"; }
|
||||
|
Reference in New Issue
Block a user