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;
             }
         }

Reply via email to