From 3eabc4490ecbf6b9845917811cf930af41aff845 Mon Sep 17 00:00:00 2001 From: Bruce Momjian <bruce@momjian.us> Date: Sun, 10 Nov 2002 00:10:20 +0000 Subject: [PATCH] Tweak CREATE SEQUENCE grammar to be more SQL1999 standards compliant. Neil Conway --- doc/src/sgml/ref/create_sequence.sgml | 25 ++++++++++++++++++------- src/backend/commands/sequence.c | 8 ++------ src/backend/parser/gram.y | 20 ++++++++++++++------ 3 files changed, 34 insertions(+), 19 deletions(-) diff --git a/doc/src/sgml/ref/create_sequence.sgml b/doc/src/sgml/ref/create_sequence.sgml index 3db79850c8a..4e36dfbe771 100644 --- a/doc/src/sgml/ref/create_sequence.sgml +++ b/doc/src/sgml/ref/create_sequence.sgml @@ -1,5 +1,5 @@ <!-- -$Header: /cvsroot/pgsql/doc/src/sgml/ref/create_sequence.sgml,v 1.28 2002/05/18 15:44:47 petere Exp $ +$Header: /cvsroot/pgsql/doc/src/sgml/ref/create_sequence.sgml,v 1.29 2002/11/10 00:10:20 momjian Exp $ PostgreSQL documentation --> @@ -21,9 +21,9 @@ PostgreSQL documentation <date>1999-07-20</date> </refsynopsisdivinfo> <synopsis> -CREATE [ TEMPORARY | TEMP ] SEQUENCE <replaceable class="parameter">seqname</replaceable> [ INCREMENT <replaceable class="parameter">increment</replaceable> ] +CREATE [ TEMPORARY | TEMP ] SEQUENCE <replaceable class="parameter">seqname</replaceable> [ INCREMENT [ BY ] <replaceable class="parameter">increment</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 [ WITH ] <replaceable class="parameter">start</replaceable> ] [ CACHE <replaceable class="parameter">cache</replaceable> ] [ [ NO ] CYCLE ] </synopsis> <refsect2 id="R2-SQL-CREATESEQUENCE-1"> @@ -130,8 +130,8 @@ CREATE [ TEMPORARY | TEMP ] SEQUENCE <replaceable class="parameter">seqname</rep <term>CYCLE</term> <listitem> <para> - The optional CYCLE keyword may be used to enable the sequence - to wrap around when the + The optional <option>CYCLE</option> keyword may be used to enable + the sequence to wrap around when the <replaceable class="parameter">maxvalue</replaceable> or <replaceable class="parameter">minvalue</replaceable> has been reached by @@ -140,11 +140,22 @@ CREATE [ TEMPORARY | TEMP ] SEQUENCE <replaceable class="parameter">seqname</rep <replaceable class="parameter">minvalue</replaceable> or <replaceable class="parameter">maxvalue</replaceable>, respectively. - Without CYCLE, after the limit is reached <function>nextval</> calls - will return an error. </para> </listitem> </varlistentry> + + <varlistentry> + <term>NO CYCLE</term> + <listitem> + <para> + If the optional <option>NO CYCLE</option> keyword is specified, any + calls to <function>nextval</function> after the sequence has reached + its maximum value will return an error. If neither + <option>CYCLE</option> or <option>NO CYCLE</option> are specified, + <option>NO CYCLE</option> is the default. + </para> + </listitem> + </varlistentry> </variablelist> </para> </refsect2> diff --git a/src/backend/commands/sequence.c b/src/backend/commands/sequence.c index f6ace0d2d93..31fb270c63e 100644 --- a/src/backend/commands/sequence.c +++ b/src/backend/commands/sequence.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/commands/sequence.c,v 1.88 2002/09/22 19:42:50 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/commands/sequence.c,v 1.89 2002/11/10 00:10:20 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -798,11 +798,7 @@ init_params(CreateSeqStmt *seq, Form_pg_sequence new) else if (strcmp(defel->defname, "cache") == 0) cache_value = defel; else if (strcmp(defel->defname, "cycle") == 0) - { - if (defel->arg != (Node *) NULL) - elog(ERROR, "DefineSequence: CYCLE ??"); - new->is_cycled = true; - } + new->is_cycled = (defel->arg != NULL); else elog(ERROR, "DefineSequence: option \"%s\" not recognized", defel->defname); diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y index 5fe83ac41db..1ce4cc1bfde 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.374 2002/11/09 23:56:39 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.375 2002/11/10 00:10:20 momjian Exp $ * * HISTORY * AUTHOR DATE MAJOR EVENT @@ -1893,11 +1893,15 @@ OptSeqElem: CACHE NumericOnly } | CYCLE { - $$ = makeDefElem("cycle", (Node *)NULL); + $$ = makeDefElem("cycle", (Node *)true); } - | INCREMENT NumericOnly + | NO CYCLE { - $$ = makeDefElem("increment", (Node *)$2); + $$ = makeDefElem("cycle", (Node *)false); + } + | INCREMENT opt_by NumericOnly + { + $$ = makeDefElem("increment", (Node *)$3); } | MAXVALUE NumericOnly { @@ -1907,12 +1911,16 @@ OptSeqElem: CACHE NumericOnly { $$ = makeDefElem("minvalue", (Node *)$2); } - | START NumericOnly + | START opt_with NumericOnly { - $$ = makeDefElem("start", (Node *)$2); + $$ = makeDefElem("start", (Node *)$3); } ; +opt_by: BY {} + | /* empty */ {} + ; + NumericOnly: FloatOnly { $$ = $1; } | IntegerOnly { $$ = $1; } -- GitLab