This is an automated email from the ASF dual-hosted git repository.
panjuan 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 87c7887 Avoid NPE when executeBatch without addBatch in
ShardingSphere-JDBC (#15768)
87c7887 is described below
commit 87c78879946b68d3bb3d296460a045ea9f87a286
Author: 吴伟杰 <[email protected]>
AuthorDate: Thu Mar 3 11:45:43 2022 +0800
Avoid NPE when executeBatch without addBatch in ShardingSphere-JDBC (#15768)
---
.../statement/ShardingSpherePreparedStatement.java | 3 +++
.../statement/ShardingSpherePreparedStatementTest.java | 18 ++++++++++++++----
2 files changed, 17 insertions(+), 4 deletions(-)
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 0d68894..60eea4a 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
@@ -526,6 +526,9 @@ public final class ShardingSpherePreparedStatement extends
AbstractPreparedState
@Override
public int[] executeBatch() throws SQLException {
+ if (null == executionContext) {
+ return new int[0];
+ }
try {
// TODO add raw SQL executor
initBatchPreparedStatementExecutor();
diff --git
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatementTest.java
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatementTest.java
index 8fb7524..1c5b9cb 100644
---
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatementTest.java
+++
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatementTest.java
@@ -48,7 +48,7 @@ public final class ShardingSpherePreparedStatementTest
extends AbstractShardingS
private static final String INSERT_WITH_GENERATE_KEY_SQL_WITH_MULTI_VALUES
= "INSERT INTO t_order_item (item_id, order_id, user_id, status) VALUES (1, ?,
?, ?), (2, ?, ?, ?)";
private static final String INSERT_ON_DUPLICATE_KEY_SQL = "INSERT INTO
t_order_item (item_id, order_id, user_id, status) VALUES (?, ?, ?, ?), (?, ?,
?, ?) ON DUPLICATE KEY UPDATE status = ?";
-
+
private static final String INSERT_NO_SHARDING_SQL = "INSERT INTO t_sys_0
(param_key, param_value) VALUES (?, ?)";
private static final String SELECT_SQL_WITHOUT_PARAMETER_MARKER = "SELECT
item_id FROM t_order_item WHERE user_id = %d AND order_id= %s AND status =
'BATCH'";
@@ -60,9 +60,9 @@ public final class ShardingSpherePreparedStatementTest
extends AbstractShardingS
private static final String SELECT_WITH_ORDER_BY = "SELECT order_id,
user_id, status FROM t_order ORDER BY order_id";
private static final String SELECT_AUTO_SQL = "SELECT item_id, order_id,
status FROM t_order_item_auto WHERE order_id >= ?";
-
+
private static final String SELECT_SQL_COLUMN_WITH_PARAMETER_MARKER =
"SELECT ?, order_id, status FROM t_order_item_auto";
-
+
private static final String UPDATE_SQL = "UPDATE t_order SET status = ?
WHERE user_id = ? AND order_id = ?";
private static final String UPDATE_AUTO_SQL = "UPDATE t_order_auto SET
status = ? WHERE order_id = ?";
@@ -72,6 +72,16 @@ public final class ShardingSpherePreparedStatementTest
extends AbstractShardingS
private static final String UPDATE_WITH_ERROR_COLUMN = "UPDATE t_order SET
error_column=?";
@Test
+ public void assertExecuteBatchWithoutAddBatch() throws SQLException {
+ try (
+ Connection connection =
getShardingSphereDataSource().getConnection();
+ PreparedStatement preparedStatement =
connection.prepareStatement(INSERT_WITH_GENERATE_KEY_SQL)) {
+ int[] actual = preparedStatement.executeBatch();
+ assertThat(actual, is(new int[0]));
+ }
+ }
+
+ @Test
public void assertAddBatch() throws SQLException {
try (
Connection connection =
getShardingSphereDataSource().getConnection();
@@ -488,7 +498,7 @@ public final class ShardingSpherePreparedStatementTest
extends AbstractShardingS
assertNull(preparedStatement.getResultSet());
}
}
-
+
@Test
public void assertExecuteSelectColumnGetResultSet() throws SQLException {
try (PreparedStatement preparedStatement =
getShardingSphereDataSource().getConnection().prepareStatement(SELECT_SQL_COLUMN_WITH_PARAMETER_MARKER))
{