[
https://issues.apache.org/jira/browse/DERBY-6545?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Rick Hillegas resolved DERBY-6545.
----------------------------------
Resolution: Fixed
I believe that this issue is fixed. Resolving so that the detailed release note
will turn up in the 10.11 release notes.
> Should not be able to add a default to an identity column
> ---------------------------------------------------------
>
> Key: DERBY-6545
> URL: https://issues.apache.org/jira/browse/DERBY-6545
> Project: Derby
> Issue Type: Bug
> Components: SQL
> Reporter: Rick Hillegas
> Assignee: Rick Hillegas
> Fix For: 10.11.0.0
>
> Attachments: derby-6545-01-aa-forbidDefaultOnIdentityColumn.diff,
> releaseNote.html
>
>
> According to the 2011 edition of the SQL Standard, the only alterations
> allowed on identity columns are the following:
> 1) changing the identity properties of the column
> 2) causing the column to cease to be an identity column
> This is described in part 2, section 11.2 (alter column definition), syntax
> rule 6. However, Derby allows you to add a default to an identity column.
> It's clear from the CREATE TABLE syntax that a column can't both have a
> default and be an identity column. A side-effect of using ALTER TABLE to add
> a default to an identity column is this: the column ceases to be an identity
> column. The following script output shows this Derby behavior:
> {noformat}
> ij version 10.11
> ij> connect 'jdbc:derby:memory:db;create=true';
> ij> create table t1_01
> (
> a int generated always as identity ( start with 10, increment by 20 ),
> b int
> );
> 0 rows inserted/updated/deleted
> ij> -- should not succeed but does
> alter table t1_01 alter column a default 99;
> 0 rows inserted/updated/deleted
> ij> mainline (1.8) > runsql zzz
> ij version 10.11
> ij> connect 'jdbc:derby:memory:db;create=true';
> ij> create table t1_01
> (
> a int generated always as identity ( start with 10, increment by 20 )
> );
> 0 rows inserted/updated/deleted
> ij> select c.autoincrementvalue, c.autoincrementstart, c.autoincrementinc,
> c.columndefault
> from sys.syscolumns c, sys.systables t
> where c.referenceid = t.tableid
> and t.tablename = 'T1_01';
> AUTOINCREMENTVALUE |AUTOINCREMENTSTART |AUTOINCREMENTINC |COLUMNDEFAULT
> ------------------------------------------------------------------------------
> 10 |10 |20 |NULL
> 1 row selected
> ij> -- should not succeed but does
> alter table t1_01 alter column a default 99;
> 0 rows inserted/updated/deleted
> ij> select c.autoincrementvalue, c.autoincrementstart, c.autoincrementinc,
> c.columndefault
> from sys.syscolumns c, sys.systables t
> where c.referenceid = t.tableid
> and t.tablename = 'T1_01';
> AUTOINCREMENTVALUE |AUTOINCREMENTSTART |AUTOINCREMENTINC |COLUMNDEFAULT
> ------------------------------------------------------------------------------
> NULL |NULL |NULL |99
> 1 row selected
> {noformat}
> Fixing this deviation from the Standard will create a backward
> incompatibility. However, it is hard to imagine that any production
> application relies on this deviation. This is the sort of schema evolution
> which one tests out in the laboratory or resorts to during an application
> upgrade. A judicious use of RENAME COLUMN and ALTER TABLE should provide a
> usable workaround.
> For that reason, I think that we should correct this deviation.
--
This message was sent by Atlassian JIRA
(v6.2#6252)