db-derby-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Danoja Dias (JIRA)" <j...@apache.org>
Subject [jira] [Updated] (DERBY-6852) Allow identity columns to cycle (as defined in SQL:2003)
Date Sat, 02 Jul 2016 15:25:11 GMT

     [ https://issues.apache.org/jira/browse/DERBY-6852?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Danoja Dias updated DERBY-6852:
-------------------------------
    Attachment: derby-6852_1.diff

{quote}
1) Finding and changing the code where an IDENTITY column creates
an underlying SEQUENCE object, so that the code can create a
SEQUENCE with CYCLE option. Experimentally, we could make
this change automatic, just to prove that it works, and makes
the DERBY-6550 test case pass, but before commit we'd want to
make this code be driven by information passed from the compiler.
I think this is in CreateTableConstantAction

2) Changing the Derby SQL Grammar and parsing logic so that it
can recognize the CYCLE keyword in the CREATE TABLE statement,
and use the presence (or absence) of that keyword to control
the code that we worked on in the first step.

3) Writing various new test cases to test all the code we wrote in steps (1) and (2)

4) Updating the documentation to reflect the new feature.
{quote}

With this patch I tried to do the first part of the tasks above.
But not the duplicate value error. I found that it is implemented in IndexChanger.java  and
I'm trying to figure out how it works. Any help to figure this out will be helpful. 

> 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
>            Assignee: Danoja Dias
>         Attachments: derby-6852_1.diff
>
>
> 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)

Mime
View raw message