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