Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit f249daf

Browse files
committed
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
1 parent 6cb1f4f commit f249daf

File tree

2 files changed

+38
-4
lines changed

2 files changed

+38
-4
lines changed

src/backend/commands/sequence.c

+29-3
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
*
99
*
1010
* IDENTIFICATION
11-
* $Header: /cvsroot/pgsql/src/backend/commands/sequence.c,v 1.90 2002/11/11 22:19:21 tgl Exp $
11+
* $Header: /cvsroot/pgsql/src/backend/commands/sequence.c,v 1.91 2003/02/13 05:25:24 momjian Exp $
1212
*
1313
*-------------------------------------------------------------------------
1414
*/
@@ -781,6 +781,7 @@ init_params(CreateSeqStmt *seq, Form_pg_sequence new)
781781
DefElem *max_value = NULL;
782782
DefElem *min_value = NULL;
783783
DefElem *cache_value = NULL;
784+
bool is_cycled_set = false;
784785
List *option;
785786

786787
new->is_cycled = false;
@@ -789,17 +790,42 @@ init_params(CreateSeqStmt *seq, Form_pg_sequence new)
789790
DefElem *defel = (DefElem *) lfirst(option);
790791

791792
if (strcmp(defel->defname, "increment") == 0)
793+
{
794+
if (increment_by)
795+
elog(ERROR, "DefineSequence: INCREMENT BY defined twice");
792796
increment_by = defel;
797+
}
793798
else if (strcmp(defel->defname, "start") == 0)
799+
{
800+
if (last_value)
801+
elog(ERROR, "DefineSequence: LAST VALUE defined twice");
794802
last_value = defel;
803+
}
795804
else if (strcmp(defel->defname, "maxvalue") == 0)
805+
{
806+
if (max_value)
807+
elog(ERROR, "DefineSequence: MAX VALUE defined twice");
796808
max_value = defel;
809+
}
797810
else if (strcmp(defel->defname, "minvalue") == 0)
811+
{
812+
if (min_value)
813+
elog(ERROR, "DefineSequence: MIN VALUE defined twice");
798814
min_value = defel;
815+
}
799816
else if (strcmp(defel->defname, "cache") == 0)
817+
{
818+
if (cache_value)
819+
elog(ERROR, "DefineSequence: CACHE defined twice");
800820
cache_value = defel;
821+
}
801822
else if (strcmp(defel->defname, "cycle") == 0)
823+
{
824+
if (is_cycled_set)
825+
elog(ERROR, "DefineSequence: CYCLE defined twice");
826+
is_cycled_set = true;
802827
new->is_cycled = (defel->arg != NULL);
828+
}
803829
else
804830
elog(ERROR, "DefineSequence: option \"%s\" not recognized",
805831
defel->defname);
@@ -810,7 +836,7 @@ init_params(CreateSeqStmt *seq, Form_pg_sequence new)
810836
else if ((new->increment_by = defGetInt64(increment_by)) == 0)
811837
elog(ERROR, "DefineSequence: can't INCREMENT by 0");
812838

813-
if (max_value == (DefElem *) NULL) /* MAXVALUE */
839+
if (max_value == (DefElem *) NULL || !max_value->arg) /* MAXVALUE */
814840
{
815841
if (new->increment_by > 0)
816842
new->max_value = SEQ_MAXVALUE; /* ascending seq */
@@ -820,7 +846,7 @@ init_params(CreateSeqStmt *seq, Form_pg_sequence new)
820846
else
821847
new->max_value = defGetInt64(max_value);
822848

823-
if (min_value == (DefElem *) NULL) /* MINVALUE */
849+
if (min_value == (DefElem *) NULL || !min_value->arg) /* MINVALUE */
824850
{
825851
if (new->increment_by > 0)
826852
new->min_value = 1; /* ascending seq */

src/backend/parser/gram.y

+9-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
*
1212
*
1313
* IDENTIFICATION
14-
* $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.402 2003/02/13 05:19:59 momjian Exp $
14+
* $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.403 2003/02/13 05:25:24 momjian Exp $
1515
*
1616
* HISTORY
1717
* AUTHOR DATE MAJOR EVENT
@@ -1909,6 +1909,14 @@ OptSeqElem: CACHE NumericOnly
19091909
{
19101910
$$ = makeDefElem("minvalue", (Node *)$2);
19111911
}
1912+
| NO MAXVALUE
1913+
{
1914+
$$ = makeDefElem("maxvalue", (Node *)NULL);
1915+
}
1916+
| NO MINVALUE
1917+
{
1918+
$$ = makeDefElem("minvalue", (Node *)NULL);
1919+
}
19121920
| START opt_with NumericOnly
19131921
{
19141922
$$ = makeDefElem("start", (Node *)$3);

0 commit comments

Comments
 (0)