1
0
mirror of https://github.com/postgres/postgres.git synced 2025-04-20 00:42:27 +03:00

Add TEMPORARY sequences and have SERIAL on a temp table have a temporary

sequence.
This commit is contained in:
Bruce Momjian 2001-06-23 00:07:34 +00:00
parent 280b5f4be6
commit a0c12d5e90
6 changed files with 29 additions and 12 deletions

View File

@ -1,5 +1,5 @@
<!-- <!--
$Header: /cvsroot/pgsql/doc/src/sgml/ref/create_sequence.sgml,v 1.15 2000/12/08 20:06:58 tgl Exp $ $Header: /cvsroot/pgsql/doc/src/sgml/ref/create_sequence.sgml,v 1.16 2001/06/23 00:07:33 momjian Exp $
Postgres documentation Postgres documentation
--> -->
@ -23,7 +23,7 @@ Postgres documentation
<date>1999-07-20</date> <date>1999-07-20</date>
</refsynopsisdivinfo> </refsynopsisdivinfo>
<synopsis> <synopsis>
CREATE SEQUENCE <replaceable class="parameter">seqname</replaceable> [ INCREMENT <replaceable class="parameter">increment</replaceable> ] CREATE [ TEMPORARY | TEMP ] SEQUENCE <replaceable class="parameter">seqname</replaceable> [ INCREMENT <replaceable class="parameter">increment</replaceable> ]
[ MINVALUE <replaceable class="parameter">minvalue</replaceable> ] [ MAXVALUE <replaceable class="parameter">maxvalue</replaceable> ] [ MINVALUE <replaceable class="parameter">minvalue</replaceable> ] [ MAXVALUE <replaceable class="parameter">maxvalue</replaceable> ]
[ START <replaceable class="parameter">start</replaceable> ] [ CACHE <replaceable class="parameter">cache</replaceable> ] [ CYCLE ] [ START <replaceable class="parameter">start</replaceable> ] [ CACHE <replaceable class="parameter">cache</replaceable> ] [ CYCLE ]
</synopsis> </synopsis>
@ -37,6 +37,19 @@ CREATE SEQUENCE <replaceable class="parameter">seqname</replaceable> [ INCREMENT
</title> </title>
<para> <para>
<variablelist>
<varlistentry>
<term>TEMPORARY or TEMP</term>
<listitem>
<para>
If specified, the sequence is created only for this session, and is
automatically dropped on session exit.
Existing permanent sequences with the same name are not visible
(in this session) while the temporary sequence exists.
</para>
</listitem>
</varlistentry>
<variablelist> <variablelist>
<varlistentry> <varlistentry>
<term><replaceable class="parameter">seqname</replaceable></term> <term><replaceable class="parameter">seqname</replaceable></term>

View File

@ -8,7 +8,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/commands/sequence.c,v 1.59 2001/06/13 21:07:12 momjian Exp $ * $Header: /cvsroot/pgsql/src/backend/commands/sequence.c,v 1.60 2001/06/23 00:07:34 momjian Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
@ -161,6 +161,7 @@ DefineSequence(CreateSeqStmt *seq)
} }
stmt->relname = seq->seqname; stmt->relname = seq->seqname;
stmt->istemp = seq->istemp;
stmt->inhRelnames = NIL; stmt->inhRelnames = NIL;
stmt->constraints = NIL; stmt->constraints = NIL;

View File

@ -6,7 +6,7 @@
* Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group * Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California * Portions Copyright (c) 1994, Regents of the University of California
* *
* $Header: /cvsroot/pgsql/src/backend/parser/analyze.c,v 1.189 2001/06/04 23:27:23 momjian Exp $ * $Header: /cvsroot/pgsql/src/backend/parser/analyze.c,v 1.190 2001/06/23 00:07:34 momjian Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
@ -779,6 +779,7 @@ transformCreateStmt(ParseState *pstate, CreateStmt *stmt)
sequence = makeNode(CreateSeqStmt); sequence = makeNode(CreateSeqStmt);
sequence->seqname = pstrdup(sname); sequence->seqname = pstrdup(sname);
sequence->istemp = stmt->istemp;
sequence->options = NIL; sequence->options = NIL;
elog(NOTICE, "CREATE TABLE will create implicit sequence '%s' for SERIAL column '%s.%s'", elog(NOTICE, "CREATE TABLE will create implicit sequence '%s' for SERIAL column '%s.%s'",
@ -2716,7 +2717,7 @@ transformAlterTableStmt(ParseState *pstate, AlterTableStmt *stmt)
return qry; return qry;
} }
/* /*
* Transform uses of %TYPE in a statement. * Transform uses of %TYPE in a statement.
*/ */
static Node * static Node *

View File

@ -11,7 +11,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.231 2001/06/19 22:39:11 tgl Exp $ * $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.232 2001/06/23 00:07:34 momjian Exp $
* *
* HISTORY * HISTORY
* AUTHOR DATE MAJOR EVENT * AUTHOR DATE MAJOR EVENT
@ -1574,11 +1574,12 @@ CreateAsElement: ColId
* *
*****************************************************************************/ *****************************************************************************/
CreateSeqStmt: CREATE SEQUENCE relation_name OptSeqList CreateSeqStmt: CREATE OptTemp SEQUENCE relation_name OptSeqList
{ {
CreateSeqStmt *n = makeNode(CreateSeqStmt); CreateSeqStmt *n = makeNode(CreateSeqStmt);
n->seqname = $3; n->istemp = $2;
n->options = $4; n->seqname = $4;
n->options = $5;
$$ = (Node *)n; $$ = (Node *)n;
} }
; ;

View File

@ -7,7 +7,7 @@
* Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group * Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
* 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.132 2001/06/19 22:39:12 tgl Exp $ * $Id: parsenodes.h,v 1.133 2001/06/23 00:07:34 momjian Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
@ -402,6 +402,7 @@ typedef struct CreateSeqStmt
{ {
NodeTag type; NodeTag type;
char *seqname; /* the relation to create */ char *seqname; /* the relation to create */
bool istemp; /* is this a temp sequence? */
List *options; List *options;
} CreateSeqStmt; } CreateSeqStmt;

View File

@ -1289,9 +1289,9 @@ CreateAsElement: ColId { $$ = $1; }
* *
*****************************************************************************/ *****************************************************************************/
CreateSeqStmt: CREATE SEQUENCE relation_name OptSeqList CreateSeqStmt: CREATE OptTemp SEQUENCE relation_name OptSeqList
{ {
$$ = cat_str(3, make_str("create sequence"), $3, $4); $$ = cat_str(4, make_str("create sequence"), $2, $4, $5);
} }
; ;