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] Commented: (DERBY-3032) java.lang.ClassCastException returning null from a case statement in subquery
Date Thu, 30 Aug 2007 19:54:30 GMT

    [ 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.


Mime
View raw message