db-derby-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Kathey Marsden (JIRA)" <j...@apache.org>
Subject [jira] Updated: (DERBY-3032) java.lang.ClassCastException returning null from a case statement in subquery
Date Fri, 31 Aug 2007 20:03:18 GMT

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

Kathey Marsden updated DERBY-3032:
----------------------------------

    Attachment: derby-3032_stat.txt
                derby-3032_diff.txt

Attached is an initial patch for this issue.  My solution was to have recastNullNodes rebind
the expressions whenever a cast is performed.  This corrected the ClassCastException  and
preserved the performance for the DERBY-2986 issue.

While this approach seems to work fine, I somehow have the feeling that the indirect binding
through both findType and recastNullNodes is a bit unclear.  I added comments to try to make
it apparent that that is what is happenning, but wonder if there is better way to reorganize
this to make it clearer.  Suggestions welcome.

Tests are running now.  


> java.lang.ClassCastException returning null from a case statement  in subquery
> ------------------------------------------------------------------------------
>
>                 Key: DERBY-3032
>                 URL: https://issues.apache.org/jira/browse/DERBY-3032
>             Project: Derby
>          Issue Type: Bug
>    Affects Versions: 10.3.1.5
>            Reporter: Kathey Marsden
>            Assignee: Kathey Marsden
>         Attachments: derby-3032_diff.txt, derby-3032_stat.txt
>
>
> The following query returning NULL date from a case statement in a subquery causees a
ClassCastException in 10.3.
> The query works fine in 10.2
> ij> create table t (d date, vc varchar(30));
> 0 rows inserted/updated/deleted
> ij> insert into t values(CURRENT_DATE, 'hello');
> 1 row inserted/updated/deleted
> ij> SELECT d from t where d = (SELECT CASE WHEN 1 = 1 THEN CURRENT_DATE ELSE NULL
END from t);
> D
> ----------
> 2007-08-28
> 1 row selected
> ij> SELECT d from t where d = (SELECT CASE WHEN 1 = 0 THEN CURRENT_DATE  ELSE NULL
END from t);
> D
> ----------
> ERROR 38000: The exception 'java.lang.ClassCastException: org.apache.derby.iapi.types.SQLChar
incompatible with org.apac
> he.derby.iapi.types.DateTimeDataValue' was thrown while evaluating an expression.
> java.sql.SQLException: The exception 'java.lang.ClassCastException: org.apache.derby.iapi.types.SQLChar
incompatible wit
> h org.apache.derby.iapi.types.DateTimeDataValue' was thrown while evaluating an expression.
>        at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(SQLExceptionFactory.java:45)
>        at org.apache.derby.impl.jdbc.Util.newEmbedSQLException(Util.java:88)
>        at org.apache.derby.impl.jdbc.Util.seeNextException(Util.java:224)
>        at org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInSQLException(TransactionResourceImpl.java:398)
>        at org.apache.derby.impl.jdbc.TransactionResourceImpl.handleException(TransactionResourceImpl.java:346)
>        at org.apache.derby.impl.jdbc.EmbedConnection.handleException(EmbedConnection.java:1572)
>        at org.apache.derby.impl.jdbc.ConnectionChild.handleException(ConnectionChild.java:81)
>        at org.apache.derby.impl.jdbc.EmbedResultSet.closeOnTransactionError(EmbedResultSet.java:4323)
>        at org.apache.derby.impl.jdbc.EmbedResultSet.movePosition(EmbedResultSet.java:464)
>        at org.apache.derby.impl.jdbc.EmbedResultSet.next(EmbedResultSet.java:368)
>        at org.apache.derby.tools.JDBCDisplayUtil.indent_DisplayResults(JDBCDisplayUtil.java:382)
>        at org.apache.derby.tools.JDBCDisplayUtil.indent_DisplayResults(JDBCDisplayUtil.java:338)
>        at org.apache.derby.tools.JDBCDisplayUtil.indent_DisplayResults(JDBCDisplayUtil.java:241)
>        at org.apache.derby.tools.JDBCDisplayUtil.DisplayResults(JDBCDisplayUtil.java:229)
>        at org.apache.derby.impl.tools.ij.utilMain.displayResult(utilMain.java:449)
>        at org.apache.derby.impl.tools.ij.utilMain.doCatch(utilMain.java:523)
>        at org.apache.derby.impl.tools.ij.utilMain.runScriptGuts(utilMain.java:364)
>        at org.apache.derby.impl.tools.ij.utilMain.go(utilMain.java:262)
>        at org.apache.derby.impl.tools.ij.Main.go(Main.java:215)
>        at org.apache.derby.impl.tools.ij.Main.mainCore(Main.java:181)
>        at org.apache.derby.impl.tools.ij.Main14.main(Main14.java:56)
>        at org.apache.derby.tools.ij.main(ij.java:71)
> Caused by: java.sql.SQLException: Java exception: 'org.apache.derby.iapi.types.SQLChar
incompatible with org.apache.derb
> y.iapi.types.DateTimeDataValue: java.lang.ClassCastException'.
>        at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(SQLExceptionFactory.java:45)
>        at org.apache.derby.impl.jdbc.Util.newEmbedSQLException(Util.java:88)
>        at org.apache.derby.impl.jdbc.Util.javaException(Util.java:245)
>        at org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInSQLException(TransactionResourceImpl.java:403)
>        ... 19 more
> Caused by: java.lang.ClassCastException: org.apache.derby.iapi.types.SQLChar incompatible
with org.apache.derby.iapi.typ
> es.DateTimeDataValue
>        at org.apache.derby.exe.ac12564092x0114xaec2x9627x0000002183d82.g0(Unknown Source)
>        at org.apache.derby.exe.ac12564092x0114xaec2x9627x0000002183d82.e1(Unknown Source)
>        at org.apache.derby.impl.services.reflect.DirectCall.invoke(ReflectGeneratedClass.java:141)
>        at org.apache.derby.impl.sql.execute.ProjectRestrictResultSet.getNextRowCore(ProjectRestrictResultSet.java:267)
>        at org.apache.derby.impl.sql.execute.BasicNoPutResultSetImpl.getNextRow(BasicNoPutResultSetImpl.java:468)
>        at org.apache.derby.impl.jdbc.EmbedResultSet.movePosition(EmbedResultSet.java:424)
>        ... 13 more
> ERROR XJ001: Java exception: 'org.apache.derby.iapi.types.SQLChar incompatible with org.apache.derby.iapi.types.DateTime
> DataValue: java.lang.ClassCastException'.
> java.sql.SQLException: Java exception: 'org.apache.derby.iapi.types.SQLChar incompatible
with org.apache.derby.iapi.type
> s.DateTimeDataValue: java.lang.ClassCastException'.
>        at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(SQLExceptionFactory.java:45)
>        at org.apache.derby.impl.jdbc.Util.newEmbedSQLException(Util.java:88)
>        at org.apache.derby.impl.jdbc.Util.javaException(Util.java:245)
>        at org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInSQLException(TransactionResourceImpl.java:403)
>        at org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInSQLException(TransactionResourceImpl.java:398)
>        at org.apache.derby.impl.jdbc.TransactionResourceImpl.handleException(TransactionResourceImpl.java:346)
>        at org.apache.derby.impl.jdbc.EmbedConnection.handleException(EmbedConnection.java:1572)
>        at org.apache.derby.impl.jdbc.ConnectionChild.handleException(ConnectionChild.java:81)
>        at org.apache.derby.impl.jdbc.EmbedResultSet.closeOnTransactionError(EmbedResultSet.java:4323)
>        at org.apache.derby.impl.jdbc.EmbedResultSet.movePosition(EmbedResultSet.java:464)
>        at org.apache.derby.impl.jdbc.EmbedResultSet.next(EmbedResultSet.java:368)
>        at org.apache.derby.tools.JDBCDisplayUtil.indent_DisplayResults(JDBCDisplayUtil.java:382)
>        at org.apache.derby.tools.JDBCDisplayUtil.indent_DisplayResults(JDBCDisplayUtil.java:338)
>        at org.apache.derby.tools.JDBCDisplayUtil.indent_DisplayResults(JDBCDisplayUtil.java:241)
>        at org.apache.derby.tools.JDBCDisplayUtil.DisplayResults(JDBCDisplayUtil.java:229)
>        at org.apache.derby.impl.tools.ij.utilMain.displayResult(utilMain.java:449)
>        at org.apache.derby.impl.tools.ij.utilMain.doCatch(utilMain.java:523)
>        at org.apache.derby.impl.tools.ij.utilMain.runScriptGuts(utilMain.java:364)
>        at org.apache.derby.impl.tools.ij.utilMain.go(utilMain.java:262)
>        at org.apache.derby.impl.tools.ij.Main.go(Main.java:215)
>        at org.apache.derby.impl.tools.ij.Main.mainCore(Main.java:181)
>        at org.apache.derby.impl.tools.ij.Main14.main(Main14.java:56)
>        at org.apache.derby.tools.ij.main(ij.java:71)
> Caused by: java.lang.ClassCastException: org.apache.derby.iapi.types.SQLChar incompatible
with org.apache.derby.iapi.typ
> es.DateTimeDataValue
>        at org.apache.derby.exe.ac12564092x0114xaec2x9627x0000002183d82.g0(Unknown Source)
>        at org.apache.derby.exe.ac12564092x0114xaec2x9627x0000002183d82.e1(Unknown Source)
>        at org.apache.derby.impl.services.reflect.DirectCall.invoke(ReflectGeneratedClass.java:141)
>        at org.apache.derby.impl.sql.execute.ProjectRestrictResultSet.getNextRowCore(ProjectRestrictResultSet.java:267)
>        at org.apache.derby.impl.sql.execute.BasicNoPutResultSetImpl.getNextRow(BasicNoPutResultSetImpl.java:468)
>        at org.apache.derby.impl.jdbc.EmbedResultSet.movePosition(EmbedResultSet.java:424)
>        ... 13 more

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


Mime
View raw message