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());
+        }
+    }
 }