[ https://issues.apache.org/jira/browse/DERBY-6890?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15315143#comment-15315143 ]
Bryan Pendleton commented on DERBY-6890: ---------------------------------------- The Btree code is complaining because it has two objects, one which is a SQLVarchar, and one which is a CollatorSQLVarchar. Below are the stack traces of the places where I think those two different objects are being created. {quote} java.lang.Exception: CollatorSQLVarchar constructor at org.apache.derby.iapi.types.CollatorSQLVarchar.<init>(CollatorSQLVarchar.java:57) at org.apache.derby.iapi.types.SQLVarchar.getValue(SQLVarchar.java:91) at org.apache.derby.iapi.types.DataTypeDescriptor.getNull(DataTypeDescriptor.java:1024) at org.apache.derby.impl.sql.execute.NormalizeResultSet.getCachedDestination(NormalizeResultSet.java:401) at org.apache.derby.impl.sql.execute.NormalizeResultSet.normalizeRow(NormalizeResultSet.java:378) at org.apache.derby.impl.sql.execute.NormalizeResultSet.getNextRowCore(NormalizeResultSet.java:191) at org.apache.derby.impl.sql.execute.DMLWriteResultSet.getNextRowCore(DMLWriteResultSet.java:148) at org.apache.derby.impl.sql.execute.InsertResultSet.getNextRowCore(InsertResultSet.java:1082) at org.apache.derby.impl.sql.execute.InsertResultSet.open(InsertResultSet.java:451) at org.apache.derby.impl.sql.GenericPreparedStatement.executeStmt(GenericPreparedStatement.java:472) at org.apache.derby.impl.sql.GenericPreparedStatement.execute(GenericPreparedStatement.java:351) at org.apache.derby.impl.jdbc.EmbedStatement.executeStatement(EmbedStatement.java:1339) at org.apache.derby.impl.jdbc.EmbedPreparedStatement.executeStatement(EmbedPreparedStatement.java:1709) at org.apache.derby.impl.jdbc.EmbedPreparedStatement.executeLargeUpdate(EmbedPreparedStatement.java:320) at org.apache.derby.impl.jdbc.EmbedPreparedStatement.executeUpdate(EmbedPreparedStatement.java:309) at Test.testDerby6890(Test.java:49) at Test.main(Test.java:73) java.lang.Exception: Simple SQLVarchar constructor at org.apache.derby.iapi.types.SQLVarchar.<init>(SQLVarchar.java:117) at org.apache.derby.iapi.types.DataValueFactoryImpl.getNullDVDWithUCS_BASICcollation(DataValueFactoryImpl.java:1125) at org.apache.derby.iapi.types.DataValueFactoryImpl.getNull(DataValueFactoryImpl.java:1073) at org.apache.derby.impl.store.access.conglomerate.TemplateRow.allocate_objects(TemplateRow.java:96) at org.apache.derby.impl.store.access.conglomerate.TemplateRow.newRow(TemplateRow.java:199) at org.apache.derby.impl.store.access.conglomerate.OpenConglomerateScratchSpace.get_template(OpenConglomerateScratchSpace.java:210) at org.apache.derby.impl.store.access.btree.BTreeController.doIns(BTreeController.java:675) at org.apache.derby.impl.store.access.btree.BTreeController.insert(BTreeController.java:1372) at org.apache.derby.impl.store.access.btree.index.B2IController.insert(B2IController.java:210) at org.apache.derby.impl.sql.execute.IndexChanger.insertAndCheckDups(IndexChanger.java:565) at org.apache.derby.impl.sql.execute.IndexChanger.doInsert(IndexChanger.java:393) at org.apache.derby.impl.sql.execute.IndexChanger.insert(IndexChanger.java:713) at org.apache.derby.impl.sql.execute.IndexSetChanger.insert(IndexSetChanger.java:268) at org.apache.derby.impl.sql.execute.RowChangerImpl.insertRow(RowChangerImpl.java:458) at org.apache.derby.impl.sql.execute.InsertResultSet.normalInsertCore(InsertResultSet.java:881) at org.apache.derby.impl.sql.execute.InsertResultSet.open(InsertResultSet.java:452) at org.apache.derby.impl.sql.GenericPreparedStatement.executeStmt(GenericPreparedStatement.java:472) at org.apache.derby.impl.sql.GenericPreparedStatement.execute(GenericPreparedStatement.java:351) at org.apache.derby.impl.jdbc.EmbedStatement.executeStatement(EmbedStatement.java:1339) at org.apache.derby.impl.jdbc.EmbedPreparedStatement.executeStatement(EmbedPreparedStatement.java:1709) at org.apache.derby.impl.jdbc.EmbedPreparedStatement.executeLargeUpdate(EmbedPreparedStatement.java:320) at org.apache.derby.impl.jdbc.EmbedPreparedStatement.executeUpdate(EmbedPreparedStatement.java:309) at Test.testDerby6890(Test.java:49) at Test.main(Test.java:73) {quote} > INSERT error after PK altered to GENERATED > ------------------------------------------ > > Key: DERBY-6890 > URL: https://issues.apache.org/jira/browse/DERBY-6890 > Project: Derby > Issue Type: Bug > Components: SQL > Affects Versions: 10.12.1.1 > Environment: Mac OS X 10.11.5 > JDK: Oracle 1.8.0_92 > Reporter: Andrei Koiro > Attachments: CollationTest.diff, Test.groovy, Test.java, > testRepro.diff > > > After issue https://issues.apache.org/jira/browse/DERBY-3888 was fixed, we > want to use the 'GENERATED BY DEFAULT' feature > for our tables. > To migrate our tables, we use this sql: > ALTER TABLE MODULE ADD COLUMN ID_TEMP BIGINT GENERATED BY DEFAULT AS > IDENTITY; > UPDATE MODULE SET ID_TEMP = ID; > ALTER TABLE MODULE ALTER COLUMN ID_TEMP NOT NULL; > ALTER TABLE MODULE DROP ID; > RENAME COLUMN MODULE.ID_TEMP TO ID; > But after I applied it, I started to get this exception: > Caused by: org.apache.derby.shared.common.sanity.AssertFailure: ASSERT FAILED > type of inserted column[0] = > org.apache.derby.iapi.types.CollatorSQLVarchartype of template column[0] = > org.apache.derby.iapi.types.SQLVarchar > at > org.apache.derby.shared.common.sanity.SanityManager.THROWASSERT(SanityManager.java:162) > at > org.apache.derby.shared.common.sanity.SanityManager.THROWASSERT(SanityManager.java:147) > at > org.apache.derby.impl.store.access.btree.OpenBTree.isIndexableRowConsistent(OpenBTree.java:519) > at > org.apache.derby.impl.store.access.btree.BTreeController.doIns(BTreeController.java:679) > at > org.apache.derby.impl.store.access.btree.BTreeController.insert(BTreeController.java:1372) > at > org.apache.derby.impl.store.access.btree.index.B2IController.insert(B2IController.java:210) > at > org.apache.derby.impl.sql.execute.IndexChanger.insertAndCheckDups(IndexChanger.java:565) > at > org.apache.derby.impl.sql.execute.IndexChanger.doInsert(IndexChanger.java:393) > at > org.apache.derby.impl.sql.execute.IndexChanger.insert(IndexChanger.java:713) > at > org.apache.derby.impl.sql.execute.IndexSetChanger.insert(IndexSetChanger.java:268) > at > org.apache.derby.impl.sql.execute.RowChangerImpl.insertRow(RowChangerImpl.java:458) > at > org.apache.derby.impl.sql.execute.InsertResultSet.normalInsertCore(InsertResultSet.java:881) > at > org.apache.derby.impl.sql.execute.InsertResultSet.open(InsertResultSet.java:452) > at > org.apache.derby.impl.sql.GenericPreparedStatement.executeStmt(GenericPreparedStatement.java:473) > at > org.apache.derby.impl.sql.GenericPreparedStatement.execute(GenericPreparedStatement.java:352) > at > org.apache.derby.impl.jdbc.EmbedStatement.executeStatement(EmbedStatement.java:1340) > ... 30 more > I attached Test.groovy class which shows this issue. > also I found this workaround: > we need to drop all indexes and create them again, after we applied this pk > column update. -- This message was sent by Atlassian JIRA (v6.3.4#6332)