You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by zh...@apache.org on 2022/07/30 01:29:31 UTC

[shardingsphere] branch master updated: fix 18904(#18904) (#18905)

This is an automated email from the ASF dual-hosted git repository.

zhangliang 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 2ac65b30884 fix 18904(#18904) (#18905)
2ac65b30884 is described below

commit 2ac65b3088460ac939704d4b551df6b5d2c0198b
Author: yunmengmeng <46...@users.noreply.github.com>
AuthorDate: Sat Jul 30 09:29:25 2022 +0800

    fix 18904(#18904) (#18905)
    
    * fix 18904(#18904)
    
    Co-authored-by: ‘huxin’ <‘huxin@pinming.cn’>
---
 .../statement/ShardingSpherePreparedStatement.java |  1 +
 .../ReadwriteSplittingPreparedStatementTest.java   | 26 ++++++++++++++++++++++
 2 files changed, 27 insertions(+)

diff --git a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
index 639a9a3b832..f8b7a99d9d0 100644
--- a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
+++ b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
@@ -524,6 +524,7 @@ public final class ShardingSpherePreparedStatement extends AbstractPreparedState
     private void clearPrevious() {
         statements.clear();
         parameterSets.clear();
+        generatedValues.clear();
     }
     
     private Optional<GeneratedKeyContext> findGeneratedKey(final ExecutionContext executionContext) {
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 c8d57562102..f94fafc88dd 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
@@ -20,12 +20,14 @@ package org.apache.shardingsphere.driver.jdbc.core.statement;
 import org.apache.shardingsphere.driver.jdbc.base.AbstractShardingSphereDataSourceForReadwriteSplittingTest;
 import org.junit.Test;
 
+import java.sql.Connection;
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.sql.Statement;
 
 import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.not;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertThat;
@@ -92,4 +94,28 @@ public final class ReadwriteSplittingPreparedStatementTest extends AbstractShard
             assertFalse(generatedKeys.next());
         }
     }
+    
+    @Test
+    public void assertGetGeneratedKeysWithPrimaryKeyIsNullInTransactional() throws SQLException {
+        try (
+                Connection connection = getReadwriteSplittingDataSource()
+                        .getConnection();
+                PreparedStatement preparedStatement = connection.prepareStatement("INSERT INTO t_config(id, status) VALUES(?, ?);", Statement.RETURN_GENERATED_KEYS)) {
+            connection.setAutoCommit(false);
+            Object lastGeneratedId = null;
+            Object generatedId = null;
+            for (int i = 1; i <= 3; i++) {
+                preparedStatement.setObject(1, null);
+                preparedStatement.setString(2, "OK");
+                preparedStatement.executeUpdate();
+                ResultSet generatedKeys = preparedStatement.getGeneratedKeys();
+                assertTrue(generatedKeys.next());
+                generatedId = generatedKeys.getObject(1);
+                assertThat(generatedId, not(lastGeneratedId));
+                lastGeneratedId = generatedId;
+                assertFalse(generatedKeys.next());
+            }
+            connection.commit();
+        }
+    }
 }