提交 5b00ea9e 编写于 作者: P Peter Eisentraut

Make SET SESSION CHARACTERISTICS compliant with SQL 99. Remove redundant,

non-standard clauses.  Allow CHARACTERISTICS as unquoted identifier.
Merge related reference pages.
上级 f1ddc19b
<!-- <!--
$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 Postgres documentation
Complete list of usable sgml source files in this directory. Complete list of usable sgml source files in this directory.
--> -->
...@@ -95,7 +95,6 @@ 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 select system "select.sgml">
<!entity selectInto system "select_into.sgml"> <!entity selectInto system "select_into.sgml">
<!entity set system "set.sgml"> <!entity set system "set.sgml">
<!entity setSession system "set_session.sgml">
<!entity setConstraints system "set_constraints.sgml"> <!entity setConstraints system "set_constraints.sgml">
<!entity setTransaction system "set_transaction.sgml"> <!entity setTransaction system "set_transaction.sgml">
<!entity show system "show.sgml"> <!entity show system "show.sgml">
......
<!--
$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:
-->
<!-- $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"> <refentry id="SQL-SET-TRANSACTION">
<docinfo>
<date>2000-11-24</date>
</docinfo>
<refmeta> <refmeta>
<refentrytitle id="SQL-SET-TRANSACTION-TITLE">SET TRANSACTION</refentrytitle> <refentrytitle id="SQL-SET-TRANSACTION-TITLE">SET TRANSACTION</refentrytitle>
<refmiscinfo>SQL - Language Statements</refmiscinfo> <refmiscinfo>SQL - Language Statements</refmiscinfo>
</refmeta> </refmeta>
<refnamediv> <refnamediv>
<refname>SET TRANSACTION</refname> <refname>SET TRANSACTION</refname>
<refpurpose>Set the characteristics of the current SQL-transaction</refpurpose> <refpurpose>Set the characteristics of the current SQL-transaction</refpurpose>
</refnamediv> </refnamediv>
<refsynopsisdiv> <refsynopsisdiv>
<refsynopsisdivinfo>
<date>2000-06-01</date>
</refsynopsisdivinfo>
<synopsis> <synopsis>
SET TRANSACTION ISOLATION LEVEL { READ COMMITTED | SERIALIZABLE } SET TRANSACTION ISOLATION LEVEL { READ COMMITTED | SERIALIZABLE }
SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL { READ COMMITTED | SERIALIZABLE }
</synopsis> </synopsis>
</refsynopsisdiv> </refsynopsisdiv>
...@@ -21,13 +25,17 @@ SET TRANSACTION ISOLATION LEVEL { READ COMMITTED | SERIALIZABLE } ...@@ -21,13 +25,17 @@ SET TRANSACTION ISOLATION LEVEL { READ COMMITTED | SERIALIZABLE }
<title>Description</title> <title>Description</title>
<para> <para>
The <command>SET TRANSACTION</command> command sets the This command sets the transaction isolation level. The
characteristics for the current SQL-transaction. It has no effect <command>SET TRANSACTION</command> command sets the characteristics
on any subsequent transactions. This command cannot be used after for the current SQL-transaction. It has no effect on any subsequent
the first DML statement (<command>SELECT</command>, transactions. This command cannot be used after the first DML
<command>INSERT</command>, <command>DELETE</command>, statement (<command>SELECT</command>, <command>INSERT</command>,
<command>UPDATE</command>, <command>FETCH</command>, <command>DELETE</command>, <command>UPDATE</command>,
<command>COPY</command>) of a transaction has been executed. <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>
<para> <para>
...@@ -83,7 +91,7 @@ SET TRANSACTION ISOLATION LEVEL { READ COMMITTED | SERIALIZABLE } ...@@ -83,7 +91,7 @@ SET TRANSACTION ISOLATION LEVEL { READ COMMITTED | SERIALIZABLE }
<para> <para>
In <acronym>SQL</acronym> there are two other transaction 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. transaction is read-only and the size of the diagnostics area.
Neither of these concepts are supported in Postgres. Neither of these concepts are supported in Postgres.
</para> </para>
......
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
* Portions Copyright (c) 1994, Regents of the University of California * Portions Copyright (c) 1994, Regents of the University of California
* *
* IDENTIFICATION * 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) ...@@ -2513,16 +2513,6 @@ _copyReindexStmt(ReindexStmt *from)
return newnode; return newnode;
} }
static SetSessionStmt *
_copySetSessionStmt(SetSessionStmt *from)
{
SetSessionStmt *newnode = makeNode(SetSessionStmt);
Node_Copy(from, newnode, args);
return newnode;
}
/* **************************************************************** /* ****************************************************************
* pg_list.h copy functions * pg_list.h copy functions
...@@ -2922,9 +2912,6 @@ copyObject(void *from) ...@@ -2922,9 +2912,6 @@ copyObject(void *from)
case T_ReindexStmt: case T_ReindexStmt:
retval = _copyReindexStmt(from); retval = _copyReindexStmt(from);
break; break;
case T_SetSessionStmt:
retval = _copySetSessionStmt(from);
break;
case T_CheckPointStmt: case T_CheckPointStmt:
retval = (void*)makeNode(CheckPointStmt); retval = (void*)makeNode(CheckPointStmt);
break; break;
......
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
* Portions Copyright (c) 1994, Regents of the University of California * Portions Copyright (c) 1994, Regents of the University of California
* *
* IDENTIFICATION * 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) ...@@ -1363,15 +1363,6 @@ _equalReindexStmt(ReindexStmt *a, ReindexStmt *b)
return true; return true;
} }
static bool
_equalSetSessionStmt(SetSessionStmt *a, SetSessionStmt *b)
{
if (!equal(a->args, b->args))
return false;
return true;
}
static bool static bool
_equalAExpr(A_Expr *a, A_Expr *b) _equalAExpr(A_Expr *a, A_Expr *b)
{ {
...@@ -2037,9 +2028,6 @@ equal(void *a, void *b) ...@@ -2037,9 +2028,6 @@ equal(void *a, void *b)
case T_ReindexStmt: case T_ReindexStmt:
retval = _equalReindexStmt(a, b); retval = _equalReindexStmt(a, b);
break; break;
case T_SetSessionStmt:
retval = _equalSetSessionStmt(a, b);
break;
case T_CheckPointStmt: case T_CheckPointStmt:
retval = true; retval = true;
break; break;
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
* Portions Copyright (c) 1996-2000, PostgreSQL, Inc * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
* Portions Copyright (c) 1994, Regents of the University of California * 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) ...@@ -208,38 +208,6 @@ transformStmt(ParseState *pstate, Node *parseTree)
result = transformAlterTableStmt(pstate, (AlterTableStmt *) parseTree); result = transformAlterTableStmt(pstate, (AlterTableStmt *) parseTree);
break; 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 * Optimizable statements
*------------------------ *------------------------
......
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
* *
* *
* IDENTIFICATION * 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 * HISTORY
* AUTHOR DATE MAJOR EVENT * AUTHOR DATE MAJOR EVENT
...@@ -134,15 +134,12 @@ static void doNegateFloat(Value *v); ...@@ -134,15 +134,12 @@ static void doNegateFloat(Value *v);
NotifyStmt, OptimizableStmt, ProcedureStmt, ReindexStmt, NotifyStmt, OptimizableStmt, ProcedureStmt, ReindexStmt,
RemoveAggrStmt, RemoveFuncStmt, RemoveOperStmt, RemoveAggrStmt, RemoveFuncStmt, RemoveOperStmt,
RenameStmt, RevokeStmt, RuleActionStmt, RuleActionStmtOrEmpty, RenameStmt, RevokeStmt, RuleActionStmt, RuleActionStmtOrEmpty,
RuleStmt, SelectStmt, SetSessionStmt, TransactionStmt, TruncateStmt, RuleStmt, SelectStmt, TransactionStmt, TruncateStmt,
UnlistenStmt, UpdateStmt, VacuumStmt, VariableResetStmt, UnlistenStmt, UpdateStmt, VacuumStmt, VariableResetStmt,
VariableSetStmt, VariableShowStmt, ViewStmt, CheckPointStmt VariableSetStmt, VariableShowStmt, ViewStmt, CheckPointStmt
%type <node> select_no_parens, select_clause, simple_select %type <node> select_no_parens, select_clause, simple_select
%type <list> SessionList
%type <node> SessionClause
%type <node> alter_column_action %type <node> alter_column_action
%type <ival> drop_behavior %type <ival> drop_behavior
...@@ -459,7 +456,6 @@ stmt : AlterSchemaStmt ...@@ -459,7 +456,6 @@ stmt : AlterSchemaStmt
| RevokeStmt | RevokeStmt
| OptimizableStmt | OptimizableStmt
| RuleStmt | RuleStmt
| SetSessionStmt
| TransactionStmt | TransactionStmt
| ViewStmt | ViewStmt
| LoadStmt | LoadStmt
...@@ -706,55 +702,6 @@ DropSchemaStmt: DROP SCHEMA UserId ...@@ -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 * Set PG internal variable
...@@ -792,6 +739,13 @@ VariableSetStmt: SET ColId TO var_value ...@@ -792,6 +739,13 @@ VariableSetStmt: SET ColId TO var_value
n->value = $5; n->value = $5;
$$ = (Node *) n; $$ = (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 | SET NAMES opt_encoding
{ {
VariableSetStmt *n = makeNode(VariableSetStmt); VariableSetStmt *n = makeNode(VariableSetStmt);
...@@ -5444,6 +5398,7 @@ TokenId: ABSOLUTE { $$ = "absolute"; } ...@@ -5444,6 +5398,7 @@ TokenId: ABSOLUTE { $$ = "absolute"; }
| CACHE { $$ = "cache"; } | CACHE { $$ = "cache"; }
| CASCADE { $$ = "cascade"; } | CASCADE { $$ = "cascade"; }
| CHAIN { $$ = "chain"; } | CHAIN { $$ = "chain"; }
| CHARACTERISTICS { $$ = "characteristics"; }
| CHECKPOINT { $$ = "checkpoint"; } | CHECKPOINT { $$ = "checkpoint"; }
| CLOSE { $$ = "close"; } | CLOSE { $$ = "close"; }
| COMMENT { $$ = "comment"; } | COMMENT { $$ = "comment"; }
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* Portions Copyright (c) 1996-2000, PostgreSQL, Inc * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
* Portions Copyright (c) 1994, Regents of the University of California * 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 ...@@ -202,7 +202,6 @@ typedef enum NodeTag
T_AlterGroupStmt, T_AlterGroupStmt,
T_DropGroupStmt, T_DropGroupStmt,
T_ReindexStmt, T_ReindexStmt,
T_SetSessionStmt,
T_CheckPointStmt, T_CheckPointStmt,
T_A_Expr = 700, T_A_Expr = 700,
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* Portions Copyright (c) 1996-2000, PostgreSQL, Inc * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
* Portions Copyright (c) 1994, Regents of the University of California * 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 ...@@ -697,15 +697,9 @@ typedef struct ExplainStmt
} ExplainStmt; } ExplainStmt;
/* ---------------------- /* ----------------------
* Set Session Statement * Checkpoint Statement
* ---------------------- * ----------------------
*/ */
typedef struct SetSessionStmt
{
NodeTag type;
List *args;
} SetSessionStmt;
typedef struct CheckPointStmt typedef struct CheckPointStmt
{ {
NodeTag type; NodeTag type;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册