Commit f249daf9 authored by Bruce Momjian's avatar Bruce Momjian

Adds in NO MAXVALUE and NO MINVALUE options for create sequence per 200X

spec, which will also make alter sequence a touch easier.

sequence.c  init_params() will check for settings which have been
defined twice, and complain.

Rod Taylor
parent 6cb1f4fe
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/commands/sequence.c,v 1.90 2002/11/11 22:19:21 tgl Exp $ * $Header: /cvsroot/pgsql/src/backend/commands/sequence.c,v 1.91 2003/02/13 05:25:24 momjian Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -781,6 +781,7 @@ init_params(CreateSeqStmt *seq, Form_pg_sequence new) ...@@ -781,6 +781,7 @@ init_params(CreateSeqStmt *seq, Form_pg_sequence new)
DefElem *max_value = NULL; DefElem *max_value = NULL;
DefElem *min_value = NULL; DefElem *min_value = NULL;
DefElem *cache_value = NULL; DefElem *cache_value = NULL;
bool is_cycled_set = false;
List *option; List *option;
new->is_cycled = false; new->is_cycled = false;
...@@ -789,17 +790,42 @@ init_params(CreateSeqStmt *seq, Form_pg_sequence new) ...@@ -789,17 +790,42 @@ init_params(CreateSeqStmt *seq, Form_pg_sequence new)
DefElem *defel = (DefElem *) lfirst(option); DefElem *defel = (DefElem *) lfirst(option);
if (strcmp(defel->defname, "increment") == 0) if (strcmp(defel->defname, "increment") == 0)
{
if (increment_by)
elog(ERROR, "DefineSequence: INCREMENT BY defined twice");
increment_by = defel; increment_by = defel;
}
else if (strcmp(defel->defname, "start") == 0) else if (strcmp(defel->defname, "start") == 0)
{
if (last_value)
elog(ERROR, "DefineSequence: LAST VALUE defined twice");
last_value = defel; last_value = defel;
}
else if (strcmp(defel->defname, "maxvalue") == 0) else if (strcmp(defel->defname, "maxvalue") == 0)
{
if (max_value)
elog(ERROR, "DefineSequence: MAX VALUE defined twice");
max_value = defel; max_value = defel;
}
else if (strcmp(defel->defname, "minvalue") == 0) else if (strcmp(defel->defname, "minvalue") == 0)
{
if (min_value)
elog(ERROR, "DefineSequence: MIN VALUE defined twice");
min_value = defel; min_value = defel;
}
else if (strcmp(defel->defname, "cache") == 0) else if (strcmp(defel->defname, "cache") == 0)
{
if (cache_value)
elog(ERROR, "DefineSequence: CACHE defined twice");
cache_value = defel; cache_value = defel;
}
else if (strcmp(defel->defname, "cycle") == 0) else if (strcmp(defel->defname, "cycle") == 0)
{
if (is_cycled_set)
elog(ERROR, "DefineSequence: CYCLE defined twice");
is_cycled_set = true;
new->is_cycled = (defel->arg != NULL); new->is_cycled = (defel->arg != NULL);
}
else else
elog(ERROR, "DefineSequence: option \"%s\" not recognized", elog(ERROR, "DefineSequence: option \"%s\" not recognized",
defel->defname); defel->defname);
...@@ -810,7 +836,7 @@ init_params(CreateSeqStmt *seq, Form_pg_sequence new) ...@@ -810,7 +836,7 @@ init_params(CreateSeqStmt *seq, Form_pg_sequence new)
else if ((new->increment_by = defGetInt64(increment_by)) == 0) else if ((new->increment_by = defGetInt64(increment_by)) == 0)
elog(ERROR, "DefineSequence: can't INCREMENT by 0"); elog(ERROR, "DefineSequence: can't INCREMENT by 0");
if (max_value == (DefElem *) NULL) /* MAXVALUE */ if (max_value == (DefElem *) NULL || !max_value->arg) /* MAXVALUE */
{ {
if (new->increment_by > 0) if (new->increment_by > 0)
new->max_value = SEQ_MAXVALUE; /* ascending seq */ new->max_value = SEQ_MAXVALUE; /* ascending seq */
...@@ -820,7 +846,7 @@ init_params(CreateSeqStmt *seq, Form_pg_sequence new) ...@@ -820,7 +846,7 @@ init_params(CreateSeqStmt *seq, Form_pg_sequence new)
else else
new->max_value = defGetInt64(max_value); new->max_value = defGetInt64(max_value);
if (min_value == (DefElem *) NULL) /* MINVALUE */ if (min_value == (DefElem *) NULL || !min_value->arg) /* MINVALUE */
{ {
if (new->increment_by > 0) if (new->increment_by > 0)
new->min_value = 1; /* ascending seq */ new->min_value = 1; /* ascending seq */
......
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.402 2003/02/13 05:19:59 momjian Exp $ * $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.403 2003/02/13 05:25:24 momjian Exp $
* *
* HISTORY * HISTORY
* AUTHOR DATE MAJOR EVENT * AUTHOR DATE MAJOR EVENT
...@@ -1909,6 +1909,14 @@ OptSeqElem: CACHE NumericOnly ...@@ -1909,6 +1909,14 @@ OptSeqElem: CACHE NumericOnly
{ {
$$ = makeDefElem("minvalue", (Node *)$2); $$ = makeDefElem("minvalue", (Node *)$2);
} }
| NO MAXVALUE
{
$$ = makeDefElem("maxvalue", (Node *)NULL);
}
| NO MINVALUE
{
$$ = makeDefElem("minvalue", (Node *)NULL);
}
| START opt_with NumericOnly | START opt_with NumericOnly
{ {
$$ = makeDefElem("start", (Node *)$3); $$ = makeDefElem("start", (Node *)$3);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment