[ 
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)

Reply via email to