camel-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Nathan Wray (JIRA)" <j...@apache.org>
Subject [jira] [Updated] (CAMEL-7803) DefaultJdbcPrepareStatementStrategy Iterator fails on null value inserts
Date Fri, 12 Sep 2014 17:52:35 GMT

     [ https://issues.apache.org/jira/browse/CAMEL-7803?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Nathan Wray updated CAMEL-7803:
-------------------------------
    Description: 
The iterator returned by createPopulateIterator in DefaultJdbcPrepareStatementStrategy incorrectly
uses a next value of "null" to identify when it has run out of parameters.  This fails when
the parameter map intentionally contains a name with a null value, which is the case when
some columns in an insert should be set to null.  The attached pull request adds an explicit
preFetch flag and relies on the done flag, avoiding the incorrect overloading of (next==null)
to indicate completion.

The iterator reports "hasNext() == false" when it encounters a map value of null.  This happens
when using the map header JDBC_PARAMETERS = "CamelJdbcParameters" to insert null values with
a prepared statement.  The Iterator ends prematurely when it reaches a parameter name with
a null value.  

For example, passing in a map where the 3rd parameter of 19 has a value of null causes the
following exception to be thrown:

java.sql.SQLException: Number of parameters mismatch. Expected: 19, was:2
        at org.apache.camel.component.jdbc.DefaultJdbcPrepareStatementStrategy.populateStatement(DefaultJdbcPrepareStatementStrategy.java:137)
        at org.apache.camel.component.jdbc.JdbcProducer.doCreateAndExecuteSqlStatementWithHeaders(JdbcProducer.java:133)
        at org.apache.camel.component.jdbc.JdbcProducer.createAndExecuteSqlStatement(JdbcProducer.java:116)
        at org.apache.camel.component.jdbc.JdbcProducer.processingSqlBySettingAutoCommit(JdbcProducer.java:85)





  was:
The iterator returned by createPopulateIterator in DefaultJdbcPrepareStatementStrategy reports
"hasNext() == false" when it encounters a map value of null.  This happens when using the
map header JDBC_PARAMETERS = "CamelJdbcParameters" to insert null values with a prepared statement.
 The Iterator ends prematurely when it reaches a parameter name with a null value.  

For example, passing in a map where the 3rd parameter of 19 has a value of null causes the
following exception to be thrown:

java.sql.SQLException: Number of parameters mismatch. Expected: 19, was:2
        at org.apache.camel.component.jdbc.DefaultJdbcPrepareStatementStrategy.populateStatement(DefaultJdbcPrepareStatementStrategy.java:137)
        at org.apache.camel.component.jdbc.JdbcProducer.doCreateAndExecuteSqlStatementWithHeaders(JdbcProducer.java:133)
        at org.apache.camel.component.jdbc.JdbcProducer.createAndExecuteSqlStatement(JdbcProducer.java:116)
        at org.apache.camel.component.jdbc.JdbcProducer.processingSqlBySettingAutoCommit(JdbcProducer.java:85)






> DefaultJdbcPrepareStatementStrategy Iterator fails on null value inserts
> ------------------------------------------------------------------------
>
>                 Key: CAMEL-7803
>                 URL: https://issues.apache.org/jira/browse/CAMEL-7803
>             Project: Camel
>          Issue Type: Bug
>          Components: camel-jdbc
>    Affects Versions: 2.13.2, Future
>            Reporter: Nathan Wray
>         Attachments: 7803-patch.txt
>
>
> The iterator returned by createPopulateIterator in DefaultJdbcPrepareStatementStrategy
incorrectly uses a next value of "null" to identify when it has run out of parameters.  This
fails when the parameter map intentionally contains a name with a null value, which is the
case when some columns in an insert should be set to null.  The attached pull request adds
an explicit preFetch flag and relies on the done flag, avoiding the incorrect overloading
of (next==null) to indicate completion.
> The iterator reports "hasNext() == false" when it encounters a map value of null.  This
happens when using the map header JDBC_PARAMETERS = "CamelJdbcParameters" to insert null values
with a prepared statement.  The Iterator ends prematurely when it reaches a parameter name
with a null value.  
> For example, passing in a map where the 3rd parameter of 19 has a value of null causes
the following exception to be thrown:
> java.sql.SQLException: Number of parameters mismatch. Expected: 19, was:2
>         at org.apache.camel.component.jdbc.DefaultJdbcPrepareStatementStrategy.populateStatement(DefaultJdbcPrepareStatementStrategy.java:137)
>         at org.apache.camel.component.jdbc.JdbcProducer.doCreateAndExecuteSqlStatementWithHeaders(JdbcProducer.java:133)
>         at org.apache.camel.component.jdbc.JdbcProducer.createAndExecuteSqlStatement(JdbcProducer.java:116)
>         at org.apache.camel.component.jdbc.JdbcProducer.processingSqlBySettingAutoCommit(JdbcProducer.java:85)



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Mime
View raw message