You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-dev@db.apache.org by "Knut Anders Hatlen (JIRA)" <ji...@apache.org> on 2011/01/10 22:47:46 UTC

[jira] Created: (DERBY-4964) Client driver fails to convert string to boolean with setObject(col, str, Types.BIT)

Client driver fails to convert string to boolean with setObject(col, str, Types.BIT)
------------------------------------------------------------------------------------

                 Key: DERBY-4964
                 URL: https://issues.apache.org/jira/browse/DERBY-4964
             Project: Derby
          Issue Type: Bug
          Components: JDBC
    Affects Versions: 10.7.1.1
            Reporter: Knut Anders Hatlen


The following code

        PreparedStatement ps = c.prepareStatement("values cast(? as boolean)");
        ps.setObject(1, "true", Types.BIT);
        ResultSet rs = ps.executeQuery();
        rs.next();
        System.out.println(rs.getString(1));

executes successfully using the embedded driver, but fails when using the client driver:

Exception in thread "main" java.sql.SQLDataException: Invalid character string format for type INTEGER.
	at org.apache.derby.client.am.SQLExceptionFactory40.getSQLException(Unknown Source)
	at org.apache.derby.client.am.SqlException.getSQLException(Unknown Source)
	at org.apache.derby.client.am.PreparedStatement.setObject(Unknown Source)
	at Test.main(Test.java:8)
Caused by: org.apache.derby.client.am.SqlException: Invalid character string format for type INTEGER.
	at org.apache.derby.client.am.CrossConverters.setObject(Unknown Source)
	at org.apache.derby.client.am.CrossConverters.setObject(Unknown Source)
	at org.apache.derby.client.am.PreparedStatement.setObjectX(Unknown Source)
	... 2 more
Caused by: java.lang.NumberFormatException: For input string: "true"
	at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
	at java.lang.Integer.parseInt(Integer.java:449)
	at java.lang.Integer.valueOf(Integer.java:554)
	... 5 more

This issue was found when running the Java EE CTS with Derby 10.7.1.1.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Updated: (DERBY-4964) Client driver fails to convert string to boolean with setObject(col, str, Types.BIT)

Posted by "Knut Anders Hatlen (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/DERBY-4964?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Knut Anders Hatlen updated DERBY-4964:
--------------------------------------

    Attachment: mapping-test.diff

Attaching a patch that makes ParameterMappingTest expose the bug. ParameterMappingTest only tested setObject(int,Object) before. The patch adds testing of setObject(int,Object,int), which is where the problem is seen. The test passes with the embedded driver and fails on the client driver when the patch is applied.

> Client driver fails to convert string to boolean with setObject(col, str, Types.BIT)
> ------------------------------------------------------------------------------------
>
>                 Key: DERBY-4964
>                 URL: https://issues.apache.org/jira/browse/DERBY-4964
>             Project: Derby
>          Issue Type: Bug
>          Components: JDBC
>    Affects Versions: 10.7.1.1
>            Reporter: Knut Anders Hatlen
>            Assignee: Knut Anders Hatlen
>         Attachments: mapping-test.diff
>
>
> The following code
>         PreparedStatement ps = c.prepareStatement("values cast(? as boolean)");
>         ps.setObject(1, "true", Types.BIT);
>         ResultSet rs = ps.executeQuery();
>         rs.next();
>         System.out.println(rs.getString(1));
> executes successfully using the embedded driver, but fails when using the client driver:
> Exception in thread "main" java.sql.SQLDataException: Invalid character string format for type INTEGER.
> 	at org.apache.derby.client.am.SQLExceptionFactory40.getSQLException(Unknown Source)
> 	at org.apache.derby.client.am.SqlException.getSQLException(Unknown Source)
> 	at org.apache.derby.client.am.PreparedStatement.setObject(Unknown Source)
> 	at Test.main(Test.java:8)
> Caused by: org.apache.derby.client.am.SqlException: Invalid character string format for type INTEGER.
> 	at org.apache.derby.client.am.CrossConverters.setObject(Unknown Source)
> 	at org.apache.derby.client.am.CrossConverters.setObject(Unknown Source)
> 	at org.apache.derby.client.am.PreparedStatement.setObjectX(Unknown Source)
> 	... 2 more
> Caused by: java.lang.NumberFormatException: For input string: "true"
> 	at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
> 	at java.lang.Integer.parseInt(Integer.java:449)
> 	at java.lang.Integer.valueOf(Integer.java:554)
> 	... 5 more
> This issue was found when running the Java EE CTS with Derby 10.7.1.1.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Updated: (DERBY-4964) Client driver fails to convert string to boolean with setObject(col, str, Types.BIT)

Posted by "Knut Anders Hatlen (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/DERBY-4964?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Knut Anders Hatlen updated DERBY-4964:
--------------------------------------

    Issue & fix info: [Repro attached]  (was: [Repro attached, Patch Available])
       Fix Version/s: 10.8.0.0

Committed revision 1059888.

> Client driver fails to convert string to boolean with setObject(col, str, Types.BIT)
> ------------------------------------------------------------------------------------
>
>                 Key: DERBY-4964
>                 URL: https://issues.apache.org/jira/browse/DERBY-4964
>             Project: Derby
>          Issue Type: Bug
>          Components: JDBC
>    Affects Versions: 10.7.1.1
>            Reporter: Knut Anders Hatlen
>            Assignee: Knut Anders Hatlen
>             Fix For: 10.8.0.0
>
>         Attachments: derby-4964-1a.diff, mapping-test.diff
>
>
> The following code
>         PreparedStatement ps = c.prepareStatement("values cast(? as boolean)");
>         ps.setObject(1, "true", Types.BIT);
>         ResultSet rs = ps.executeQuery();
>         rs.next();
>         System.out.println(rs.getString(1));
> executes successfully using the embedded driver, but fails when using the client driver:
> Exception in thread "main" java.sql.SQLDataException: Invalid character string format for type INTEGER.
> 	at org.apache.derby.client.am.SQLExceptionFactory40.getSQLException(Unknown Source)
> 	at org.apache.derby.client.am.SqlException.getSQLException(Unknown Source)
> 	at org.apache.derby.client.am.PreparedStatement.setObject(Unknown Source)
> 	at Test.main(Test.java:8)
> Caused by: org.apache.derby.client.am.SqlException: Invalid character string format for type INTEGER.
> 	at org.apache.derby.client.am.CrossConverters.setObject(Unknown Source)
> 	at org.apache.derby.client.am.CrossConverters.setObject(Unknown Source)
> 	at org.apache.derby.client.am.PreparedStatement.setObjectX(Unknown Source)
> 	... 2 more
> Caused by: java.lang.NumberFormatException: For input string: "true"
> 	at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
> 	at java.lang.Integer.parseInt(Integer.java:449)
> 	at java.lang.Integer.valueOf(Integer.java:554)
> 	... 5 more
> This issue was found when running the Java EE CTS with Derby 10.7.1.1.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Updated: (DERBY-4964) Client driver fails to convert string to boolean with setObject(col, str, Types.BIT)

Posted by "Knut Anders Hatlen (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/DERBY-4964?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Knut Anders Hatlen updated DERBY-4964:
--------------------------------------

    Issue & fix info: [Patch Available, Repro attached]  (was: [Repro attached])

> Client driver fails to convert string to boolean with setObject(col, str, Types.BIT)
> ------------------------------------------------------------------------------------
>
>                 Key: DERBY-4964
>                 URL: https://issues.apache.org/jira/browse/DERBY-4964
>             Project: Derby
>          Issue Type: Bug
>          Components: JDBC
>    Affects Versions: 10.7.1.1
>            Reporter: Knut Anders Hatlen
>            Assignee: Knut Anders Hatlen
>         Attachments: derby-4964-1a.diff, mapping-test.diff
>
>
> The following code
>         PreparedStatement ps = c.prepareStatement("values cast(? as boolean)");
>         ps.setObject(1, "true", Types.BIT);
>         ResultSet rs = ps.executeQuery();
>         rs.next();
>         System.out.println(rs.getString(1));
> executes successfully using the embedded driver, but fails when using the client driver:
> Exception in thread "main" java.sql.SQLDataException: Invalid character string format for type INTEGER.
> 	at org.apache.derby.client.am.SQLExceptionFactory40.getSQLException(Unknown Source)
> 	at org.apache.derby.client.am.SqlException.getSQLException(Unknown Source)
> 	at org.apache.derby.client.am.PreparedStatement.setObject(Unknown Source)
> 	at Test.main(Test.java:8)
> Caused by: org.apache.derby.client.am.SqlException: Invalid character string format for type INTEGER.
> 	at org.apache.derby.client.am.CrossConverters.setObject(Unknown Source)
> 	at org.apache.derby.client.am.CrossConverters.setObject(Unknown Source)
> 	at org.apache.derby.client.am.PreparedStatement.setObjectX(Unknown Source)
> 	... 2 more
> Caused by: java.lang.NumberFormatException: For input string: "true"
> 	at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
> 	at java.lang.Integer.parseInt(Integer.java:449)
> 	at java.lang.Integer.valueOf(Integer.java:554)
> 	... 5 more
> This issue was found when running the Java EE CTS with Derby 10.7.1.1.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Closed: (DERBY-4964) Client driver fails to convert string to boolean with setObject(col, str, Types.BIT)

Posted by "Knut Anders Hatlen (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/DERBY-4964?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Knut Anders Hatlen closed DERBY-4964.
-------------------------------------

       Resolution: Fixed
    Fix Version/s: 10.7.1.3

Merged to 10.7 and committed revision 1059984.

> Client driver fails to convert string to boolean with setObject(col, str, Types.BIT)
> ------------------------------------------------------------------------------------
>
>                 Key: DERBY-4964
>                 URL: https://issues.apache.org/jira/browse/DERBY-4964
>             Project: Derby
>          Issue Type: Bug
>          Components: JDBC
>    Affects Versions: 10.7.1.1
>            Reporter: Knut Anders Hatlen
>            Assignee: Knut Anders Hatlen
>             Fix For: 10.7.1.3, 10.8.0.0
>
>         Attachments: derby-4964-1a.diff, mapping-test.diff
>
>
> The following code
>         PreparedStatement ps = c.prepareStatement("values cast(? as boolean)");
>         ps.setObject(1, "true", Types.BIT);
>         ResultSet rs = ps.executeQuery();
>         rs.next();
>         System.out.println(rs.getString(1));
> executes successfully using the embedded driver, but fails when using the client driver:
> Exception in thread "main" java.sql.SQLDataException: Invalid character string format for type INTEGER.
> 	at org.apache.derby.client.am.SQLExceptionFactory40.getSQLException(Unknown Source)
> 	at org.apache.derby.client.am.SqlException.getSQLException(Unknown Source)
> 	at org.apache.derby.client.am.PreparedStatement.setObject(Unknown Source)
> 	at Test.main(Test.java:8)
> Caused by: org.apache.derby.client.am.SqlException: Invalid character string format for type INTEGER.
> 	at org.apache.derby.client.am.CrossConverters.setObject(Unknown Source)
> 	at org.apache.derby.client.am.CrossConverters.setObject(Unknown Source)
> 	at org.apache.derby.client.am.PreparedStatement.setObjectX(Unknown Source)
> 	... 2 more
> Caused by: java.lang.NumberFormatException: For input string: "true"
> 	at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
> 	at java.lang.Integer.parseInt(Integer.java:449)
> 	at java.lang.Integer.valueOf(Integer.java:554)
> 	... 5 more
> This issue was found when running the Java EE CTS with Derby 10.7.1.1.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Commented: (DERBY-4964) Client driver fails to convert string to boolean with setObject(col, str, Types.BIT)

Posted by "Knut Anders Hatlen (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/jira/browse/DERBY-4964?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12979784#action_12979784 ] 

Knut Anders Hatlen commented on DERBY-4964:
-------------------------------------------

We have the same problem if Types.BIT is replaced with Types.BOOLEAN.

> Client driver fails to convert string to boolean with setObject(col, str, Types.BIT)
> ------------------------------------------------------------------------------------
>
>                 Key: DERBY-4964
>                 URL: https://issues.apache.org/jira/browse/DERBY-4964
>             Project: Derby
>          Issue Type: Bug
>          Components: JDBC
>    Affects Versions: 10.7.1.1
>            Reporter: Knut Anders Hatlen
>
> The following code
>         PreparedStatement ps = c.prepareStatement("values cast(? as boolean)");
>         ps.setObject(1, "true", Types.BIT);
>         ResultSet rs = ps.executeQuery();
>         rs.next();
>         System.out.println(rs.getString(1));
> executes successfully using the embedded driver, but fails when using the client driver:
> Exception in thread "main" java.sql.SQLDataException: Invalid character string format for type INTEGER.
> 	at org.apache.derby.client.am.SQLExceptionFactory40.getSQLException(Unknown Source)
> 	at org.apache.derby.client.am.SqlException.getSQLException(Unknown Source)
> 	at org.apache.derby.client.am.PreparedStatement.setObject(Unknown Source)
> 	at Test.main(Test.java:8)
> Caused by: org.apache.derby.client.am.SqlException: Invalid character string format for type INTEGER.
> 	at org.apache.derby.client.am.CrossConverters.setObject(Unknown Source)
> 	at org.apache.derby.client.am.CrossConverters.setObject(Unknown Source)
> 	at org.apache.derby.client.am.PreparedStatement.setObjectX(Unknown Source)
> 	... 2 more
> Caused by: java.lang.NumberFormatException: For input string: "true"
> 	at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
> 	at java.lang.Integer.parseInt(Integer.java:449)
> 	at java.lang.Integer.valueOf(Integer.java:554)
> 	... 5 more
> This issue was found when running the Java EE CTS with Derby 10.7.1.1.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Updated: (DERBY-4964) Client driver fails to convert string to boolean with setObject(col, str, Types.BIT)

Posted by "Knut Anders Hatlen (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/DERBY-4964?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Knut Anders Hatlen updated DERBY-4964:
--------------------------------------

    Attachment: derby-4964-1a.diff

Attaching a patch to fix this bug. This patch contains more tests. All the new test cases pass with no changes needed when run against the embedded driver. With the fix applied, they also pass when run against the client driver.

ParameterMappingTest.java: Add testing of setObject(int,Object,int) for all types (same as mapping-test.diff).

BooleanValuesTest.java: Add more specific tests for boolean with a wider range of input values.

CrossConverters.java: Add separate cases for converting to boolean and stop handling boolean conversions as integer conversions.

Types.java: Add handling of Types.BIT, so that error messages say "BOOLEAN" instead of "<UNKNOWN>" when attempting invalid conversions like setObject(col, "test", Types.BIT).

All the regression tests ran cleanly with the patch.

> Client driver fails to convert string to boolean with setObject(col, str, Types.BIT)
> ------------------------------------------------------------------------------------
>
>                 Key: DERBY-4964
>                 URL: https://issues.apache.org/jira/browse/DERBY-4964
>             Project: Derby
>          Issue Type: Bug
>          Components: JDBC
>    Affects Versions: 10.7.1.1
>            Reporter: Knut Anders Hatlen
>            Assignee: Knut Anders Hatlen
>         Attachments: derby-4964-1a.diff, mapping-test.diff
>
>
> The following code
>         PreparedStatement ps = c.prepareStatement("values cast(? as boolean)");
>         ps.setObject(1, "true", Types.BIT);
>         ResultSet rs = ps.executeQuery();
>         rs.next();
>         System.out.println(rs.getString(1));
> executes successfully using the embedded driver, but fails when using the client driver:
> Exception in thread "main" java.sql.SQLDataException: Invalid character string format for type INTEGER.
> 	at org.apache.derby.client.am.SQLExceptionFactory40.getSQLException(Unknown Source)
> 	at org.apache.derby.client.am.SqlException.getSQLException(Unknown Source)
> 	at org.apache.derby.client.am.PreparedStatement.setObject(Unknown Source)
> 	at Test.main(Test.java:8)
> Caused by: org.apache.derby.client.am.SqlException: Invalid character string format for type INTEGER.
> 	at org.apache.derby.client.am.CrossConverters.setObject(Unknown Source)
> 	at org.apache.derby.client.am.CrossConverters.setObject(Unknown Source)
> 	at org.apache.derby.client.am.PreparedStatement.setObjectX(Unknown Source)
> 	... 2 more
> Caused by: java.lang.NumberFormatException: For input string: "true"
> 	at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
> 	at java.lang.Integer.parseInt(Integer.java:449)
> 	at java.lang.Integer.valueOf(Integer.java:554)
> 	... 5 more
> This issue was found when running the Java EE CTS with Derby 10.7.1.1.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Assigned: (DERBY-4964) Client driver fails to convert string to boolean with setObject(col, str, Types.BIT)

Posted by "Knut Anders Hatlen (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/DERBY-4964?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Knut Anders Hatlen reassigned DERBY-4964:
-----------------------------------------

    Assignee: Knut Anders Hatlen

> Client driver fails to convert string to boolean with setObject(col, str, Types.BIT)
> ------------------------------------------------------------------------------------
>
>                 Key: DERBY-4964
>                 URL: https://issues.apache.org/jira/browse/DERBY-4964
>             Project: Derby
>          Issue Type: Bug
>          Components: JDBC
>    Affects Versions: 10.7.1.1
>            Reporter: Knut Anders Hatlen
>            Assignee: Knut Anders Hatlen
>
> The following code
>         PreparedStatement ps = c.prepareStatement("values cast(? as boolean)");
>         ps.setObject(1, "true", Types.BIT);
>         ResultSet rs = ps.executeQuery();
>         rs.next();
>         System.out.println(rs.getString(1));
> executes successfully using the embedded driver, but fails when using the client driver:
> Exception in thread "main" java.sql.SQLDataException: Invalid character string format for type INTEGER.
> 	at org.apache.derby.client.am.SQLExceptionFactory40.getSQLException(Unknown Source)
> 	at org.apache.derby.client.am.SqlException.getSQLException(Unknown Source)
> 	at org.apache.derby.client.am.PreparedStatement.setObject(Unknown Source)
> 	at Test.main(Test.java:8)
> Caused by: org.apache.derby.client.am.SqlException: Invalid character string format for type INTEGER.
> 	at org.apache.derby.client.am.CrossConverters.setObject(Unknown Source)
> 	at org.apache.derby.client.am.CrossConverters.setObject(Unknown Source)
> 	at org.apache.derby.client.am.PreparedStatement.setObjectX(Unknown Source)
> 	... 2 more
> Caused by: java.lang.NumberFormatException: For input string: "true"
> 	at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
> 	at java.lang.Integer.parseInt(Integer.java:449)
> 	at java.lang.Integer.valueOf(Integer.java:554)
> 	... 5 more
> This issue was found when running the Java EE CTS with Derby 10.7.1.1.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.