Xavier Hanin wrote:
On 3/31/07, *Øystein Grøvlen* <[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>> wrote:

    Xavier Hanin wrote:

     >             con.createStatement().executeUpdate("create table
    Issue ( ID
     > char(50) )");
     >             PreparedStatement st = con.prepareStatement("select
    count(*)
     > from Issue where ? is null");
     >             st.setNull(1, Types.VARBINARY);

    I do not think that CHAR and VARBINARY are compatible types.  Try using
    Types.VARCHAR instead.


Yes, but why does derby consider the type as CHAR? Is it something from the specification to assume CHAR when no type can be assumed from the query? Note that I do not compare to the only column I've created. The column could have been compatible with VARBINARY.

Ah, I see. My mistake. Then I do not see a reason why this should not be allowed. Which version of Derby are you using? There have been some fixes in this area lately (see DERBY-1610), and I will try your test case on the development trunk later today.

Indeed in my usecase I can't use VARCHAR because I'm not at the origin of the query. I use hibernate and do something like this:
from Issue where :status is null or status = :status

Hibernate converts that to something like
select * from Issue where ? is null or status_id = ?

and bind the two parameters with the same value, i.e. the id of the status I bind in Hibernate, which is a BIGINT, and thus use VARBINARY as sql type for both parameters binding. And I can't really blame Hibernate, can I?

Why not? :-)
I would blame Hibernate for using VARBINARY when it should use BIGINT, but I guess that is not the issue here.

--
Øystein

Reply via email to