[ http://issues.apache.org/jira/browse/DERBY-1854?page=comments#action_12436361 ] Suresh Thalamati commented on DERBY-1854: -----------------------------------------
debugged this bug little bit , looks like the problem is one of the conglomerate descriptor entries in the sys.sysconglomerates are not getting updated with the new conglomerate number that got created as part of the compress . In the test case , it happens to be entry for the foreign key index. The current code that updates the conglomerate numbers indexes assumes ,there are duplicate entries in the sys.sysconglomerate with same conglomerid entries , when multiple indexes are referring to a conglomerate. I think this assumption is not true any more , fix for DERBY-655 ensures conglomerid is unique in sys.sysconglomerates. This bug is likely to show up in all branches , where the fix for DERBY-655 is checked in. /suresh > SYSCS_COMPRESS_TABLE corrupts table with a single column which is both a > primary key and a foreign key > ------------------------------------------------------------------------------------------------------ > > Key: DERBY-1854 > URL: http://issues.apache.org/jira/browse/DERBY-1854 > Project: Derby > Issue Type: Bug > Components: Store > Affects Versions: 10.1.3.1, 10.1.3.0 > Environment: Reproduced on Linux, Win2k, and WinXP running JDK 1.4.2.x > Reporter: Chad Loder > Priority: Critical > Fix For: 10.2.2.0 > > > Running the following short SQL script from ij will cause an error "ERROR > XSAI2: The conglomerate (817) requested does not exist.". It appears that > the SYSCS_COMPRESS_TABLE function corrupts tables that have a single column > which is both a primary key and a foreign key. > connect 'jdbc:derby:/testdb;create=true'; > CREATE TABLE users ( > user_id INT NOT NULL GENERATED BY DEFAULT AS IDENTITY, > user_login VARCHAR(255) NOT NULL, > PRIMARY KEY (user_id)); > CREATE TABLE admins ( > user_id INT NOT NULL, > PRIMARY KEY (user_id), > CONSTRAINT admin_uid_fk FOREIGN KEY (user_id) REFERENCES users (user_id)); > > INSERT INTO users (user_login) VALUES('TEST1'); > INSERT INTO admins VALUES (VALUES IDENTITY_VAL_LOCAL()); > CALL SYSCS_UTIL.SYSCS_COMPRESS_TABLE('APP', 'ADMINS', 0); > SELECT * from admins; -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira
