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))
 {

Reply via email to