8
8
*
9
9
*
10
10
* 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 $
12
12
*
13
13
*-------------------------------------------------------------------------
14
14
*/
@@ -781,6 +781,7 @@ init_params(CreateSeqStmt *seq, Form_pg_sequence new)
781
781
DefElem * max_value = NULL ;
782
782
DefElem * min_value = NULL ;
783
783
DefElem * cache_value = NULL ;
784
+ bool is_cycled_set = false;
784
785
List * option ;
785
786
786
787
new -> is_cycled = false;
@@ -789,17 +790,42 @@ init_params(CreateSeqStmt *seq, Form_pg_sequence new)
789
790
DefElem * defel = (DefElem * ) lfirst (option );
790
791
791
792
if (strcmp (defel -> defname , "increment" ) == 0 )
793
+ {
794
+ if (increment_by )
795
+ elog (ERROR , "DefineSequence: INCREMENT BY defined twice" );
792
796
increment_by = defel ;
797
+ }
793
798
else if (strcmp (defel -> defname , "start" ) == 0 )
799
+ {
800
+ if (last_value )
801
+ elog (ERROR , "DefineSequence: LAST VALUE defined twice" );
794
802
last_value = defel ;
803
+ }
795
804
else if (strcmp (defel -> defname , "maxvalue" ) == 0 )
805
+ {
806
+ if (max_value )
807
+ elog (ERROR , "DefineSequence: MAX VALUE defined twice" );
796
808
max_value = defel ;
809
+ }
797
810
else if (strcmp (defel -> defname , "minvalue" ) == 0 )
811
+ {
812
+ if (min_value )
813
+ elog (ERROR , "DefineSequence: MIN VALUE defined twice" );
798
814
min_value = defel ;
815
+ }
799
816
else if (strcmp (defel -> defname , "cache" ) == 0 )
817
+ {
818
+ if (cache_value )
819
+ elog (ERROR , "DefineSequence: CACHE defined twice" );
800
820
cache_value = defel ;
821
+ }
801
822
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;
802
827
new -> is_cycled = (defel -> arg != NULL );
828
+ }
803
829
else
804
830
elog (ERROR , "DefineSequence: option \"%s\" not recognized" ,
805
831
defel -> defname );
@@ -810,7 +836,7 @@ init_params(CreateSeqStmt *seq, Form_pg_sequence new)
810
836
else if ((new -> increment_by = defGetInt64 (increment_by )) == 0 )
811
837
elog (ERROR , "DefineSequence: can't INCREMENT by 0" );
812
838
813
- if (max_value == (DefElem * ) NULL ) /* MAXVALUE */
839
+ if (max_value == (DefElem * ) NULL || ! max_value -> arg ) /* MAXVALUE */
814
840
{
815
841
if (new -> increment_by > 0 )
816
842
new -> max_value = SEQ_MAXVALUE ; /* ascending seq */
@@ -820,7 +846,7 @@ init_params(CreateSeqStmt *seq, Form_pg_sequence new)
820
846
else
821
847
new -> max_value = defGetInt64 (max_value );
822
848
823
- if (min_value == (DefElem * ) NULL ) /* MINVALUE */
849
+ if (min_value == (DefElem * ) NULL || ! min_value -> arg ) /* MINVALUE */
824
850
{
825
851
if (new -> increment_by > 0 )
826
852
new -> min_value = 1 ; /* ascending seq */
0 commit comments