This is an automated email from the ASF dual-hosted git repository.
duanzhengqiang 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 6d74bf990e1 Support sql federation explain update (#28219)
6d74bf990e1 is described below
commit 6d74bf990e1cbcd7e6c4bef5b7b581e6ccca3d1c
Author: niu niu <[email protected]>
AuthorDate: Tue Aug 22 16:54:31 2023 +0800
Support sql federation explain update (#28219)
---
.../converter/statement/explain/ExplainStatementConverter.java | 4 ++++
test/it/optimizer/src/test/resources/converter/explain.xml | 7 +++++++
2 files changed, 11 insertions(+)
diff --git
a/kernel/sql-federation/core/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/converter/statement/explain/ExplainStatementConverter.java
b/kernel/sql-federation/core/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/converter/statement/explain/ExplainStatementConverter.java
index e5401a53c7a..6bdd4e2d1b7 100644
---
a/kernel/sql-federation/core/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/converter/statement/explain/ExplainStatementConverter.java
+++
b/kernel/sql-federation/core/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/converter/statement/explain/ExplainStatementConverter.java
@@ -26,9 +26,11 @@ import
org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
import
org.apache.shardingsphere.sql.parser.sql.common.statement.dal.ExplainStatement;
import
org.apache.shardingsphere.sql.parser.sql.common.statement.dml.DeleteStatement;
import
org.apache.shardingsphere.sql.parser.sql.common.statement.dml.SelectStatement;
+import
org.apache.shardingsphere.sql.parser.sql.common.statement.dml.UpdateStatement;
import
org.apache.shardingsphere.sqlfederation.compiler.converter.statement.SQLStatementConverter;
import
org.apache.shardingsphere.sqlfederation.compiler.converter.statement.delete.DeleteStatementConverter;
import
org.apache.shardingsphere.sqlfederation.compiler.converter.statement.select.SelectStatementConverter;
+import
org.apache.shardingsphere.sqlfederation.compiler.converter.statement.update.UpdateStatementConverter;
/**
* Explain statement converter.
@@ -50,6 +52,8 @@ public final class ExplainStatementConverter implements
SQLStatementConverter<Ex
return new SelectStatementConverter().convert((SelectStatement)
sqlStatement);
} else if (sqlStatement instanceof DeleteStatement) {
return new DeleteStatementConverter().convert((DeleteStatement)
sqlStatement);
+ } else if (sqlStatement instanceof UpdateStatement) {
+ return new UpdateStatementConverter().convert((UpdateStatement)
sqlStatement);
}
// TODO other statement converter.
return null;
diff --git a/test/it/optimizer/src/test/resources/converter/explain.xml
b/test/it/optimizer/src/test/resources/converter/explain.xml
index 4264bfe9975..043298d0311 100644
--- a/test/it/optimizer/src/test/resources/converter/explain.xml
+++ b/test/it/optimizer/src/test/resources/converter/explain.xml
@@ -52,4 +52,11 @@
<test-cases sql-case-id="explain_for_delete_condition"
expected-sql="EXPLAIN PLAN INCLUDING ALL ATTRIBUTES WITH TYPE FOR DELETE FROM
"t_order" WHERE "t_order"."x" = ?"
db-types="Oracle" sql-case-types="PLACEHOLDER" />
<test-cases sql-case-id="explain_for_delete_statement"
expected-sql="EXPLAIN PLAN INCLUDING ALL ATTRIBUTES WITH TYPE FOR DELETE FROM
"t_order" WHERE "t_order"."x" = 1"
db-types="Oracle" sql-case-types="LITERAL" />
<test-cases sql-case-id="explain_for_delete_statement"
expected-sql="EXPLAIN PLAN INCLUDING ALL ATTRIBUTES WITH TYPE FOR DELETE FROM
"t_order" WHERE "t_order"."x" = ?"
db-types="Oracle" sql-case-types="PLACEHOLDER" />
+ <test-cases sql-case-id="explain_update_without_condition"
expected-sql="EXPLAIN PLAN INCLUDING ALL ATTRIBUTES WITH TYPE FOR UPDATE
`t_order` SET `status` = 'finished'" db-types="MySQL" />
+ <test-cases sql-case-id="explain_update_without_condition"
expected-sql="EXPLAIN PLAN INCLUDING ALL ATTRIBUTES WITH TYPE FOR UPDATE
"t_order" SET "status" = 'finished'" db-types="PostgreSQL,
openGauss" />
+ <test-cases sql-case-id="explain_with_analyze_update"
expected-sql="EXPLAIN PLAN INCLUDING ALL ATTRIBUTES WITH TYPE FOR UPDATE
`t_order` SET `id` = 1" db-types="MySQL" />
+ <test-cases sql-case-id="explain_for_update_without_condition"
expected-sql="EXPLAIN PLAN INCLUDING ALL ATTRIBUTES WITH TYPE FOR UPDATE
"t_order" SET "status" = 'finished'" db-types="Oracle" />
+ <test-cases sql-case-id="explain_for_update" expected-sql="EXPLAIN PLAN
INCLUDING ALL ATTRIBUTES WITH TYPE FOR UPDATE "t_order" SET
"id" = 1" db-types="Oracle" />
+ <test-cases sql-case-id="explain_for_update_with_statement"
expected-sql="EXPLAIN PLAN INCLUDING ALL ATTRIBUTES WITH TYPE FOR UPDATE
"t_order" SET "id" = 1" db-types="Oracle" />
+ <test-cases sql-case-id="explain_for_update_with_into"
expected-sql="EXPLAIN PLAN INCLUDING ALL ATTRIBUTES WITH TYPE FOR UPDATE
"t_order" SET "id" = 1" db-types="Oracle" />
</sql-node-converter-test-cases>