This is an automated email from the ASF dual-hosted git repository.
chengzhang 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 6d4b2a7f1f2 Fix wrong result when query system table with projection
and predicate (#27272)
6d4b2a7f1f2 is described below
commit 6d4b2a7f1f22fa61be58dac39e9836545f84ae33
Author: Zhengqiang Duan <[email protected]>
AuthorDate: Tue Jul 18 18:04:13 2023 +0800
Fix wrong result when query system table with projection and predicate
(#27272)
---
.../planner/rule/transformation/PushFilterIntoScanRule.java | 6 ++++--
.../planner/rule/transformation/PushProjectIntoScanRule.java | 8 ++++++--
2 files changed, 10 insertions(+), 4 deletions(-)
diff --git
a/kernel/sql-federation/core/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/planner/rule/transformation/PushFilterIntoScanRule.java
b/kernel/sql-federation/core/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/planner/rule/transformation/PushFilterIntoScanRule.java
index 4f6f3c03ed1..315a7935b69 100644
---
a/kernel/sql-federation/core/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/planner/rule/transformation/PushFilterIntoScanRule.java
+++
b/kernel/sql-federation/core/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/planner/rule/transformation/PushFilterIntoScanRule.java
@@ -26,7 +26,9 @@ import org.apache.calcite.rex.RexNode;
import
org.apache.shardingsphere.sqlfederation.compiler.operator.logical.LogicalScan;
import org.immutables.value.Value;
+import java.util.Arrays;
import java.util.Collection;
+import java.util.HashSet;
/**
* Push filter into scan rule.
@@ -34,7 +36,7 @@ import java.util.Collection;
@Value.Enclosing
public final class PushFilterIntoScanRule extends
RelRule<PushFilterIntoScanRule.Config> implements TransformationRule {
- private static final String PG_CATALOG = "pg_catalog";
+ private static final Collection<String> SYSTEM_SCHEMAS = new
HashSet<>(Arrays.asList("information_schema", "performance_schema", "mysql",
"sys", "shardingsphere", "pg_catalog"));
private static final String CORRELATE_REFERENCE = "$cor";
@@ -46,7 +48,7 @@ public final class PushFilterIntoScanRule extends
RelRule<PushFilterIntoScanRule
public boolean matches(final RelOptRuleCall call) {
LogicalScan logicalScan = call.rel(1);
for (String each : logicalScan.getTable().getQualifiedName()) {
- if (PG_CATALOG.equalsIgnoreCase(each)) {
+ if (SYSTEM_SCHEMAS.contains(each.toLowerCase())) {
return false;
}
}
diff --git
a/kernel/sql-federation/core/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/planner/rule/transformation/PushProjectIntoScanRule.java
b/kernel/sql-federation/core/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/planner/rule/transformation/PushProjectIntoScanRule.java
index 29883caf019..4ef2b003a54 100644
---
a/kernel/sql-federation/core/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/planner/rule/transformation/PushProjectIntoScanRule.java
+++
b/kernel/sql-federation/core/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/planner/rule/transformation/PushProjectIntoScanRule.java
@@ -26,13 +26,17 @@ import org.apache.calcite.rex.RexNode;
import
org.apache.shardingsphere.sqlfederation.compiler.operator.logical.LogicalScan;
import org.immutables.value.Value;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashSet;
+
/**
* Push project into scan rule.
*/
@Value.Enclosing
public final class PushProjectIntoScanRule extends
RelRule<PushProjectIntoScanRule.Config> implements TransformationRule {
- private static final String PG_CATALOG = "pg_catalog";
+ private static final Collection<String> SYSTEM_SCHEMAS = new
HashSet<>(Arrays.asList("information_schema", "performance_schema", "mysql",
"sys", "shardingsphere", "pg_catalog"));
private static final String CASE_FUNCTION_NAME = "CAST";
@@ -44,7 +48,7 @@ public final class PushProjectIntoScanRule extends
RelRule<PushProjectIntoScanRu
public boolean matches(final RelOptRuleCall call) {
LogicalScan logicalScan = call.rel(1);
for (String each : logicalScan.getTable().getQualifiedName()) {
- if (PG_CATALOG.equalsIgnoreCase(each)) {
+ if (SYSTEM_SCHEMAS.contains(each.toLowerCase())) {
return false;
}
}