Index: doc/src/sgml/ref/create_sequence.sgml
===================================================================
RCS file: /var/lib/cvs/pgsql-server/doc/src/sgml/ref/create_sequence.sgml,v
retrieving revision 1.28
diff -c -r1.28 create_sequence.sgml
*** doc/src/sgml/ref/create_sequence.sgml	18 May 2002 15:44:47 -0000	1.28
--- doc/src/sgml/ref/create_sequence.sgml	28 Sep 2002 01:31:36 -0000
***************
*** 21,29 ****
     <date>1999-07-20</date>
    </refsynopsisdivinfo>
    <synopsis>
! CREATE [ TEMPORARY | TEMP ] SEQUENCE <replaceable class="parameter">seqname</replaceable> [ INCREMENT <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 ]
    </synopsis>
    
    <refsect2 id="R2-SQL-CREATESEQUENCE-1">
--- 21,29 ----
     <date>1999-07-20</date>
    </refsynopsisdivinfo>
    <synopsis>
! 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 [ WITH ] <replaceable class="parameter">start</replaceable> ] [ CACHE <replaceable class="parameter">cache</replaceable> ] [ [ NO ] CYCLE ]
    </synopsis>
    
    <refsect2 id="R2-SQL-CREATESEQUENCE-1">
***************
*** 130,137 ****
        <term>CYCLE</term>
        <listitem>
         <para>
! 	The optional CYCLE 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
--- 130,137 ----
        <term>CYCLE</term>
        <listitem>
         <para>
! 	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,150 ****
  	<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>
      </variablelist>
     </para>
    </refsect2>
--- 140,161 ----
  	<replaceable class="parameter">minvalue</replaceable> or
  	<replaceable class="parameter">maxvalue</replaceable>,
  	respectively.
         </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>
Index: src/backend/commands/sequence.c
===================================================================
RCS file: /var/lib/cvs/pgsql-server/src/backend/commands/sequence.c,v
retrieving revision 1.88
diff -c -r1.88 sequence.c
*** src/backend/commands/sequence.c	22 Sep 2002 19:42:50 -0000	1.88
--- src/backend/commands/sequence.c	28 Sep 2002 01:10:18 -0000
***************
*** 798,808 ****
  		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;
! 		}
  		else
  			elog(ERROR, "DefineSequence: option \"%s\" not recognized",
  				 defel->defname);
--- 798,804 ----
  		else if (strcmp(defel->defname, "cache") == 0)
  			cache_value = defel;
  		else if (strcmp(defel->defname, "cycle") == 0)
! 			new->is_cycled = (defel->arg != NULL);
  		else
  			elog(ERROR, "DefineSequence: option \"%s\" not recognized",
  				 defel->defname);
Index: src/backend/parser/gram.y
===================================================================
RCS file: /var/lib/cvs/pgsql-server/src/backend/parser/gram.y,v
retrieving revision 2.370
diff -c -r2.370 gram.y
*** src/backend/parser/gram.y	22 Sep 2002 21:44:43 -0000	2.370
--- src/backend/parser/gram.y	28 Sep 2002 01:29:35 -0000
***************
*** 1883,1893 ****
  				}
  			| CYCLE
  				{
! 					$$ = makeDefElem("cycle", (Node *)NULL);
  				}
! 			| INCREMENT NumericOnly
  				{
! 					$$ = makeDefElem("increment", (Node *)$2);
  				}
  			| MAXVALUE NumericOnly
  				{
--- 1883,1897 ----
  				}
  			| CYCLE
  				{
! 					$$ = makeDefElem("cycle", (Node *)true);
  				}
! 			| NO CYCLE
  				{
! 					$$ = makeDefElem("cycle", (Node *)false);
! 				}
! 			| INCREMENT opt_by NumericOnly
! 				{
! 					$$ = makeDefElem("increment", (Node *)$3);
  				}
  			| MAXVALUE NumericOnly
  				{
***************
*** 1897,1907 ****
  				{
  					$$ = makeDefElem("minvalue", (Node *)$2);
  				}
! 			| START NumericOnly
  				{
! 					$$ = makeDefElem("start", (Node *)$2);
  				}
  		;
  
  NumericOnly:
  			FloatOnly								{ $$ = $1; }
--- 1901,1915 ----
  				{
  					$$ = makeDefElem("minvalue", (Node *)$2);
  				}
! 			| START opt_with NumericOnly
  				{
! 					$$ = makeDefElem("start", (Node *)$3);
  				}
  		;
+ 
+ opt_by:		BY				{}
+ 			| /* empty */	{}
+ 	  ;
  
  NumericOnly:
  			FloatOnly								{ $$ = $1; }
