[ http://issues.apache.org/jira/browse/DERBY-628?page=all ]

Satheesh Bandaram reassigned DERBY-628:
---------------------------------------

    Assign To: Satheesh Bandaram

> setNull() using Types.VARCHAR for a CLOB parameter fails in embedded mode.
> --------------------------------------------------------------------------
>
>          Key: DERBY-628
>          URL: http://issues.apache.org/jira/browse/DERBY-628
>      Project: Derby
>         Type: Bug
>   Components: JDBC
>     Reporter: A B
>     Assignee: Satheesh Bandaram
>     Priority: Minor
>      Fix For: 10.2.0.0
>  Attachments: setNull.java
>
> If I attempt to call PreparedStatement.setNull() and specify Types.VARCHAR 
> when the actual parameter type (as determined at bind time) is CLOB, Derby in 
> embedded mode will throw an error, while Derby in client/server mode will 
> succeed.
> Ex. running the following code:
>     st.execute("create table t1 (c clob)");
>     PreparedStatement pSt = conn.prepareStatement(
>         "insert into t1 values (?)");
>     try {
>         pSt.setNull(1, Types.VARCHAR);
>         pSt.execute();
>         System.out.println("Error did NOT reproduce.");
>     } catch (SQLException se) {
>         System.out.println("Error reproduced:");
>         se.printStackTrace();
>     }
> Against Derby embedded, the result will be:
>   Error reproduced:
>   SQL Exception: An attempt was made to get a data value of type 'CLOB' from 
> a data value of type 'VARCHAR'.
> But against the Network Server, everything works fine.  Derby embedded will 
> work in other cases where compatible types are used (ex. using setNull() with 
> Types.INTEGER for a BIGINT parameter), but fails for this particular 
> situation. Thus I'm assuming this is _not_ intentional (i.e. that the above 
> code should work). 
> Looks like the problem is in iapi.types.DataTypeDescriptor:
>     private static boolean isCharacterType(int jdbcType) {
>         switch (jdbcType) {
>         case Types.CHAR:
>         case Types.VARCHAR:
>         case Types.LONGVARCHAR:
>             return true;
>         default:
>             return false;
>         }
>     }
> I think CLOB should be included in this list, too, shouldn't it?  In 
> iapi.types.TypeId, "isStringTypeId" is true for CLOBs as well as for the 
> other character types, so it seems like the above method should have similar 
> logic.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira

Reply via email to