Please see my comment inlined.

Johann NG <[EMAIL PROTECTED]> writes:

> I wanted to use COALESCE function with JSTL but it didn't  worked (I reported 
> my problem in this post "COALESCE ArrayIndexOutOfBoundException"). So I  
> changed my query and used CASE function and to prevent conversion type 
> problems  I made a CAST:
>   
>  select  ID_ITM, ITM_NAME, ITM_CODE from ITEMS 
>  where  ITM_CODE = (CASE WHEN CAST(? as BIGINT) IS NULL 
>  THEN  ITM_CODE ELSE CAST(? as BIGINT)  END)
>   
>  In  static mode with ij console, this query  works perfectly when ?=NULL. 
> But it.s not the case when ? is dynamically  replaced with the JSTL SQL NULL 
> value.  
>   
>  At  first I thought it was a SQL type problem so I tried the same query on 
> different  column type : 
>  select  ID_ITM, ITM_NAME, ITM_CODE from ITEMS where ITM_NAME = (CASE WHEN 
> CAST(? as  VARCHAR(50)) IS NULL THEN  ITM_NAME ELSE  CAST(? as VARCHAR(50)) 
> END)
>   
>  select  ID_ITM, ITM_NAME, ITM_CODE from ITEMS where ITM_LAST_MODIFIED = 
> (CASE WHEN  CAST(? as DATE) IS NULL THEN   ITM_LAST_MODIFIED ELSE CAST(? as 
> DATE) END)
>   
>  I  tried the latest snapshot jdbc driver derbyclient.jar with no  success.
>  Error  message:
>  : Type is  not supported. (Apache Derby snapshot-10.2.0.4 client  driver)
>  : Invalid  data conversion: Parameter object type is invalid for requested  
> conversion.( Apache  Derby  release 10.1.3.1 client  driver)
>   
>  In  the JSP file I.m passing SQL parameters with the JSTL SQL tag library  :
>   
>   
>
> <c:set  var="code"  value="${param.code}"/>  <c:if  test="${not empty  code}">
>  <c:catch  var="excpt">
>    <fmt:parseNumber  type="number"  var="parsecode"  value="${code}" 
> integerOnly="false"/>
>   </c:catch>
>  .  . .
>  <sql:query  var="ItemList">  
>   <%@  include  file="./ItemList.sql"%>
>         <sql:param  value="${parsecode}"/>
>  <sql:param  value="${parsecode}"/>  
>   </sql:query>
>   
>   
>  I  made a log on the JSP entries to check parameters JSTL type. When the 
> parsecode  parameter is defined, the result is displayed correctly . 
>   
>
>    I  checked the JSTL specification, when parsecode parameter is not 
> defined, the SQL  NULL value is returned to the application, with Oracle 
> database, this value is  correctly treated. But with Apache Derby I.ve got 
> this error  :
>   
>   
>
> 2006-09-25  12:33:47,920 [http-8080-Processor22] ERROR util.error  - 
> Stack=javax.servlet.jsp.JspException:     SELECT ID_ITM, ITM_NAME,  ITM_CODE
>      FROM ITEMS
>      WHERE ITM_CODE =(CASE WHEN CAST(? as  BIGINT) IS NULL 
>  THEN  ITM_CODE ELSE CAST(? as BIGINT) END)  
>    
>    
>    : Invalid data conversion: Parameter object  type is invalid for requested 
> conversion. (Apache Derby  release 10.1.3.1 client  driver)
>  : Type is  not supported. (Apache Derby snapshot-10.2.0.4 client  driver)
>  at  
> org.apache.taglibs.standard.tag.common.sql.QueryTagSupport.doEndTag(QueryTagSupport.java:220)
>                   
>  So,  from my investigations I think that it.s a JDBC driver bug. The JSTL 
> SQL NULL  value isn.t correctly treated. I tested the same query and JSP with 
> Oracle  Database and it works. I didn.t find any specific BUG issue but I 
> found a post  about a problem that might be the cause of this specific JSTL 
> SQL NULL value BUG  :  
> http://mail-archives.apache.org/mod_mbox/db-derby-user/200603.mbox/[EMAIL 
> PROTECTED]  
>   
>  Is it the default behaviour for Apache Derby or is it a BUG that
>  have already been reported and that I missed?

Can this be the same as DERBY-1904/DERBY-1938? Its looks like you have
hit the same issue..

Dag

Reply via email to