From 5b00ea9e50332882a46f7302a0c1db1f609a4c0b Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Fri, 24 Nov 2000 20:16:40 +0000 Subject: [PATCH] Make SET SESSION CHARACTERISTICS compliant with SQL 99. Remove redundant, non-standard clauses. Allow CHARACTERISTICS as unquoted identifier. Merge related reference pages. --- doc/src/sgml/ref/allfiles.sgml | 3 +- doc/src/sgml/ref/set_session.sgml | 91 --------------------------- doc/src/sgml/ref/set_transaction.sgml | 32 ++++++---- src/backend/nodes/copyfuncs.c | 15 +---- src/backend/nodes/equalfuncs.c | 14 +---- src/backend/parser/analyze.c | 34 +--------- src/backend/parser/gram.y | 65 +++---------------- src/include/nodes/nodes.h | 3 +- src/include/nodes/parsenodes.h | 10 +-- 9 files changed, 37 insertions(+), 230 deletions(-) delete mode 100644 doc/src/sgml/ref/set_session.sgml diff --git a/doc/src/sgml/ref/allfiles.sgml b/doc/src/sgml/ref/allfiles.sgml index 3463b02777c..6c9bbc5248d 100644 --- a/doc/src/sgml/ref/allfiles.sgml +++ b/doc/src/sgml/ref/allfiles.sgml @@ -1,5 +1,5 @@ @@ -95,7 +95,6 @@ Complete list of usable sgml source files in this directory. - diff --git a/doc/src/sgml/ref/set_session.sgml b/doc/src/sgml/ref/set_session.sgml deleted file mode 100644 index b542d6646e8..00000000000 --- a/doc/src/sgml/ref/set_session.sgml +++ /dev/null @@ -1,91 +0,0 @@ - - - - - SET - SQL - Language Statements - - - SET SESSION CHARACTERISTICS - Set per-session run-time parameters - - - -SET SESSION CHARACTERISTICS TRANSACTION ISOLATION LEVEL { READ COMMITTED | SERIALIZABLE } -SET SESSION CHARACTERISTICS TIME ZONE { 'timezone' | LOCAL | DEFAULT } - - - - - Description - - SET SESSION CHARACTERISTICS changes the run-time - environment for the entire SQL - session. Currently, transaction isolation level and time zone can - be specified by this command. - - - - Use to show the - current setting of a parameters. - - - - Refer to - and to for more - information on allowed parameters. - - - - - Examples - - - Set the timezone for Berkeley, California, using double quotes to - preserve the uppercase attributes of the time zone specifier (note - that the date/time format is ISO here): - - -SET SESSION CHARACTERISTICS TIME ZONE "PST8PDT"; -SELECT CURRENT_TIMESTAMP AS today; - - today ------------------------- - 1998-07-14 07:41:21-07 - - - - - - Compatibility - - - SQL99 - - - SET SESSION is defined in - SQL99. - - - - - - diff --git a/doc/src/sgml/ref/set_transaction.sgml b/doc/src/sgml/ref/set_transaction.sgml index a5ca5fac1ff..488ee6ac31c 100644 --- a/doc/src/sgml/ref/set_transaction.sgml +++ b/doc/src/sgml/ref/set_transaction.sgml @@ -1,19 +1,23 @@ - + + + 2000-11-24 + + SET TRANSACTION SQL - Language Statements + SET TRANSACTION Set the characteristics of the current SQL-transaction + - - 2000-06-01 - SET TRANSACTION ISOLATION LEVEL { READ COMMITTED | SERIALIZABLE } +SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL { READ COMMITTED | SERIALIZABLE } @@ -21,13 +25,17 @@ SET TRANSACTION ISOLATION LEVEL { READ COMMITTED | SERIALIZABLE } Description - The SET TRANSACTION command sets the - characteristics for the current SQL-transaction. It has no effect - on any subsequent transactions. This command cannot be used after - the first DML statement (SELECT, - INSERT, DELETE, - UPDATE, FETCH, - COPY) of a transaction has been executed. + This command sets the transaction isolation level. The + SET TRANSACTION command sets the characteristics + for the current SQL-transaction. It has no effect on any subsequent + transactions. This command cannot be used after the first DML + statement (SELECT, INSERT, + DELETE, UPDATE, + FETCH, COPY) of a transaction + has been executed. SET SESSION CHARACTERISTICS + sets the default transaction isolation level for each transaction + for a session. SET TRANSACTION can override it + for an individual transaction. @@ -83,7 +91,7 @@ SET TRANSACTION ISOLATION LEVEL { READ COMMITTED | SERIALIZABLE } In SQL there are two other transaction - characteristics that can be set with this command: whether the + characteristics that can be set with these commands: whether the transaction is read-only and the size of the diagnostics area. Neither of these concepts are supported in Postgres. diff --git a/src/backend/nodes/copyfuncs.c b/src/backend/nodes/copyfuncs.c index 9c342b5dc1e..1e03e044182 100644 --- a/src/backend/nodes/copyfuncs.c +++ b/src/backend/nodes/copyfuncs.c @@ -15,7 +15,7 @@ * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/nodes/copyfuncs.c,v 1.132 2000/11/14 18:37:42 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/nodes/copyfuncs.c,v 1.133 2000/11/24 20:16:39 petere Exp $ * *------------------------------------------------------------------------- */ @@ -2513,16 +2513,6 @@ _copyReindexStmt(ReindexStmt *from) return newnode; } -static SetSessionStmt * -_copySetSessionStmt(SetSessionStmt *from) -{ - SetSessionStmt *newnode = makeNode(SetSessionStmt); - - Node_Copy(from, newnode, args); - - return newnode; -} - /* **************************************************************** * pg_list.h copy functions @@ -2922,9 +2912,6 @@ copyObject(void *from) case T_ReindexStmt: retval = _copyReindexStmt(from); break; - case T_SetSessionStmt: - retval = _copySetSessionStmt(from); - break; case T_CheckPointStmt: retval = (void*)makeNode(CheckPointStmt); break; diff --git a/src/backend/nodes/equalfuncs.c b/src/backend/nodes/equalfuncs.c index aac0902a028..51dbd24976c 100644 --- a/src/backend/nodes/equalfuncs.c +++ b/src/backend/nodes/equalfuncs.c @@ -20,7 +20,7 @@ * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/nodes/equalfuncs.c,v 1.82 2000/11/14 18:37:42 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/nodes/equalfuncs.c,v 1.83 2000/11/24 20:16:39 petere Exp $ * *------------------------------------------------------------------------- */ @@ -1363,15 +1363,6 @@ _equalReindexStmt(ReindexStmt *a, ReindexStmt *b) return true; } -static bool -_equalSetSessionStmt(SetSessionStmt *a, SetSessionStmt *b) -{ - if (!equal(a->args, b->args)) - return false; - - return true; -} - static bool _equalAExpr(A_Expr *a, A_Expr *b) { @@ -2037,9 +2028,6 @@ equal(void *a, void *b) case T_ReindexStmt: retval = _equalReindexStmt(a, b); break; - case T_SetSessionStmt: - retval = _equalSetSessionStmt(a, b); - break; case T_CheckPointStmt: retval = true; break; diff --git a/src/backend/parser/analyze.c b/src/backend/parser/analyze.c index 5c5942e4b7c..3b1d5b39762 100644 --- a/src/backend/parser/analyze.c +++ b/src/backend/parser/analyze.c @@ -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 *------------------------ diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y index 3c4a2e00c9c..b910f80fe4a 100644 --- a/src/backend/parser/gram.y +++ b/src/backend/parser/gram.y @@ -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 select_no_parens, select_clause, simple_select -%type SessionList -%type SessionClause - %type alter_column_action %type 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"; } diff --git a/src/include/nodes/nodes.h b/src/include/nodes/nodes.h index 6b64961525a..0d3d3af8a1c 100644 --- a/src/include/nodes/nodes.h +++ b/src/include/nodes/nodes.h @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2000, PostgreSQL, Inc * Portions Copyright (c) 1994, Regents of the University of California * - * $Id: nodes.h,v 1.83 2000/11/12 00:37:01 tgl Exp $ + * $Id: nodes.h,v 1.84 2000/11/24 20:16:40 petere Exp $ * *------------------------------------------------------------------------- */ @@ -202,7 +202,6 @@ typedef enum NodeTag T_AlterGroupStmt, T_DropGroupStmt, T_ReindexStmt, - T_SetSessionStmt, T_CheckPointStmt, T_A_Expr = 700, diff --git a/src/include/nodes/parsenodes.h b/src/include/nodes/parsenodes.h index a15d4c0ad85..67db2fe3e96 100644 --- a/src/include/nodes/parsenodes.h +++ b/src/include/nodes/parsenodes.h @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2000, PostgreSQL, Inc * Portions Copyright (c) 1994, Regents of the University of California * - * $Id: parsenodes.h,v 1.121 2000/11/14 18:37:48 tgl Exp $ + * $Id: parsenodes.h,v 1.122 2000/11/24 20:16:40 petere Exp $ * *------------------------------------------------------------------------- */ @@ -697,15 +697,9 @@ typedef struct ExplainStmt } ExplainStmt; /* ---------------------- - * Set Session Statement + * Checkpoint Statement * ---------------------- */ -typedef struct SetSessionStmt -{ - NodeTag type; - List *args; -} SetSessionStmt; - typedef struct CheckPointStmt { NodeTag type; -- 2.39.5