Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitf249daf

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 beendefined twice, and complain.Rod Taylor
1 parent6cb1f4f commitf249daf

File tree

2 files changed

+38
-4
lines changed

2 files changed

+38
-4
lines changed

‎src/backend/commands/sequence.c

Lines changed: 29 additions & 3 deletions
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+
boolis_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
elseif (strcmp(defel->defname,"start")==0)
799+
{
800+
if (last_value)
801+
elog(ERROR,"DefineSequence: LAST VALUE defined twice");
794802
last_value=defel;
803+
}
795804
elseif (strcmp(defel->defname,"maxvalue")==0)
805+
{
806+
if (max_value)
807+
elog(ERROR,"DefineSequence: MAX VALUE defined twice");
796808
max_value=defel;
809+
}
797810
elseif (strcmp(defel->defname,"minvalue")==0)
811+
{
812+
if (min_value)
813+
elog(ERROR,"DefineSequence: MIN VALUE defined twice");
798814
min_value=defel;
815+
}
799816
elseif (strcmp(defel->defname,"cache")==0)
817+
{
818+
if (cache_value)
819+
elog(ERROR,"DefineSequence: CACHE defined twice");
800820
cache_value=defel;
821+
}
801822
elseif (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
elseif ((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

Lines changed: 9 additions & 1 deletion
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
* AUTHORDATEMAJOR EVENT
@@ -1909,6 +1909,14 @@ OptSeqElem: CACHE NumericOnly
19091909
{
19101910
$$ = makeDefElem("minvalue", (Node *)$2);
19111911
}
1912+
|NOMAXVALUE
1913+
{
1914+
$$ = makeDefElem("maxvalue", (Node *)NULL);
1915+
}
1916+
|NOMINVALUE
1917+
{
1918+
$$ = makeDefElem("minvalue", (Node *)NULL);
1919+
}
19121920
|STARTopt_withNumericOnly
19131921
{
19141922
$$ = makeDefElem("start", (Node *)$3);

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp