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 65be7cf73c0 Fix IndexOutOfBoundsException when execute set variable 
statement int jdbc adapter (#24125)
65be7cf73c0 is described below

commit 65be7cf73c07bb029970d09f453487bc66feb385
Author: Zhengqiang Duan <[email protected]>
AuthorDate: Sun Feb 12 19:58:03 2023 +0800

    Fix IndexOutOfBoundsException when execute set variable statement int jdbc 
adapter (#24125)
---
 .../statement/ShardingSpherePreparedStatement.java     |  7 ++++++-
 .../jdbc/core/statement/ShardingSphereStatement.java   |  7 ++++++-
 .../e2e/discovery/cases/base/BaseDiscoveryE2EIT.java   |  4 ++--
 .../shardingsphere/test/e2e/cases/SQLCommandType.java  |  2 +-
 .../test/e2e/cases/assertion/IntegrationTestCase.java  |  3 +++
 .../test/e2e/engine/dal/GeneralDALE2EIT.java           | 18 +++++++++++++++---
 .../param/array/E2ETestParameterGenerator.java         |  6 +++++-
 ...al-integration-show.xml => dal-integration-set.xml} |  7 +++++--
 .../test/resources/cases/dal/dal-integration-show.xml  |  2 +-
 .../select_session_variables.xml}                      | 13 +++++++------
 10 files changed, 51 insertions(+), 18 deletions(-)

diff --git 
a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
 
b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
index 16263969a86..948c61a2b63 100644
--- 
a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
+++ 
b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
@@ -515,6 +515,9 @@ public final class ShardingSpherePreparedStatement extends 
AbstractPreparedState
         }
         if (executionContext.getSqlStatementContext() instanceof 
SelectStatementContext || 
executionContext.getSqlStatementContext().getSqlStatement() instanceof 
DALStatement) {
             List<ResultSet> resultSets = getResultSets();
+            if (resultSets.isEmpty()) {
+                return currentResultSet;
+            }
             MergedResult mergedResult = 
mergeQuery(getQueryResults(resultSets));
             Map<String, Integer> columnLabelAndIndexMap = null != 
this.columnLabelAndIndexMap ? this.columnLabelAndIndexMap
                     : (this.columnLabelAndIndexMap = 
ShardingSphereResultSetUtil.createColumnLabelAndIndexMap(sqlStatementContext, 
resultSets.get(0).getMetaData()));
@@ -526,7 +529,9 @@ public final class ShardingSpherePreparedStatement extends 
AbstractPreparedState
     private List<ResultSet> getResultSets() throws SQLException {
         List<ResultSet> result = new ArrayList<>(statements.size());
         for (Statement each : statements) {
-            result.add(each.getResultSet());
+            if (null != each.getResultSet()) {
+                result.add(each.getResultSet());
+            }
         }
         return result;
     }
diff --git 
a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
 
b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
index 1296ad39076..6abd9254e88 100644
--- 
a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
+++ 
b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
@@ -610,6 +610,9 @@ public final class ShardingSphereStatement extends 
AbstractStatementAdapter {
         }
         if (executionContext.getSqlStatementContext() instanceof 
SelectStatementContext || 
executionContext.getSqlStatementContext().getSqlStatement() instanceof 
DALStatement) {
             List<ResultSet> resultSets = getResultSets();
+            if (resultSets.isEmpty()) {
+                return currentResultSet;
+            }
             MergedResult mergedResult = 
mergeQuery(getQueryResults(resultSets));
             currentResultSet = new ShardingSphereResultSet(resultSets, 
mergedResult, this, executionContext);
         }
@@ -619,7 +622,9 @@ public final class ShardingSphereStatement extends 
AbstractStatementAdapter {
     private List<ResultSet> getResultSets() throws SQLException {
         List<ResultSet> result = new ArrayList<>(statements.size());
         for (Statement each : statements) {
-            result.add(each.getResultSet());
+            if (null != each.getResultSet()) {
+                result.add(each.getResultSet());
+            }
         }
         return result;
     }
diff --git 
a/test/e2e/discovery/src/test/java/org/apache/shardingsphere/test/e2e/discovery/cases/base/BaseDiscoveryE2EIT.java
 
b/test/e2e/discovery/src/test/java/org/apache/shardingsphere/test/e2e/discovery/cases/base/BaseDiscoveryE2EIT.java
index 3cef8147bbc..eb901a19f38 100644
--- 
a/test/e2e/discovery/src/test/java/org/apache/shardingsphere/test/e2e/discovery/cases/base/BaseDiscoveryE2EIT.java
+++ 
b/test/e2e/discovery/src/test/java/org/apache/shardingsphere/test/e2e/discovery/cases/base/BaseDiscoveryE2EIT.java
@@ -131,8 +131,8 @@ public abstract class BaseDiscoveryE2EIT {
         mgrEnvironment.getDataSources().remove(getPrimaryDataSourceName());
         String closedRoutingDataSourceName = 
getCloseReplicationDataSourceName(mgrEnvironment);
         mgrEnvironment.getDataSources().remove(closedRoutingDataSourceName);
-        Awaitility.await().atMost(Durations.ONE_MINUTE).until(() ->
-                
getRouteDataSourceName().equals(Objects.requireNonNull(mgrEnvironment.getDataSources().entrySet().stream().findFirst().orElse(null)).getKey()));
+        Awaitility.await().atMost(Durations.ONE_MINUTE)
+                .until(() -> 
getRouteDataSourceName().equals(Objects.requireNonNull(mgrEnvironment.getDataSources().entrySet().stream().findFirst().orElse(null)).getKey()));
     }
     
     private String getCloseReplicationDataSourceName(final 
DatabaseClusterEnvironment mgrEnvironment) throws SQLException {
diff --git 
a/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/cases/SQLCommandType.java
 
b/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/cases/SQLCommandType.java
index e87f4cf5eb2..8d16e72cd9a 100644
--- 
a/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/cases/SQLCommandType.java
+++ 
b/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/cases/SQLCommandType.java
@@ -72,7 +72,7 @@ public enum SQLCommandType {
     /**
      * Database administrator Language.
      */
-    DAL(DALStatement.class, "dal-integration", true, 
Collections.singletonList("proxy")),
+    DAL(DALStatement.class, "dal-integration", true, Arrays.asList("jdbc", 
"proxy")),
     
     /**
      * Database control Language.
diff --git 
a/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/cases/assertion/IntegrationTestCase.java
 
b/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/cases/assertion/IntegrationTestCase.java
index 7c2ae1a9ffd..2c2aedda48b 100644
--- 
a/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/cases/assertion/IntegrationTestCase.java
+++ 
b/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/cases/assertion/IntegrationTestCase.java
@@ -47,6 +47,9 @@ public final class IntegrationTestCase {
     @XmlAttribute(name = "scenario-comments")
     private String scenarioComments;
     
+    @XmlAttribute(name = "adapters")
+    private String adapters;
+    
     @XmlElement(name = "assertion")
     private Collection<IntegrationTestCaseAssertion> assertions = new 
LinkedList<>();
 }
diff --git 
a/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/dal/GeneralDALE2EIT.java
 
b/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/dal/GeneralDALE2EIT.java
index c578f2f22ce..db2daee79b9 100644
--- 
a/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/dal/GeneralDALE2EIT.java
+++ 
b/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/dal/GeneralDALE2EIT.java
@@ -47,10 +47,22 @@ public final class GeneralDALE2EIT extends BaseDALE2EIT {
     @Test
     public void assertExecute() throws SQLException, ParseException {
         try (Connection connection = getTargetDataSource().getConnection()) {
-            try (
-                    Statement statement = connection.createStatement();
-                    ResultSet resultSet = statement.executeQuery(getSQL())) {
+            try (Statement statement = connection.createStatement()) {
+                statement.execute(getSQL());
+                assertExecuteResult(statement);
+            }
+        }
+    }
+    
+    private void assertExecuteResult(final Statement statement) throws 
SQLException {
+        try (ResultSet resultSet = statement.getResultSet()) {
+            if (null == getAssertion().getAssertionSQL()) {
                 assertResultSet(resultSet);
+            } else {
+                statement.execute(getAssertion().getAssertionSQL().getSql());
+                try (ResultSet assertionSQLResultSet = 
statement.getResultSet()) {
+                    assertResultSet(assertionSQLResultSet);
+                }
             }
         }
     }
diff --git 
a/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/framework/param/array/E2ETestParameterGenerator.java
 
b/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/framework/param/array/E2ETestParameterGenerator.java
index e701e326aad..60810887ec2 100644
--- 
a/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/framework/param/array/E2ETestParameterGenerator.java
+++ 
b/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/framework/param/array/E2ETestParameterGenerator.java
@@ -104,7 +104,7 @@ public final class E2ETestParameterGenerator {
                                                                          final 
DatabaseType databaseType, final SQLExecuteType sqlExecuteType,
                                                                          final 
IntegrationTestCaseAssertion assertion, final SQLCommandType sqlCommandType) {
         Collection<AssertionTestParameter> result = new LinkedList<>();
-        for (String each : envAdapters) {
+        for (String each : 
getEnvAdapters(testCaseContext.getTestCase().getAdapters())) {
             if (sqlCommandType.getRunningAdaptors().contains(each)) {
                 result.addAll(getAssertionTestParameter(testCaseContext, 
assertion, each, databaseType, sqlExecuteType, sqlCommandType));
             }
@@ -120,6 +120,10 @@ public final class E2ETestParameterGenerator {
                 .map(each -> new AssertionTestParameter(testCaseContext, 
assertion, adapter, each, envMode, databaseType, 
sqlExecuteType)).collect(Collectors.toList());
     }
     
+    private Collection<String> getEnvAdapters(final String envAdapters) {
+        return Strings.isNullOrEmpty(envAdapters) ? this.envAdapters : 
Splitter.on(',').trimResults().splitToList(envAdapters);
+    }
+    
     private boolean filterScenarios(final String scenario, final 
Collection<String> scenarios, final Class<? extends SQLStatement> 
sqlStatementClass) {
         if (sqlStatementClass == RALStatement.class) {
             return "empty_rules".equals(scenario);
diff --git 
a/test/e2e/suite/src/test/resources/cases/dal/dal-integration-show.xml 
b/test/e2e/suite/src/test/resources/cases/dal/dal-integration-set.xml
similarity index 70%
copy from test/e2e/suite/src/test/resources/cases/dal/dal-integration-show.xml
copy to test/e2e/suite/src/test/resources/cases/dal/dal-integration-set.xml
index 9bdba74996f..03e14948c4c 100644
--- a/test/e2e/suite/src/test/resources/cases/dal/dal-integration-show.xml
+++ b/test/e2e/suite/src/test/resources/cases/dal/dal-integration-set.xml
@@ -17,7 +17,10 @@
   -->
 
 <integration-test-cases>
-    <test-case sql="SHOW DATABASES" db-types="MySQL" 
scenario-types="dbtbl_with_readwrite_splitting,readwrite_splitting,dbtbl_with_readwrite_splitting_and_encrypt,sharding_and_encrypt,encrypt_and_readwrite_splitting">
-        <assertion expected-data-file="show_databases.xml" />
+    <!-- TODO support set variable statement for proxy adapter in issue #24124 
-->
+    <test-case sql="SET @order_id := 1, @item_id := 2" db-types="MySQL" 
scenario-types="db,tbl,readwrite_splitting,encrypt,shadow" adapters="jdbc">
+        <assertion expected-data-file="select_session_variables.xml">
+            <assertion-sql sql="SELECT @order_id, @item_id" />
+        </assertion>
     </test-case>
 </integration-test-cases>
diff --git 
a/test/e2e/suite/src/test/resources/cases/dal/dal-integration-show.xml 
b/test/e2e/suite/src/test/resources/cases/dal/dal-integration-show.xml
index 9bdba74996f..f550610a5b6 100644
--- a/test/e2e/suite/src/test/resources/cases/dal/dal-integration-show.xml
+++ b/test/e2e/suite/src/test/resources/cases/dal/dal-integration-show.xml
@@ -17,7 +17,7 @@
   -->
 
 <integration-test-cases>
-    <test-case sql="SHOW DATABASES" db-types="MySQL" 
scenario-types="dbtbl_with_readwrite_splitting,readwrite_splitting,dbtbl_with_readwrite_splitting_and_encrypt,sharding_and_encrypt,encrypt_and_readwrite_splitting">
+    <test-case sql="SHOW DATABASES" db-types="MySQL" 
scenario-types="dbtbl_with_readwrite_splitting,readwrite_splitting,dbtbl_with_readwrite_splitting_and_encrypt,sharding_and_encrypt,encrypt_and_readwrite_splitting"
 adapters="proxy">
         <assertion expected-data-file="show_databases.xml" />
     </test-case>
 </integration-test-cases>
diff --git 
a/test/e2e/suite/src/test/resources/cases/dal/dal-integration-show.xml 
b/test/e2e/suite/src/test/resources/cases/dal/dataset/select_session_variables.xml
similarity index 67%
copy from test/e2e/suite/src/test/resources/cases/dal/dal-integration-show.xml
copy to 
test/e2e/suite/src/test/resources/cases/dal/dataset/select_session_variables.xml
index 9bdba74996f..8f2417ea666 100644
--- a/test/e2e/suite/src/test/resources/cases/dal/dal-integration-show.xml
+++ 
b/test/e2e/suite/src/test/resources/cases/dal/dataset/select_session_variables.xml
@@ -1,4 +1,3 @@
-<?xml version="1.0" encoding="UTF-8"?>
 <!--
   ~ Licensed to the Apache Software Foundation (ASF) under one or more
   ~ contributor license agreements.  See the NOTICE file distributed with
@@ -16,8 +15,10 @@
   ~ limitations under the License.
   -->
 
-<integration-test-cases>
-    <test-case sql="SHOW DATABASES" db-types="MySQL" 
scenario-types="dbtbl_with_readwrite_splitting,readwrite_splitting,dbtbl_with_readwrite_splitting_and_encrypt,sharding_and_encrypt,encrypt_and_readwrite_splitting">
-        <assertion expected-data-file="show_databases.xml" />
-    </test-case>
-</integration-test-cases>
+<dataset>
+    <metadata>
+        <column name="@order_id" />
+        <column name="@item_id" />
+    </metadata>
+    <row values="1, 2" />
+</dataset>

Reply via email to