diff options
author | Peter Eisentraut <peter_e@gmx.net> | 2000-11-24 20:16:40 +0000 |
---|---|---|
committer | Peter Eisentraut <peter_e@gmx.net> | 2000-11-24 20:16:40 +0000 |
commit | 5b00ea9e50332882a46f7302a0c1db1f609a4c0b (patch) | |
tree | efbc41b375b1a409d846ff74abcf7bb7afd8d517 | |
parent | f1ddc19b10b081d0900c4fdee220f2b8a85b062f (diff) | |
download | postgresql-5b00ea9e50332882a46f7302a0c1db1f609a4c0b.tar.gz postgresql-5b00ea9e50332882a46f7302a0c1db1f609a4c0b.zip |
Make SET SESSION CHARACTERISTICS compliant with SQL 99. Remove redundant,
non-standard clauses. Allow CHARACTERISTICS as unquoted identifier.
Merge related reference pages.
-rw-r--r-- | doc/src/sgml/ref/allfiles.sgml | 3 | ||||
-rw-r--r-- | doc/src/sgml/ref/set_session.sgml | 91 | ||||
-rw-r--r-- | doc/src/sgml/ref/set_transaction.sgml | 32 | ||||
-rw-r--r-- | src/backend/nodes/copyfuncs.c | 15 | ||||
-rw-r--r-- | src/backend/nodes/equalfuncs.c | 14 | ||||
-rw-r--r-- | src/backend/parser/analyze.c | 34 | ||||
-rw-r--r-- | src/backend/parser/gram.y | 65 | ||||
-rw-r--r-- | src/include/nodes/nodes.h | 3 | ||||
-rw-r--r-- | src/include/nodes/parsenodes.h | 10 |
9 files changed, 37 insertions, 230 deletions
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 @@ <!-- -$Header: /cvsroot/pgsql/doc/src/sgml/ref/allfiles.sgml,v 1.25 2000/11/24 17:44:22 petere Exp $ +$Header: /cvsroot/pgsql/doc/src/sgml/ref/allfiles.sgml,v 1.26 2000/11/24 20:16:38 petere Exp $ Postgres documentation Complete list of usable sgml source files in this directory. --> @@ -95,7 +95,6 @@ Complete list of usable sgml source files in this directory. <!entity select system "select.sgml"> <!entity selectInto system "select_into.sgml"> <!entity set system "set.sgml"> -<!entity setSession system "set_session.sgml"> <!entity setConstraints system "set_constraints.sgml"> <!entity setTransaction system "set_transaction.sgml"> <!entity show system "show.sgml"> 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 @@ -<!-- -$Header: /cvsroot/pgsql/doc/src/sgml/ref/Attic/set_session.sgml,v 1.1 2000/07/14 15:27:14 thomas Exp $ -Postgres documentation ---> - -<refentry id="SQL-SET-SESSION"> - <refmeta> - <refentrytitle id="SQL-SET-SESSION-TITLE">SET</refentrytitle> - <refmiscinfo>SQL - Language Statements</refmiscinfo> - </refmeta> - <refnamediv> - <refname>SET SESSION CHARACTERISTICS</refname> - <refpurpose>Set per-session run-time parameters</refpurpose> - </refnamediv> - <refsynopsisdiv> - <synopsis> -SET SESSION CHARACTERISTICS TRANSACTION ISOLATION LEVEL { READ COMMITTED | SERIALIZABLE } -SET SESSION CHARACTERISTICS TIME ZONE { '<replaceable class="PARAMETER">timezone</replaceable>' | LOCAL | DEFAULT } - </synopsis> - </refsynopsisdiv> - - <refsect1 id="R1-SQL-SET-SESSION-1"> - <title>Description</title> - <para> - <command>SET SESSION CHARACTERISTICS</command> changes the run-time - environment for the entire <acronym>SQL</acronym> - session. Currently, transaction isolation level and time zone can - be specified by this command. - </para> - - <para> - Use <xref linkend="SQL-SHOW" endterm="SQL-SHOW-title"> to show the - current setting of a parameters. - </para> - - <para> - Refer to <xref linkend="SQL-SET-TRANSACTION" endterm="SQL-SET-TRANSACTION-TITLE"> - and to <xref linkend="SQL-SET" endterm="SQL-SET-TITLE"> for more - information on allowed parameters. - </para> - </refsect1> - - <refsect1> - <title>Examples</title> - - <para> - 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): - -<screen> -SET SESSION CHARACTERISTICS TIME ZONE "PST8PDT"; -SELECT CURRENT_TIMESTAMP AS today; - - today ------------------------- - 1998-07-14 07:41:21-07 -</screen> - </para> - </refsect1> - - <refsect1 id="R1-SQL-SET-SESSION-3"> - <title>Compatibility</title> - - <refsect2 id="R2-SQL-SET-SESSION-4"> - <title>SQL99</title> - - <para> - <command>SET SESSION</command> is defined in - <acronym>SQL99</acronym>. - </para> - </refsect2> - </refsect1> -</refentry> - -<!-- Keep this comment at the end of the file -Local variables: -mode:sgml -sgml-omittag:nil -sgml-shorttag:t -sgml-minimize-attributes:nil -sgml-always-quote-attributes:t -sgml-indent-step:1 -sgml-indent-data:t -sgml-parent-document:nil -sgml-default-dtd-file:"../reference.ced" -sgml-exposed-tags:nil -sgml-local-catalogs:("/usr/lib/sgml/catalog") -sgml-local-ecat-files:nil -End: ---> 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 @@ -<!-- $Header: /cvsroot/pgsql/doc/src/sgml/ref/set_transaction.sgml,v 1.2 2000/07/14 15:27:14 thomas Exp $ --> +<!-- $Header: /cvsroot/pgsql/doc/src/sgml/ref/set_transaction.sgml,v 1.3 2000/11/24 20:16:38 petere Exp $ --> <refentry id="SQL-SET-TRANSACTION"> + <docinfo> + <date>2000-11-24</date> + </docinfo> + <refmeta> <refentrytitle id="SQL-SET-TRANSACTION-TITLE">SET TRANSACTION</refentrytitle> <refmiscinfo>SQL - Language Statements</refmiscinfo> </refmeta> + <refnamediv> <refname>SET TRANSACTION</refname> <refpurpose>Set the characteristics of the current SQL-transaction</refpurpose> </refnamediv> + <refsynopsisdiv> - <refsynopsisdivinfo> - <date>2000-06-01</date> - </refsynopsisdivinfo> <synopsis> SET TRANSACTION ISOLATION LEVEL { READ COMMITTED | SERIALIZABLE } +SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL { READ COMMITTED | SERIALIZABLE } </synopsis> </refsynopsisdiv> @@ -21,13 +25,17 @@ SET TRANSACTION ISOLATION LEVEL { READ COMMITTED | SERIALIZABLE } <title>Description</title> <para> - The <command>SET TRANSACTION</command> 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 (<command>SELECT</command>, - <command>INSERT</command>, <command>DELETE</command>, - <command>UPDATE</command>, <command>FETCH</command>, - <command>COPY</command>) of a transaction has been executed. + This command sets the transaction isolation level. The + <command>SET TRANSACTION</command> 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 (<command>SELECT</command>, <command>INSERT</command>, + <command>DELETE</command>, <command>UPDATE</command>, + <command>FETCH</command>, <command>COPY</command>) of a transaction + has been executed. <command>SET SESSION CHARACTERISTICS</command> + sets the default transaction isolation level for each transaction + for a session. <command>SET TRANSACTION</command> can override it + for an individual transaction. </para> <para> @@ -83,7 +91,7 @@ SET TRANSACTION ISOLATION LEVEL { READ COMMITTED | SERIALIZABLE } <para> In <acronym>SQL</acronym> 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. </para> 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 $ * *------------------------------------------------------------------------- */ @@ -1364,15 +1364,6 @@ _equalReindexStmt(ReindexStmt *a, ReindexStmt *b) } 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) { if (a->oper != b->oper) @@ -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 <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 @@ -708,55 +704,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 * SET name TO 'var_value' * Include SQL92 syntax (thomas 1997-10-22): @@ -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; |