[ 
https://issues.apache.org/jira/browse/DERBY-6852?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15331246#comment-15331246
 ] 

Danoja Dias edited comment on DERBY-6852 at 6/15/16 7:03 AM:
-------------------------------------------------------------

I looked in to the code and then I found in sequenceGenerator.java this feature 
is already implemented there. 

if ( overflowed( _currentValue, nextValue ) )
        {
            // Take this generator offline if we've wrapped around but cycling 
really isn't allowed.
            if ( !_CAN_CYCLE )
            {
                markExhausted( retval );
                return;
            }

            // Otherwise, cycling is allowed.
            nextValue = _RESTART_VALUE;
        }

I need to find how  _CAN_CYCLE  variable changes. Here  if cycling is allowed, 
nextValue is _RESTART_VALUE that is the value we give to start the identity 
column when table is created. 
I think it must be the minimum value to start, not the value we give when table 
is created. 



was (Author: dnj):
I looked in to the code and then I found in sequenceGenerator.java this feature 
is already implemented there. 

if ( overflowed( _currentValue, nextValue ) )
        {
            // Take this generator offline if we've wrapped around but cycling 
really isn't allowed.
            if ( !_CAN_CYCLE )
            {
                markExhausted( retval );
                return;
            }

            // Otherwise, cycling is allowed.
            nextValue = _RESTART_VALUE;
        }

I need to find how  _CAN_CYCLE  variable changes. Here  if cycling is allowed, 
nextValue is _RESTART_VALUE that is the value we give to start the identity 
column. 
I think it must be the minimum value to start.


> Allow identity columns to cycle (as defined in SQL:2003)
> --------------------------------------------------------
>
>                 Key: DERBY-6852
>                 URL: https://issues.apache.org/jira/browse/DERBY-6852
>             Project: Derby
>          Issue Type: Improvement
>          Components: SQL
>            Reporter: Peter Hansson
>
> Currently when an IDENTITY column reaches its maximum value it will produce 
> an error.
> For tables that are used as 'transaction logs' or 'event logs' it often makes 
> sense to let the table automatically start over with the first identity value 
> again when the max is reached. This would be similar to the CYCLE option on 
> Oracle's SEQUENCE and as defined in SQL:2003. And Derby is probably used 
> quite often for this purpose, I guess, perhaps even more than other RDBMSs.
> At the moment every developer have to program their own logic for this.
> I propose to introduce the CYCLE option.
> The idea of CYCLE is based on the assumption that there's been a prior 
> cleanup in the table rows so that it will be possible to re-use ids that have 
> been used previously. If that is not the case - and a rollover happens - then 
> a duplicate value error will occur. In this sense it can be argued that the 
> CYCLE option will trade a _certain_ error for a _potential_ error. Most Derby 
> users would possibly gladly accept such a bargain. In other words: This 
> option will greatly enhance the usability of IDENTITY columns.
> The current implementation of IDENTITY columns SQL grammar in Derby is a 
> subset of the SQL:2003 standard which is the first of the SQL standards to 
> define IDENTITY columns. Interestingly the standard also defines the CYCLE 
> option but this was never implemented in Derby. Also see [SQL-99 and SQL-2003 
> features mapped to Derby|https://wiki.apache.org/db-derby/SQLvsDerbyFeatures] 
> (scroll to T174).
> In other words: The proposal is simply to implement CYCLE as defined in 
> SQL:2003.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to