[ https://issues.apache.org/jira/browse/FLINK-15728?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Jark Wu updated FLINK-15728: ---------------------------- Fix Version/s: 1.12.0 > JDBCUpsertOutputFormat does not set bind parameter keyFields in > updateStatement > ------------------------------------------------------------------------------- > > Key: FLINK-15728 > URL: https://issues.apache.org/jira/browse/FLINK-15728 > Project: Flink > Issue Type: Bug > Components: Connectors / JDBC > Affects Versions: 1.9.1 > Reporter: Bhagavan > Assignee: Bhagavan > Priority: Critical > Fix For: 1.12.0 > > > When using JDBCUpsertOutputFormat custom dialect e.g. H2/Oracle which uses > UpsertWriterUsingInsertUpdateStatement, code fails with below error. > {code:java} > Caused by: org.h2.jdbc.JdbcSQLDataException: Parameter "#6" is not set > [90012-200] > at org.h2.message.DbException.getJdbcSQLException(DbException.java:590) > at org.h2.message.DbException.getJdbcSQLException(DbException.java:429) > at org.h2.message.DbException.get(DbException.java:205) > at org.h2.message.DbException.get(DbException.java:181) > at org.h2.expression.Parameter.checkSet(Parameter.java:83) > at > org.h2.jdbc.JdbcPreparedStatement.addBatch(JdbcPreparedStatement.java:1275) > at > org.apache.flink.api.java.io.jdbc.writer.UpsertWriter$UpsertWriterUsingInsertUpdateStatement.processOneRowInBatch(UpsertWriter.java:233) > > at > org.apache.flink.api.java.io.jdbc.writer.UpsertWriter.executeBatch(UpsertWriter.java:111) > {code} > This is due to UpsertWriterUsingInsertUpdateStatement#processOneRowInBatch > does not set all bind paramters in case of Update. > This bug does get surfaced while using Derby DB. > In JDBCUpsertOutputFormatTest if we replace Derby with H2 we can reproduce > the bug. > The fix is trivial. Happy to raise PR. > {code:java} > //for update case replace below > setRecordToStatement(updateStatement, fieldTypes, row); > //with > setRecordToStatement(updateStatement, fieldTypes + pkTypes, row + pkRow); > //NOTE: as prepared updateStatement contains additional where clause we need > pass additional bind values and its sql Types > {code} -- This message was sent by Atlassian Jira (v8.3.4#803005)