[
https://issues.apache.org/jira/browse/DERBY-4677?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12875310#action_12875310
]
Mamta A. Satoor commented on DERBY-4677:
----------------------------------------
For compress table, code in AlterTableConstantAction kicks in to drop and
recreate the indexes. When recreating the indexes, we forgot to take into
account the property "uniqueWithDuplicateNulls" when asking store to recreate
the index. For a new nullable index, CreateIndexConstantAction has following
code for dbs at 10.4 and higher levels
indexProperties.put( "uniqueWithDuplicateNulls",
Boolean.toString(true));
But in AlterTableConstantAction, we did not check if the index is of type
nullable unique and never set the property
"uniqueWithDuplicateNulls".
Following simple code change in AlterTableConstantActionhas fixed the problem,
but the bigger issue is there might be databases lying around with duplicate
values when the user thought that unique indexes were defined on their tables.
if(cd.getIndexDescriptor().isUniqueWithDuplicateNulls())
{
properties.put( "uniqueWithDuplicateNulls",
Boolean.toString(true));
}
The other troubling issue is are there other places in the code where we have
forgotten about this property while recreating the indexes.
> SYSCS_COMPRESS_TABLE disables unique constraints
> ------------------------------------------------
>
> Key: DERBY-4677
> URL: https://issues.apache.org/jira/browse/DERBY-4677
> Project: Derby
> Issue Type: Bug
> Affects Versions: 10.4.2.1, 10.5.1.1, 10.5.3.0, 10.6.1.0
> Environment: Output of sysinfo:
> ------------------ Java Information ------------------
> Java Version: 1.6.0_20
> Java Vendor: Sun Microsystems Inc.
> Java home: C:\Program Files (x86)\Java\jre6
> Java classpath: .;C:\Program Files
> (x86)\Java\jre6\lib\ext\QTJava.zip;C:\Users\BMASON\Sandbox\libs\db-derby-10.6.1.0-bin\bin\../lib/derby.jar;C:\Users\BMASON\Sandbox\libs\db-derby-10.6.1.0-bin\bin\../lib/derbynet.jar;C:\Users\BMASON\Sandbox\libs\db-derby-10.6.1.0-bin\bin\../lib/derbyclient.jar;C:\Users\BMASON\Sandbox\libs\db-derby-10.6.1.0-bin\bin\../lib/derbytools.jar
> OS name: Windows 7
> OS architecture: x86
> OS version: 6.1
> Java user name: bmason
> Java user home: C:\Users\BMASON
> Java user dir: C:\Users\BMASON\Sandbox\libs\db-derby-10.6.1.0-bin\bin
> java.specification.name: Java Platform API Specification
> java.specification.version: 1.6
> java.runtime.version: 1.6.0_20-b02
> --------- Derby Information --------
> JRE - JDBC: Java SE 6 - JDBC 4.0
> [C:\Users\BMASON\Sandbox\libs\db-derby-10.6.1.0-bin\lib\derby.jar] 10.6.1.0 -
> (938214)
> [C:\Users\BMASON\Sandbox\libs\db-derby-10.6.1.0-bin\lib\derbytools.jar]
> 10.6.1.0 - (938214)
> [C:\Users\BMASON\Sandbox\libs\db-derby-10.6.1.0-bin\lib\derbynet.jar]
> 10.6.1.0 - (938214)
> [C:\Users\BMASON\Sandbox\libs\db-derby-10.6.1.0-bin\lib\derbyclient.jar]
> 10.6.1.0 - (938214)
> ------------------------------------------------------
> ----------------- Locale Information -----------------
> Current Locale : [English/New Zealand [en_NZ]]
> Found support for locale: [cs]
> version: 10.6.1.0 - (938214)
> Found support for locale: [de_DE]
> version: 10.6.1.0 - (938214)
> Found support for locale: [es]
> version: 10.6.1.0 - (938214)
> Found support for locale: [fr]
> version: 10.6.1.0 - (938214)
> Found support for locale: [hu]
> version: 10.6.1.0 - (938214)
> Found support for locale: [it]
> version: 10.6.1.0 - (938214)
> Found support for locale: [ja_JP]
> version: 10.6.1.0 - (938214)
> Found support for locale: [ko_KR]
> version: 10.6.1.0 - (938214)
> Found support for locale: [pl]
> version: 10.6.1.0 - (938214)
> Found support for locale: [pt_BR]
> version: 10.6.1.0 - (938214)
> Found support for locale: [ru]
> version: 10.6.1.0 - (938214)
> Found support for locale: [zh_CN]
> version: 10.6.1.0 - (938214)
> Found support for locale: [zh_TW]
> version: 10.6.1.0 - (938214)
> ------------------------------------------------------
> Reporter: Brett Mason
> Assignee: Mamta A. Satoor
>
> It appears that running SYSCS_UTIL.SYSCS_COMPRESS_TABLE on a table with a
> null-able unique constraint will disable the unique constraint. The script
> below should reproduce the problem. The expected behaviour is for the second
> insert to fail due to the unique constraint but instead it is allowed. The
> second insert will fail as expected if either the call to
> SYSCS_COMPRESS_TABLE is skipped or if the column is declared NOT NULL.
> I have reproduced the problem using embedded Derby 10.5.1.1, 10.5.3.0 and
> 10.6.1.0 using ij.
> CREATE TABLE TABLE1(NAME1 INT UNIQUE);
> CALL SYSCS_UTIL.SYSCS_COMPRESS_TABLE('APP', 'TABLE1', 1);
> INSERT INTO TABLE1(NAME1) VALUES(1);
> INSERT INTO TABLE1(NAME1) VALUES(1);
> SELECT * FROM TABLE1;
> DROP TABLE TABLE1;
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.