[ 
https://issues.apache.org/jira/browse/DERBY-4435?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12774229#action_12774229
 ] 

Kristian Waagan commented on DERBY-4435:
----------------------------------------

>From the mail thread referenced above (sorry, forgot to add this when I logged 
>the Jira):
"A quick (and not that thorough) debugging session seems to have led me 
to the problem, which is related to the addition of collation support.

The NPE happens here (from line 2348) in InsertResultSet.emptyIndexes:
            newIndexCongloms[index] =
                tc.createAndLoadConglomerate(
                    "BTREE",
                    indexRows[index].getRowArray(),
                    null, //default column sort order
                    collation[index],
                    properties,
                    TransactionController.IS_DEFAULT,
                    rowSources[index],
                    (long[]) null);

The problem is that the variable 'collation' hasn't been initialized and 
is null.
Adding "int[][]             collation = new int[numIndexes][];" to the 
top of the method makes the repro pass, but I haven't studied the code 
or run the regression tests.
"

Can you confirm that you see the same issue?
I'm not familiar with the code. When I had a look at it, it wasn't immediately 
clear to me if using a local collation array in the method emptyIndexes is 
correct, or if the instance variable have to be initialized / updated. 
Since the collation array is initialized in setupAllSorts from changedRow, it 
will be null when used in emptyIndexes (assuming InsertResultSet-instances 
aren't reused). As we don't have any rows to insert in emptyIndexes, maybe 
having an array with nulls is sufficient?

> Emptying index fails with NPE doing replacement import of empty file
> --------------------------------------------------------------------
>
>                 Key: DERBY-4435
>                 URL: https://issues.apache.org/jira/browse/DERBY-4435
>             Project: Derby
>          Issue Type: Bug
>          Components: Store
>    Affects Versions: 10.3.3.0, 10.4.2.0, 10.5.3.0
>         Environment: Doing replacement import resulting in an empty table, 
> where the table has at least one index.
>            Reporter: Kristian Waagan
>         Attachments: Derby4435Repro.java
>
>
> When importing data from an empty file, with the replacement option enabled 
> (non-zero last argument in the import procedure call), Derby fails with a 
> NullPointerException when emptying the index(es) .
> Stack trace, insane build:
> java.sql.SQLException: Import error on line 1 of file [snip]: Java exception: 
> ': java.lang.NullPointerException'. 
>       at 
> org.apache.derby.impl.jdbc.SQLExceptionFactory40.getSQLException(SQLExceptionFactory40.java:95)
>         ...
> Caused by: java.lang.NullPointerException
>       at 
> org.apache.derby.impl.sql.execute.InsertResultSet.emptyIndexes(InsertResultSet.java:2348)
>       at 
> org.apache.derby.impl.sql.execute.InsertResultSet.updateAllIndexes(InsertResultSet.java:1820)
>       at 
> org.apache.derby.impl.sql.execute.InsertResultSet.bulkInsertCore(InsertResultSet.java:1356)
>       at 
> org.apache.derby.impl.sql.execute.InsertResultSet.open(InsertResultSet.java:444)
>       at 
> org.apache.derby.impl.sql.GenericPreparedStatement.executeStmt(GenericPreparedStatement.java:436)
>       at 
> org.apache.derby.impl.sql.GenericPreparedStatement.execute(GenericPreparedStatement.java:317)
>       at 
> org.apache.derby.impl.jdbc.EmbedStatement.executeStatement(EmbedStatement.java:1235)
>       ... 44 more
> Stack trace, sane build:
> java.sql.SQLException: The exception 'java.sql.SQLException: An internal 
> error was identified by RawStore module.' was thrown while evaluating an 
> expression.
>       at 
> org.apache.derby.impl.jdbc.SQLExceptionFactory40.getSQLException(SQLExceptionFactory40.java:95)
>         ...
> Caused by: ERROR 40XT0: An internal error was identified by RawStore module.
>       at 
> org.apache.derby.iapi.error.StandardException.newException(StandardException.java:276)
>       at org.apache.derby.impl.store.raw.xact.Xact.abort(Xact.java:917)
>       at 
> org.apache.derby.impl.store.access.RAMTransaction.abort(RAMTransaction.java:1985)
>       at 
> org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext.doRollback(GenericLanguageConnectionContext.java:1496)
>       at 
> org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext.userRollback(GenericLanguageConnectionContext.java:1404)
>       at 
> org.apache.derby.impl.jdbc.TransactionResourceImpl.rollback(TransactionResourceImpl.java:244)
>       at 
> org.apache.derby.impl.jdbc.EmbedConnection.rollback(EmbedConnection.java:1764)
>       ... 40 more
> A quick investigation suggests DERBY-2537 added the code that fails.
> Problem reported by a user on the Derby user list, see 
> http://thread.gmane.org/gmane.comp.apache.db.derby.user/11764

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to