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 2020/09/03 07:22:34 UTC

[shardingsphere] branch master updated: Compatible with INSERT...RETURNING IT (#7231)

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

zhangyonglun 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 f6214ea  Compatible with INSERT...RETURNING IT (#7231)
f6214ea is described below

commit f6214ea9c36c16db480eab69f68559bc74189ed3
Author: sandynz <42...@users.noreply.github.com>
AuthorDate: Thu Sep 3 15:22:11 2020 +0800

    Compatible with INSERT...RETURNING IT (#7231)
---
 .../dml/DMLIntegrateTestCaseAssertion.java         |  4 ++++
 .../dbtest/engine/dml/GeneralDMLIT.java            | 22 ++++++++++++++++++++++
 .../cases/dml/dml-integrate-test-cases.xml         |  2 +-
 3 files changed, 27 insertions(+), 1 deletion(-)

diff --git a/shardingsphere-integration-test/shardingsphere-test-suite/src/test/java/org/apache/shardingsphere/dbtest/cases/assertion/dml/DMLIntegrateTestCaseAssertion.java b/shardingsphere-integration-test/shardingsphere-test-suite/src/test/java/org/apache/shardingsphere/dbtest/cases/assertion/dml/DMLIntegrateTestCaseAssertion.java
index ba18d2b..b21021e 100644
--- a/shardingsphere-integration-test/shardingsphere-test-suite/src/test/java/org/apache/shardingsphere/dbtest/cases/assertion/dml/DMLIntegrateTestCaseAssertion.java
+++ b/shardingsphere-integration-test/shardingsphere-test-suite/src/test/java/org/apache/shardingsphere/dbtest/cases/assertion/dml/DMLIntegrateTestCaseAssertion.java
@@ -17,6 +17,7 @@
 
 package org.apache.shardingsphere.dbtest.cases.assertion.dml;
 
+import javax.xml.bind.annotation.XmlAttribute;
 import lombok.Getter;
 import org.apache.shardingsphere.dbtest.cases.assertion.root.IntegrateTestCaseAssertion;
 
@@ -25,4 +26,7 @@ import org.apache.shardingsphere.dbtest.cases.assertion.root.IntegrateTestCaseAs
  */
 @Getter
 public final class DMLIntegrateTestCaseAssertion extends IntegrateTestCaseAssertion {
+    
+    @XmlAttribute(name = "dml-returning")
+    private boolean dmlReturning;
 }
diff --git a/shardingsphere-integration-test/shardingsphere-test-suite/src/test/java/org/apache/shardingsphere/dbtest/engine/dml/GeneralDMLIT.java b/shardingsphere-integration-test/shardingsphere-test-suite/src/test/java/org/apache/shardingsphere/dbtest/engine/dml/GeneralDMLIT.java
index c1a560e..f62ea7d 100644
--- a/shardingsphere-integration-test/shardingsphere-test-suite/src/test/java/org/apache/shardingsphere/dbtest/engine/dml/GeneralDMLIT.java
+++ b/shardingsphere-integration-test/shardingsphere-test-suite/src/test/java/org/apache/shardingsphere/dbtest/engine/dml/GeneralDMLIT.java
@@ -17,6 +17,7 @@
 
 package org.apache.shardingsphere.dbtest.engine.dml;
 
+import java.sql.ResultSet;
 import org.apache.shardingsphere.dbtest.cases.assertion.dml.DMLIntegrateTestCaseAssertion;
 import org.apache.shardingsphere.dbtest.cases.assertion.root.SQLValue;
 import org.apache.shardingsphere.dbtest.cases.assertion.root.SQLCaseType;
@@ -65,6 +66,9 @@ public final class GeneralDMLIT extends BaseDMLIT {
         if ("shadow".equals(getRuleType())) {
             return;
         }
+        if (assertion.isDmlReturning()) {
+            return;
+        }
         int actualUpdateCount;
         try (Connection connection = getDataSource().getConnection()) {
             actualUpdateCount = SQLCaseType.Literal == getCaseType() ? executeUpdateForStatement(connection) : executeUpdateForPreparedStatement(connection);
@@ -112,6 +116,15 @@ public final class GeneralDMLIT extends BaseDMLIT {
     
     private int executeForStatement(final Connection connection) throws SQLException {
         try (Statement statement = connection.createStatement()) {
+            if (assertion.isDmlReturning()) {
+                if (statement.execute(getSql())) {
+                    ResultSet resultSet = statement.getResultSet();
+                    boolean moreResults = statement.getMoreResults();
+                    // TODO resultSet is null
+                    return moreResults || null != resultSet ? statement.getUpdateCount() : 1;
+                }
+                return statement.getUpdateCount();
+            }
             assertFalse("Not a DML statement.", statement.execute(getSql()));
             return statement.getUpdateCount();
         }
@@ -122,6 +135,15 @@ public final class GeneralDMLIT extends BaseDMLIT {
             for (SQLValue each : assertion.getSQLValues()) {
                 preparedStatement.setObject(each.getIndex(), each.getValue());
             }
+            if (assertion.isDmlReturning()) {
+                if (preparedStatement.execute()) {
+                    ResultSet resultSet = preparedStatement.getResultSet();
+                    boolean moreResults = preparedStatement.getMoreResults();
+                    // TODO resultSet is null
+                    return moreResults || null != resultSet ? preparedStatement.getUpdateCount() : 1;
+                }
+                return preparedStatement.getUpdateCount();
+            }
             assertFalse("Not a DML statement.", preparedStatement.execute());
             return preparedStatement.getUpdateCount();
         }
diff --git a/shardingsphere-integration-test/shardingsphere-test-suite/src/test/resources/integrate/cases/dml/dml-integrate-test-cases.xml b/shardingsphere-integration-test/shardingsphere-test-suite/src/test/resources/integrate/cases/dml/dml-integrate-test-cases.xml
index 75daf7d..b91f48f 100644
--- a/shardingsphere-integration-test/shardingsphere-test-suite/src/test/resources/integrate/cases/dml/dml-integrate-test-cases.xml
+++ b/shardingsphere-integration-test/shardingsphere-test-suite/src/test/resources/integrate/cases/dml/dml-integrate-test-cases.xml
@@ -34,7 +34,7 @@
     </dml-test-case>
     
     <dml-test-case sql="INSERT /*+ index(field1) */ INTO t_order (order_id, user_id, status) VALUES (1, 1, 'insert') RETURNING order_id" db-types="PostgreSQL">
-        <assertion expected-data-file="insert_for_order_1.xml" />
+        <assertion expected-data-file="insert_for_order_1.xml" dml-returning="true" />
     </dml-test-case>
     
     <dml-test-case sql="INSERT INTO t_order (order_id, user_id, status) VALUES (1, 1, 'insert'), (2, 2, 'insert2')" db-types="MySQL">