This is an automated email from the ASF dual-hosted git repository.
zhaojinchao 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 139b58c0434 Minor refactor sql federation and DALE2EIT (#35602)
139b58c0434 is described below
commit 139b58c043488755dcce27816d6b9590e10f128c
Author: Zhengqiang Duan <[email protected]>
AuthorDate: Fri Jun 6 15:48:39 2025 +0800
Minor refactor sql federation and DALE2EIT (#35602)
---
.../sqlfederation/compiler/compiler/SQLStatementCompiler.java | 2 +-
.../compiler/planner/builder/SQLFederationPlannerBuilder.java | 8 +++++++-
.../sqlfederation/compiler/rel/operator/logical/LogicalScan.java | 4 ++--
.../src/test/resources/cases/federation-query-sql-cases.xml | 4 ++--
.../org/apache/shardingsphere/test/e2e/it/sql/dal/DALE2EIT.java | 4 ++--
5 files changed, 14 insertions(+), 8 deletions(-)
diff --git
a/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/compiler/SQLStatementCompiler.java
b/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/compiler/SQLStatementCompiler.java
index c34e99c5606..1c055adfb84 100644
---
a/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/compiler/SQLStatementCompiler.java
+++
b/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/compiler/SQLStatementCompiler.java
@@ -69,7 +69,7 @@ public final class SQLStatementCompiler {
private RelNode optimize(final RelNode rewritePlan, final
SQLFederationRelConverter converter) {
RelOptPlanner planner = converter.getCluster().getPlanner();
- if
(rewritePlan.getTraitSet().equals(converter.getCluster().traitSet().replace(convention)))
{
+ if (rewritePlan.getTraitSet().contains(convention)) {
planner.setRoot(rewritePlan);
} else {
planner.setRoot(planner.changeTraits(rewritePlan,
converter.getCluster().traitSet().replace(convention)));
diff --git
a/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/planner/builder/SQLFederationPlannerBuilder.java
b/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/planner/builder/SQLFederationPlannerBuilder.java
index 43e8e546dab..df511483019 100644
---
a/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/planner/builder/SQLFederationPlannerBuilder.java
+++
b/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/planner/builder/SQLFederationPlannerBuilder.java
@@ -107,6 +107,7 @@ public final class SQLFederationPlannerBuilder {
builder.addGroupBegin().addRuleCollection(getAggregationRules()).addGroupEnd().addMatchOrder(HepMatchOrder.BOTTOM_UP);
builder.addGroupBegin().addRuleCollection(getCalcRules()).addGroupEnd().addMatchOrder(HepMatchOrder.BOTTOM_UP);
builder.addGroupBegin().addRuleCollection(getSubQueryRules()).addGroupEnd().addMatchOrder(HepMatchOrder.BOTTOM_UP);
+
builder.addGroupBegin().addRuleCollection(getSortRules()).addGroupEnd().addMatchOrder(HepMatchOrder.BOTTOM_UP);
builder.addMatchLimit(DEFAULT_MATCH_LIMIT);
return new HepPlanner(builder.build());
}
@@ -119,6 +120,12 @@ public final class SQLFederationPlannerBuilder {
return result;
}
+ private static Collection<RelOptRule> getSortRules() {
+ Collection<RelOptRule> result = new LinkedList<>();
+ result.add(CoreRules.SORT_JOIN_TRANSPOSE);
+ return result;
+ }
+
private static Collection<RelOptRule> getCalcRules() {
Collection<RelOptRule> result = new LinkedList<>();
result.add(AggregateExpandDistinctAggregatesRule.Config.DEFAULT.toRule());
@@ -148,7 +155,6 @@ public final class SQLFederationPlannerBuilder {
Collection<RelOptRule> result = new LinkedList<>();
result.add(CoreRules.FILTER_INTO_JOIN);
result.add(CoreRules.JOIN_CONDITION_PUSH);
- result.add(CoreRules.SORT_JOIN_TRANSPOSE);
result.add(CoreRules.FILTER_AGGREGATE_TRANSPOSE);
result.add(CoreRules.FILTER_PROJECT_TRANSPOSE);
result.add(CoreRules.FILTER_SET_OP_TRANSPOSE);
diff --git
a/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/rel/operator/logical/LogicalScan.java
b/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/rel/operator/logical/LogicalScan.java
index f43d85571c3..ebf47c2ba37 100644
---
a/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/rel/operator/logical/LogicalScan.java
+++
b/kernel/sql-federation/compiler/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/rel/operator/logical/LogicalScan.java
@@ -35,10 +35,10 @@ import java.util.Objects;
@Getter
public final class LogicalScan extends TableScan {
- private final LogicalScanPushDownRelBuilder pushDownRelBuilder;
-
private final String databaseType;
+ private final LogicalScanPushDownRelBuilder pushDownRelBuilder;
+
public LogicalScan(final TableScan tableScan, final String databaseType) {
super(tableScan.getCluster(), tableScan.getTraitSet(),
Collections.emptyList(), tableScan.getTable());
this.databaseType = databaseType;
diff --git
a/kernel/sql-federation/compiler/src/test/resources/cases/federation-query-sql-cases.xml
b/kernel/sql-federation/compiler/src/test/resources/cases/federation-query-sql-cases.xml
index a1e9a2e7998..58542f2ca53 100644
---
a/kernel/sql-federation/compiler/src/test/resources/cases/federation-query-sql-cases.xml
+++
b/kernel/sql-federation/compiler/src/test/resources/cases/federation-query-sql-cases.xml
@@ -222,7 +222,7 @@
</test-case>
<test-case sql="SELECT * FROM t_order o RIGHT JOIN t_order_item i ON
o.order_id = i.order_id WHERE i.user_id = 10 ORDER BY i.item_id, 7">
- <assertion expected-result="EnumerableSort(sort0=[$6], dir0=[ASC])
EnumerableHashJoin(condition=[=($0, $7)], joinType=[right])
EnumerableScan(table=[[federate_jdbc, t_order]], sql=[SELECT * FROM
`federate_jdbc`.`t_order`], dynamicParameters=[null])
EnumerableScan(table=[[federate_jdbc, t_order_item]], sql=[SELECT * FROM
`federate_jdbc`.`t_order_item` WHERE CAST(`user_id` AS SIGNED) = 10],
dynamicParameters=[null]) " />
+ <assertion expected-result="EnumerableSort(sort0=[$6], dir0=[ASC])
EnumerableHashJoin(condition=[=($0, $7)], joinType=[right])
EnumerableScan(table=[[federate_jdbc, t_order]], sql=[SELECT * FROM
`federate_jdbc`.`t_order`], dynamicParameters=[null])
EnumerableSort(sort0=[$0], dir0=[ASC])
EnumerableScan(table=[[federate_jdbc, t_order_item]], sql=[SELECT * FROM
`federate_jdbc`.`t_order_item` WHERE CAST(`user_id` AS SIGNED) = 10],
dynamicParameters=[null]) " />
</test-case>
<test-case sql="SELECT * FROM t_order o JOIN t_order_item i ON o.order_id
= i.order_id WHERE o.user_id = 10 OR i.user_id = 10 ORDER BY o.order_id">
@@ -350,7 +350,7 @@
</test-case>
<test-case sql="SELECT * FROM t_product p RIGHT JOIN t_product_detail d ON
d.product_id = p.product_id WHERE d.detail_id = 10 ORDER BY d.product_id, 7">
- <assertion expected-result="EnumerableSort(sort0=[$7], sort1=[$6],
dir0=[ASC], dir1=[ASC]) EnumerableHashJoin(condition=[=($0, $7)],
joinType=[right]) EnumerableScan(table=[[federate_jdbc, t_product]],
sql=[SELECT * FROM `federate_jdbc`.`t_product`], dynamicParameters=[null])
EnumerableScan(table=[[federate_jdbc, t_product_detail]], sql=[SELECT * FROM
`federate_jdbc`.`t_product_detail` WHERE CAST(`detail_id` AS SIGNED) = 10],
dynamicParameters=[null]) " />
+ <assertion expected-result="EnumerableSort(sort0=[$7], sort1=[$6],
dir0=[ASC], dir1=[ASC]) EnumerableHashJoin(condition=[=($0, $7)],
joinType=[right]) EnumerableScan(table=[[federate_jdbc, t_product]],
sql=[SELECT * FROM `federate_jdbc`.`t_product`], dynamicParameters=[null])
EnumerableSort(sort0=[$1], sort1=[$0], dir0=[ASC], dir1=[ASC])
EnumerableScan(table=[[federate_jdbc, t_product_detail]], sql=[SELECT * FROM
`federate_jdbc`.`t_product_detail` WHERE CAST(`deta [...]
</test-case>
<test-case sql="SELECT * FROM t_product p JOIN t_product_detail d ON
d.product_id = p.product_id WHERE d.detail_id = 10 OR p.category_id = 10 ORDER
BY d.product_id, 7">
diff --git
a/test/e2e/sql/src/test/java/org/apache/shardingsphere/test/e2e/it/sql/dal/DALE2EIT.java
b/test/e2e/sql/src/test/java/org/apache/shardingsphere/test/e2e/it/sql/dal/DALE2EIT.java
index 90995142303..8d44bb312d4 100644
---
a/test/e2e/sql/src/test/java/org/apache/shardingsphere/test/e2e/it/sql/dal/DALE2EIT.java
+++
b/test/e2e/sql/src/test/java/org/apache/shardingsphere/test/e2e/it/sql/dal/DALE2EIT.java
@@ -148,8 +148,8 @@ class DALE2EIT implements SQLE2EIT {
if (SQLE2EITContext.NOT_VERIFY_FLAG.equals(expected)) {
return;
}
- assertThat(String.valueOf(actual.getObject(columnIndex)),
is(expected));
- assertThat(String.valueOf(actual.getObject(columnLabel)),
is(expected));
+ assertThat(String.valueOf(actual.getObject(columnIndex)).trim(),
is(expected));
+ assertThat(String.valueOf(actual.getObject(columnLabel)).trim(),
is(expected));
}
private static boolean isEnabled() {