You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by du...@apache.org on 2022/06/08 08:31:28 UTC
[shardingsphere] branch master updated: Handle the case where the value of the insert primary key field is null (#18224)
This is an automated email from the ASF dual-hosted git repository.
duanzhengqiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git
The following commit(s) were added to refs/heads/master by this push:
new 5c9043ecd72 Handle the case where the value of the insert primary key field is null (#18224)
5c9043ecd72 is described below
commit 5c9043ecd72da14609cea0dae8830ec88d5b8483
Author: zhaojinchao <zh...@apache.org>
AuthorDate: Wed Jun 8 16:31:21 2022 +0800
Handle the case where the value of the insert primary key field is null (#18224)
* Handle the case where the value of the insert primary key field is null
* Add unit test.
---
.../keygen/engine/GeneratedKeyContextEngine.java | 4 +++-
.../ReadwriteSplittingPreparedStatementTest.java | 20 ++++++++++++++++++++
2 files changed, 23 insertions(+), 1 deletion(-)
diff --git a/shardingsphere-infra/shardingsphere-infra-binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/insert/keygen/engine/GeneratedKeyContextEngine.java b/shardingsphere-infra/shardingsphere-infra-binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/insert/keygen/engine/GeneratedKeyContextEngine.java
index 1e3b0aa8f4c..dd79db9ae89 100644
--- a/shardingsphere-infra/shardingsphere-infra-binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/insert/keygen/engine/GeneratedKeyContextEngine.java
+++ b/shardingsphere-infra/shardingsphere-infra-binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/insert/keygen/engine/GeneratedKeyContextEngine.java
@@ -98,7 +98,9 @@ public final class GeneratedKeyContextEngine {
if (parameters.isEmpty()) {
continue;
}
- result.getGeneratedValues().add((Comparable<?>) parameters.get(((ParameterMarkerExpressionSegment) each).getParameterMarkerIndex()));
+ if (null != parameters.get(((ParameterMarkerExpressionSegment) each).getParameterMarkerIndex())) {
+ result.getGeneratedValues().add((Comparable<?>) parameters.get(((ParameterMarkerExpressionSegment) each).getParameterMarkerIndex()));
+ }
} else if (each instanceof LiteralExpressionSegment) {
result.getGeneratedValues().add((Comparable<?>) ((LiteralExpressionSegment) each).getLiterals());
}
diff --git a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/statement/ReadwriteSplittingPreparedStatementTest.java b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/statement/ReadwriteSplittingPreparedStatementTest.java
index 8025b0bcb9a..c8d57562102 100644
--- a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/statement/ReadwriteSplittingPreparedStatementTest.java
+++ b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/statement/ReadwriteSplittingPreparedStatementTest.java
@@ -72,4 +72,24 @@ public final class ReadwriteSplittingPreparedStatementTest extends AbstractShard
assertFalse(generatedKeys.next());
}
}
+
+ @Test
+ public void assertGetGeneratedKeysWithPrimaryKeyIsNull() throws SQLException {
+ try (
+ PreparedStatement preparedStatement = getReadwriteSplittingDataSource()
+ .getConnection().prepareStatement("INSERT INTO t_config(id, status) VALUES(?, ?);", Statement.RETURN_GENERATED_KEYS)) {
+ preparedStatement.setObject(1, null);
+ preparedStatement.setString(2, "OK");
+ preparedStatement.executeUpdate();
+ ResultSet generatedKeys = preparedStatement.getGeneratedKeys();
+ assertTrue(generatedKeys.next());
+ int columnCount = generatedKeys.getMetaData().getColumnCount();
+ for (int index = 0; index < columnCount; index++) {
+ assertNotNull(generatedKeys.getObject(index + 1));
+ assertNotNull(generatedKeys.getMetaData().getColumnLabel(index + 1));
+ assertNotNull(generatedKeys.getMetaData().getColumnName(index + 1));
+ }
+ assertFalse(generatedKeys.next());
+ }
+ }
}