[
https://issues.apache.org/jira/browse/DERBY-2193?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12488777
]
Rick Hillegas commented on DERBY-2193:
--------------------------------------
Hi, Aaron. I agree that this JIRA can be closed now. I think that you have
identified additional problems with Import which deserve their own JIRAs. You
can link those new JIRAs back to this one for context.
The last problem is going to be harder to solve. That is because the parsing
problems don't turn up when the file is read. The file reading code treats all
columns as strings. The parsing errors happen further down the line when Derby
tries to cast the strings to other datatypes. Derby is executing a query with
the following shape (see the comments on Import.performImport()):
insert into targetTable
select (cast v.column1 as decimal), (cast v.column2 as integer)
from new org.apache.derby.impl.load.Import( ... ) as v
So the fix is not in the import code per se. The problem is more general: the
casting logic doesn't know much about the context it's operating in.
> [import] ERROR 38000: StringIndexOutOfBoundsException was thrown while
> evaluating an expression.
> ------------------------------------------------------------------------------------------------
>
> Key: DERBY-2193
> URL: https://issues.apache.org/jira/browse/DERBY-2193
> Project: Derby
> Issue Type: Bug
> Components: Tools
> Affects Versions: 10.2.1.6
> Reporter: Aaron Digulla
> Attachments: derby-2193-01.diff, derby-2193-02-rev2.diff,
> derby-2193-02.diff, derby-2193-script.jar
>
>
> During import of a file, I get this error:
> ERROR 38000: The exception 'java.sql.SQLException: Java exception:
> 'java.lang.StringIndexOutOfBoundsException: String index out of range: -14'.'
> was thrown while evaluating an expression.
> at org.apache.derby.iapi.error.StandardException.newException(Unknown
> Source)
> at
> org.apache.derby.iapi.error.StandardException.unexpectedUserException(Unknown
> Source)
> at org.apache.derby.impl.services.reflect.ReflectMethod.invoke(Unknown
> Source)
> at
> org.apache.derby.impl.sql.execute.CallStatementResultSet.open(Unknown Source)
> at org.apache.derby.impl.sql.GenericPreparedStatement.execute(Unknown
> Source)
> at org.apache.derby.impl.jdbc.EmbedStatement.executeStatement(Unknown
> Source)
> at
> org.apache.derby.impl.jdbc.EmbedPreparedStatement.executeStatement(Unknown
> Source)
> at org.apache.derby.impl.jdbc.EmbedPreparedStatement.execute(Unknown
> Source)
> ...
> How am I supposed to find what's wrong in a big import? :-) It should at
> least mention the file which I was importing, the row and the column when the
> error occurred.
> After printing the whole exceptions chain, I got these additional two:
> ERROR XJ001: Java exception: 'java.lang.StringIndexOutOfBoundsException:
> String index out of range: -14'.
> at org.apache.derby.iapi.error.StandardException.newException(Unknown
> Source)
> at
> org.apache.derby.iapi.error.StandardException.plainWrapException(Unknown
> Source)
> at org.apache.derby.impl.load.LoadError.unexpectedError(Unknown Source)
> at org.apache.derby.impl.load.ImportAbstract.next(Unknown Source)
> at
> org.apache.derby.impl.sql.execute.VTIResultSet.getNextRowCore(Unknown Source)
> at
> org.apache.derby.impl.sql.execute.ProjectRestrictResultSet.getNextRowCore(Unknown
> Source)
> at
> org.apache.derby.impl.sql.execute.NormalizeResultSet.getNextRowCore(Unknown
> Source)
> at
> org.apache.derby.impl.sql.execute.NoPutResultSetImpl.getNextRowFromRowSource(Unknown
> Source)
> at org.apache.derby.impl.store.access.heap.HeapController.load(Unknown
> Source)
> at org.apache.derby.impl.store.access.heap.Heap.load(Unknown Source)
> at
> org.apache.derby.impl.store.access.RAMTransaction.loadConglomerate(Unknown
> Source)
> at
> org.apache.derby.impl.store.access.RAMTransaction.recreateAndLoadConglomerate(Unknown
> Source)
> at
> org.apache.derby.impl.store.access.RAMTransaction.createAndLoadConglomerate(Unknown
> Source)
> at
> org.apache.derby.impl.sql.execute.InsertResultSet.bulkInsertCore(Unknown
> Source)
> at org.apache.derby.impl.sql.execute.InsertResultSet.open(Unknown
> Source)
> at org.apache.derby.impl.sql.GenericPreparedStatement.execute(Unknown
> Source)
> at org.apache.derby.impl.jdbc.EmbedStatement.executeStatement(Unknown
> Source)
> at
> org.apache.derby.impl.jdbc.EmbedPreparedStatement.executeStatement(Unknown
> Source)
> at
> org.apache.derby.impl.jdbc.EmbedPreparedStatement.executeUpdate(Unknown
> Source)
> at org.apache.derby.impl.load.Import.performImport(Unknown Source)
> at org.apache.derby.impl.load.Import.importData(Unknown Source)
> at org.apache.derby.catalog.SystemProcedures.SYSCS_IMPORT_DATA(Unknown
> Source)
> at
> org.apache.derby.exe.ac07170079x010fx9622xb7bax00000011a6e80.g0(Unknown
> Source)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> at java.lang.reflect.Method.invoke(Method.java:585)
> at org.apache.derby.impl.services.reflect.ReflectMethod.invoke(Unknown
> Source)
> at
> org.apache.derby.impl.sql.execute.CallStatementResultSet.open(Unknown Source)
> at org.apache.derby.impl.sql.GenericPreparedStatement.execute(Unknown
> Source)
> at org.apache.derby.impl.jdbc.EmbedStatement.executeStatement(Unknown
> Source)
> at
> org.apache.derby.impl.jdbc.EmbedPreparedStatement.executeStatement(Unknown
> Source)
> at org.apache.derby.impl.jdbc.EmbedPreparedStatement.execute(Unknown
> Source)
> ...
> java.lang.StringIndexOutOfBoundsException: String index out of range: -14
> at java.lang.String.<init>(String.java:202)
> at
> org.apache.derby.impl.load.ImportReadData.readNextDelimitedRow(Unknown Source)
> at org.apache.derby.impl.load.ImportReadData.readNextRow(Unknown Source)
> at org.apache.derby.impl.load.ImportAbstract.next(Unknown Source)
> at
> org.apache.derby.impl.sql.execute.VTIResultSet.getNextRowCore(Unknown Source)
> at
> org.apache.derby.impl.sql.execute.ProjectRestrictResultSet.getNextRowCore(Unknown
> Source)
> at
> org.apache.derby.impl.sql.execute.NormalizeResultSet.getNextRowCore(Unknown
> Source)
> at
> org.apache.derby.impl.sql.execute.NoPutResultSetImpl.getNextRowFromRowSource(Unknown
> Source)
> at org.apache.derby.impl.store.access.heap.HeapController.load(Unknown
> Source)
> at org.apache.derby.impl.store.access.heap.Heap.load(Unknown Source)
> at
> org.apache.derby.impl.store.access.RAMTransaction.loadConglomerate(Unknown
> Source)
> at
> org.apache.derby.impl.store.access.RAMTransaction.recreateAndLoadConglomerate(Unknown
> Source)
> at
> org.apache.derby.impl.store.access.RAMTransaction.createAndLoadConglomerate(Unknown
> Source)
> at
> org.apache.derby.impl.sql.execute.InsertResultSet.bulkInsertCore(Unknown
> Source)
> at org.apache.derby.impl.sql.execute.InsertResultSet.open(Unknown
> Source)
> at org.apache.derby.impl.sql.GenericPreparedStatement.execute(Unknown
> Source)
> at org.apache.derby.impl.jdbc.EmbedStatement.executeStatement(Unknown
> Source)
> at
> org.apache.derby.impl.jdbc.EmbedPreparedStatement.executeStatement(Unknown
> Source)
> at
> org.apache.derby.impl.jdbc.EmbedPreparedStatement.executeUpdate(Unknown
> Source)
> at org.apache.derby.impl.load.Import.performImport(Unknown Source)
> at org.apache.derby.impl.load.Import.importData(Unknown Source)
> at org.apache.derby.catalog.SystemProcedures.SYSCS_IMPORT_DATA(Unknown
> Source)
> ...
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.