[
https://issues.apache.org/jira/browse/DERBY-3032?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12523923
]
Kathey Marsden commented on DERBY-3032:
---------------------------------------
The change comments for DERBY-2986 say:
/* Following call to "findType()" will indirectly bind the
* expressions in the thenElseList, so no need to call
* "thenElseList.bindExpression(...)" after we do this.
* DERBY-2986.
*/
The javadoc for findtype says:
/**
* This method is a 'prebind.' We need to determine what the types of
* the nodes are going to be before we can set all the SQLParsed NULL's
* to the appropriate type. After we bind, however, we want to ignore
* the SQLParsed NULL's which will be bound to CHAR. Also, we might
* have to delve into the CASE Expression tree.
So apparently findtype is not enough as it leaves all the SQL NULL's bound as
CHARS. Still we should be able to avoid the exponential processing, especially
for the case where nulls are not involved as in DERBY-2986
> 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
>
> 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.