[ 
https://issues.apache.org/jira/browse/DERBY-6880?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Bryan Pendleton resolved DERBY-6880.
------------------------------------
            Resolution: Fixed
              Assignee: Bryan Pendleton
         Fix Version/s: 10.13.0.0
      Issue & fix info: Repro attached
    Bug behavior facts: Crash,Regression,Seen in production

I've gone as far on this issue as I care to, for the time being. My feeling
is that this patch is an incremental improvement: the new test cases
pass, including several test cases which worked in older Derby releases
and broke in the latest release, and no known test cases are broken by
this patch.

It's clear that I don't really understand what is meant by the JDBC
documentation for Statement.RETURN_GENERATED_KEYS for an
UPDATE SQL statement, and it's also clear that I don't know how to
implement the behavior that is exhibited by other systems (notably
the DB2 behaviors that Soren Peen described).

But, for the time being, those are not my itch to scratch, whereas
fixing the regression is, so I decided to commit this patch and mark
this issue resolved.

We certainly could back-port this change to 10.12, if anyone is planning
to make a patch release of 10.12, but I'm not intending to back-port
this change at this time.

> Update failing with java.sql.SQLDataException 
> ----------------------------------------------
>
>                 Key: DERBY-6880
>                 URL: https://issues.apache.org/jira/browse/DERBY-6880
>             Project: Derby
>          Issue Type: Bug
>    Affects Versions: 10.12.1.1
>            Reporter: Simon Zee
>            Assignee: Bryan Pendleton
>             Fix For: 10.13.0.0
>
>         Attachments: repro.diff, standalone.java, undo6742.diff, 
> undoMoreTests.diff
>
>
> When updating a single column in a table using executeUpdate() via Vert.x I 
> am receiving the following exception:
> java.sql.SQLDataException: Invalid character string format for type long.
>       at 
> org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(SQLExceptionFactory.java:84)
>       at org.apache.derby.impl.jdbc.Util.generateCsSQLException(Util.java:233)
>       at 
> org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInSQLException(TransactionResourceImpl.java:424)
>       at 
> org.apache.derby.impl.jdbc.TransactionResourceImpl.handleException(TransactionResourceImpl.java:353)
>       at 
> org.apache.derby.impl.jdbc.EmbedConnection.handleException(EmbedConnection.java:2405)
>       at 
> org.apache.derby.impl.jdbc.ConnectionChild.handleException(ConnectionChild.java:88)
>       at 
> org.apache.derby.impl.jdbc.EmbedStatement.executeStatement(EmbedStatement.java:1432)
>       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 
> com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeUpdate(NewProxyPreparedStatement.java:410)
>       at io.vertx.ext.jdbc.impl.actions.JDBCUpdate.execute(JDBCUpdate.java:50)
>       at io.vertx.ext.jdbc.impl.actions.JDBCUpdate.execute(JDBCUpdate.java:34)
>       at 
> io.vertx.ext.jdbc.impl.actions.AbstractJDBCAction.handle(AbstractJDBCAction.java:48)
>       at 
> io.vertx.ext.jdbc.impl.actions.AbstractJDBCAction.handle(AbstractJDBCAction.java:33)
>       at 
> io.vertx.core.impl.ContextImpl.lambda$executeBlocking$15(ContextImpl.java:296)
>       at 
> io.vertx.core.impl.OrderedExecutorFactory$OrderedExecutor.lambda$new$261(OrderedExecutorFactory.java:91)
>       at 
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
>       at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
>       at java.lang.Thread.run(Thread.java:745)
> Caused by: ERROR 22018: Invalid character string format for type long.
>       at 
> org.apache.derby.iapi.error.StandardException.newException(StandardException.java:290)
>       at 
> org.apache.derby.iapi.error.StandardException.newException(StandardException.java:285)
>       at org.apache.derby.iapi.types.SQLChar.getLong(SQLChar.java:447)
>       at 
> org.apache.derby.impl.sql.execute.UpdateResultSet.collectAffectedRows(UpdateResultSet.java:534)
>       at 
> org.apache.derby.impl.sql.execute.UpdateResultSet.open(UpdateResultSet.java:272)
>       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)
>       ... 13 more
> Further details and discussion can be found here:
> https://mail-archives.apache.org/mod_mbox/db-derby-user/201603.mbox/%3CCAHbUnCXkHMKE1u9R3D-z9Njp8goAV7%2B0vPOmgafH8DCqG8mSpQ%40mail.gmail.com%3E
> Notably, I have tried executing the same update via other means (for example, 
> manually via SquirrelSQL, and via the ORMLite framework) and the update 
> succeeds. This may be due to the exact JDBC APIs they are using (for example, 
> SquirrelSQL is not using a prepared statement, and ORMLite updates all the 
> columns when it updates a table rather than just some of them).
> I have created a complete but minimal example that illustrates the problem in 
> the following GitHub project:
> https://github.com/ssadedin/DerbyDebug
> My derby / system information is as follows:
> $ java -cp 'lib/*' org.apache.derby.tools.sysinfo
> ------------------ Java Information ------------------
> Java Version:    1.8.0_72
> Java Vendor:     Oracle Corporation
> Java home:       
> /Library/Java/JavaVirtualMachines/jdk1.8.0_72.jdk/Contents/Home/jre
> Java classpath:  lib/derby.jar:lib/derbyclient.jar
> OS name:         Mac OS X
> OS architecture: x86_64
> OS version:      10.11.1
> Java user name:  simon
> Java user home:  /Users/simon
> Java user dir:   /Users/simon/Documents/workspace/BrokenDerby
> java.specification.name: Java Platform API Specification
> java.specification.version: 1.8
> java.runtime.version: 1.8.0_72-b15
> --------- Derby Information --------
> [/Users/simon/Documents/workspace/BrokenDerby/lib/derby.jar] 10.12.1.1 - 
> (Unversioned directory)
> [/Users/simon/Documents/workspace/BrokenDerby/lib/derbyclient.jar] 10.12.1.1 
> - (Unversioned directory)
> ------------------------------------------------------
> ----------------- Locale Information -----------------
> ------------------------------------------------------
> ------------------------------------------------------



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to