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 83ed6e3ca14 Remove toLowerCase and use CaseInsensitiveMap, 
CaseInsensitiveSet (#30383)
83ed6e3ca14 is described below

commit 83ed6e3ca14f97cdf82d018609e5688ff02f9422
Author: Zhengqiang Duan <[email protected]>
AuthorDate: Mon Mar 4 14:38:44 2024 +0800

    Remove toLowerCase and use CaseInsensitiveMap, CaseInsensitiveSet (#30383)
---
 .../sqlfederation/resultset/SQLFederationResultSet.java      | 12 ++++++------
 .../executor/enumerable/EnumerableScanExecutor.java          | 12 ++++++------
 .../sqlfederation/optimizer/context/OptimizerContext.java    | 12 ++++++------
 .../optimizer/context/planner/OptimizerPlannerContext.java   |  4 ++--
 .../context/planner/OptimizerPlannerContextFactory.java      |  9 ++++-----
 .../optimizer/metadata/schema/SQLFederationDatabase.java     |  4 ++--
 .../optimizer/metadata/schema/SQLFederationSchema.java       |  8 ++++----
 .../planner/rule/transformation/PushFilterIntoScanRule.java  |  6 +++---
 .../planner/rule/transformation/PushProjectIntoScanRule.java |  6 +++---
 .../optimizer/context/OptimizerContextTest.java              |  4 ++--
 10 files changed, 38 insertions(+), 39 deletions(-)

diff --git 
a/kernel/sql-federation/core/src/main/java/org/apache/shardingsphere/sqlfederation/resultset/SQLFederationResultSet.java
 
b/kernel/sql-federation/core/src/main/java/org/apache/shardingsphere/sqlfederation/resultset/SQLFederationResultSet.java
index f37833a49f6..5150215b8a7 100644
--- 
a/kernel/sql-federation/core/src/main/java/org/apache/shardingsphere/sqlfederation/resultset/SQLFederationResultSet.java
+++ 
b/kernel/sql-federation/core/src/main/java/org/apache/shardingsphere/sqlfederation/resultset/SQLFederationResultSet.java
@@ -17,14 +17,15 @@
 
 package org.apache.shardingsphere.sqlfederation.resultset;
 
+import com.cedarsoftware.util.CaseInsensitiveMap;
 import org.apache.calcite.linq4j.Enumerator;
 import org.apache.calcite.rel.type.RelDataType;
 import org.apache.calcite.schema.Schema;
 import 
org.apache.shardingsphere.infra.binder.context.segment.select.projection.Projection;
 import 
org.apache.shardingsphere.infra.binder.context.statement.dml.SelectStatementContext;
+import 
org.apache.shardingsphere.infra.exception.core.ShardingSpherePreconditions;
 import 
org.apache.shardingsphere.infra.executor.sql.execute.result.query.impl.driver.jdbc.type.util.ResultSetUtils;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
-import 
org.apache.shardingsphere.infra.exception.core.ShardingSpherePreconditions;
 
 import java.io.InputStream;
 import java.io.Reader;
@@ -45,7 +46,6 @@ import java.sql.Timestamp;
 import java.util.Arrays;
 import java.util.Calendar;
 import java.util.Collection;
-import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
@@ -78,8 +78,8 @@ public final class SQLFederationResultSet extends 
AbstractUnsupportedOperationRe
     public SQLFederationResultSet(final Enumerator<Object> enumerator, final 
ShardingSphereSchema schema, final Schema sqlFederationSchema,
                                   final SelectStatementContext 
selectStatementContext, final RelDataType resultColumnType) {
         this.enumerator = enumerator;
-        columnLabelAndIndexes = new 
HashMap<>(selectStatementContext.getProjectionsContext().getExpandProjections().size(),
 1F);
-        Map<Integer, String> indexAndColumnLabels = new 
HashMap<>(selectStatementContext.getProjectionsContext().getExpandProjections().size(),
 1F);
+        columnLabelAndIndexes = new 
CaseInsensitiveMap<>(selectStatementContext.getProjectionsContext().getExpandProjections().size(),
 1F);
+        Map<Integer, String> indexAndColumnLabels = new 
CaseInsensitiveMap<>(selectStatementContext.getProjectionsContext().getExpandProjections().size(),
 1F);
         handleColumnLabelAndIndex(columnLabelAndIndexes, indexAndColumnLabels, 
selectStatementContext);
         resultSetMetaData = new SQLFederationResultSetMetaData(schema, 
sqlFederationSchema, selectStatementContext, resultColumnType, 
indexAndColumnLabels);
     }
@@ -89,7 +89,7 @@ public final class SQLFederationResultSet extends 
AbstractUnsupportedOperationRe
         for (int columnIndex = 1; columnIndex <= projections.size(); 
columnIndex++) {
             Projection projection = projections.get(columnIndex - 1);
             String columnLabel = projection.getColumnLabel();
-            columnLabelAndIndexes.put(columnLabel.toLowerCase(), columnIndex);
+            columnLabelAndIndexes.put(columnLabel, columnIndex);
             indexAndColumnLabels.put(columnIndex, columnLabel);
         }
     }
@@ -455,7 +455,7 @@ public final class SQLFederationResultSet extends 
AbstractUnsupportedOperationRe
     }
     
     private Integer getIndexFromColumnLabelAndIndexMap(final String 
columnLabel) throws SQLException {
-        Integer result = columnLabelAndIndexes.get(columnLabel.toLowerCase());
+        Integer result = columnLabelAndIndexes.get(columnLabel);
         ShardingSpherePreconditions.checkNotNull(result, () -> new 
SQLFeatureNotSupportedException(String.format("can not get index from column 
label `%s`", columnLabel)));
         return result;
     }
diff --git 
a/kernel/sql-federation/executor/src/main/java/org/apache/shardingsphere/sqlfederation/executor/enumerable/EnumerableScanExecutor.java
 
b/kernel/sql-federation/executor/src/main/java/org/apache/shardingsphere/sqlfederation/executor/enumerable/EnumerableScanExecutor.java
index 01fd2362172..0e06541e85c 100644
--- 
a/kernel/sql-federation/executor/src/main/java/org/apache/shardingsphere/sqlfederation/executor/enumerable/EnumerableScanExecutor.java
+++ 
b/kernel/sql-federation/executor/src/main/java/org/apache/shardingsphere/sqlfederation/executor/enumerable/EnumerableScanExecutor.java
@@ -17,6 +17,7 @@
 
 package org.apache.shardingsphere.sqlfederation.executor.enumerable;
 
+import com.cedarsoftware.util.CaseInsensitiveSet;
 import lombok.RequiredArgsConstructor;
 import lombok.SneakyThrows;
 import org.apache.calcite.linq4j.AbstractEnumerable;
@@ -76,7 +77,6 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
-import java.util.HashSet;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
@@ -90,7 +90,7 @@ import java.util.stream.Collectors;
 @RequiredArgsConstructor
 public final class EnumerableScanExecutor implements ScanExecutor {
     
-    private static final Collection<String> SYSTEM_CATALOG_TABLES = new 
HashSet<>(3, 1F);
+    private static final Collection<String> SYSTEM_CATALOG_TABLES = new 
CaseInsensitiveSet<>(3, 1F);
     
     private static final String DAT_COMPATIBILITY = "PG";
     
@@ -124,8 +124,8 @@ public final class EnumerableScanExecutor implements 
ScanExecutor {
     
     @Override
     public Enumerable<Object> execute(final ShardingSphereTable table, final 
ScanExecutorContext scanContext) {
-        String databaseName = executorContext.getDatabaseName().toLowerCase();
-        String schemaName = executorContext.getSchemaName().toLowerCase();
+        String databaseName = executorContext.getDatabaseName();
+        String schemaName = executorContext.getSchemaName();
         DatabaseType databaseType = 
optimizerContext.getParserContext(databaseName).getDatabaseType();
         if (new 
SystemDatabase(databaseType).getSystemSchemas().contains(schemaName)) {
             return executeByShardingSphereData(databaseName, schemaName, 
table, databaseType);
@@ -156,7 +156,7 @@ public final class EnumerableScanExecutor implements 
ScanExecutor {
                 ExecutionGroupContext<JDBCExecutionUnit> executionGroupContext 
= prepareEngine.prepare(context.getRouteContext(), 
executorContext.getConnectionOffsets(), context.getExecutionUnits(),
                         new 
ExecutionGroupReportContext(executorContext.getFederationContext().getProcessId(),
 database.getName(), new Grantee("", "")));
                 setParameters(executionGroupContext.getInputGroups());
-                processEngine.executeSQL(executionGroupContext, 
context.getQueryContext());
+                processEngine.executeSQL(executionGroupContext, 
executorContext.getFederationContext().getQueryContext());
                 List<QueryResult> queryResults = 
jdbcExecutor.execute(executionGroupContext, 
callback).stream().map(QueryResult.class::cast).collect(Collectors.toList());
                 MergeEngine mergeEngine = new MergeEngine(database, 
executorContext.getProps(), new ConnectionContext());
                 MergedResult mergedResult = mergeEngine.merge(queryResults, 
queryContext.getSqlStatementContext());
@@ -179,7 +179,7 @@ public final class EnumerableScanExecutor implements 
ScanExecutor {
     
     private Enumerable<Object> executeByShardingSphereData(final String 
databaseName, final String schemaName, final ShardingSphereTable table, final 
DatabaseType databaseType) {
         // TODO move this logic to ShardingSphere statistics
-        if (databaseType instanceof OpenGaussDatabaseType && 
SYSTEM_CATALOG_TABLES.contains(table.getName().toLowerCase())) {
+        if (databaseType instanceof OpenGaussDatabaseType && 
SYSTEM_CATALOG_TABLES.contains(table.getName())) {
             return createMemoryEnumerator(createSystemCatalogTableData(table));
         }
         Optional<ShardingSphereTableData> tableData = 
Optional.ofNullable(statistics.getDatabaseData().get(databaseName)).map(optional
 -> optional.getSchemaData().get(schemaName))
diff --git 
a/kernel/sql-federation/optimizer/src/main/java/org/apache/shardingsphere/sqlfederation/optimizer/context/OptimizerContext.java
 
b/kernel/sql-federation/optimizer/src/main/java/org/apache/shardingsphere/sqlfederation/optimizer/context/OptimizerContext.java
index ba38c065139..b4f9da4ff87 100644
--- 
a/kernel/sql-federation/optimizer/src/main/java/org/apache/shardingsphere/sqlfederation/optimizer/context/OptimizerContext.java
+++ 
b/kernel/sql-federation/optimizer/src/main/java/org/apache/shardingsphere/sqlfederation/optimizer/context/OptimizerContext.java
@@ -45,7 +45,7 @@ public final class OptimizerContext {
      * @return parser context
      */
     public OptimizerParserContext getParserContext(final String databaseName) {
-        return parserContexts.get(databaseName.toLowerCase());
+        return parserContexts.get(databaseName);
     }
     
     /**
@@ -55,7 +55,7 @@ public final class OptimizerContext {
      * @param parserContext parser context
      */
     public void putParserContext(final String databaseName, final 
OptimizerParserContext parserContext) {
-        parserContexts.put(databaseName.toLowerCase(), parserContext);
+        parserContexts.put(databaseName, parserContext);
     }
     
     /**
@@ -64,7 +64,7 @@ public final class OptimizerContext {
      * @param databaseName database name
      */
     public void removeParserContext(final String databaseName) {
-        parserContexts.remove(databaseName.toLowerCase());
+        parserContexts.remove(databaseName);
     }
     
     /**
@@ -74,7 +74,7 @@ public final class OptimizerContext {
      * @return Planner
      */
     public OptimizerPlannerContext getPlannerContext(final String 
databaseName) {
-        return plannerContexts.get(databaseName.toLowerCase());
+        return plannerContexts.get(databaseName);
     }
     
     /**
@@ -84,7 +84,7 @@ public final class OptimizerContext {
      * @param plannerContext planner context
      */
     public void putPlannerContext(final String databaseName, final 
OptimizerPlannerContext plannerContext) {
-        plannerContexts.put(databaseName.toLowerCase(), plannerContext);
+        plannerContexts.put(databaseName, plannerContext);
     }
     
     /**
@@ -93,6 +93,6 @@ public final class OptimizerContext {
      * @param databaseName database name
      */
     public void removePlannerContext(final String databaseName) {
-        plannerContexts.remove(databaseName.toLowerCase());
+        plannerContexts.remove(databaseName);
     }
 }
diff --git 
a/kernel/sql-federation/optimizer/src/main/java/org/apache/shardingsphere/sqlfederation/optimizer/context/planner/OptimizerPlannerContext.java
 
b/kernel/sql-federation/optimizer/src/main/java/org/apache/shardingsphere/sqlfederation/optimizer/context/planner/OptimizerPlannerContext.java
index a2b8bbcfd2b..bc92a253538 100644
--- 
a/kernel/sql-federation/optimizer/src/main/java/org/apache/shardingsphere/sqlfederation/optimizer/context/planner/OptimizerPlannerContext.java
+++ 
b/kernel/sql-federation/optimizer/src/main/java/org/apache/shardingsphere/sqlfederation/optimizer/context/planner/OptimizerPlannerContext.java
@@ -40,7 +40,7 @@ public final class OptimizerPlannerContext {
      * @return validator
      */
     public SqlValidator getValidator(final String schemaName) {
-        return validators.get(schemaName.toLowerCase());
+        return validators.get(schemaName);
     }
     
     /**
@@ -50,6 +50,6 @@ public final class OptimizerPlannerContext {
      * @return converter
      */
     public SqlToRelConverter getConverter(final String schemaName) {
-        return converters.get(schemaName.toLowerCase());
+        return converters.get(schemaName);
     }
 }
diff --git 
a/kernel/sql-federation/optimizer/src/main/java/org/apache/shardingsphere/sqlfederation/optimizer/context/planner/OptimizerPlannerContextFactory.java
 
b/kernel/sql-federation/optimizer/src/main/java/org/apache/shardingsphere/sqlfederation/optimizer/context/planner/OptimizerPlannerContextFactory.java
index 864ba0c1acf..6d7ffaa7879 100644
--- 
a/kernel/sql-federation/optimizer/src/main/java/org/apache/shardingsphere/sqlfederation/optimizer/context/planner/OptimizerPlannerContextFactory.java
+++ 
b/kernel/sql-federation/optimizer/src/main/java/org/apache/shardingsphere/sqlfederation/optimizer/context/planner/OptimizerPlannerContextFactory.java
@@ -17,6 +17,7 @@
 
 package org.apache.shardingsphere.sqlfederation.optimizer.context.planner;
 
+import com.cedarsoftware.util.CaseInsensitiveMap;
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
 import org.apache.calcite.adapter.java.JavaTypeFactory;
@@ -34,10 +35,8 @@ import 
org.apache.shardingsphere.sqlfederation.optimizer.context.parser.Optimize
 import 
org.apache.shardingsphere.sqlfederation.optimizer.metadata.schema.SQLFederationSchema;
 import 
org.apache.shardingsphere.sqlfederation.optimizer.planner.util.SQLFederationPlannerUtils;
 
-import java.util.LinkedHashMap;
 import java.util.Map;
 import java.util.Map.Entry;
-import java.util.concurrent.ConcurrentHashMap;
 
 /**
  * Optimizer planner context factory.
@@ -57,7 +56,7 @@ public final class OptimizerPlannerContextFactory {
      */
     public static Map<String, OptimizerPlannerContext> create(final 
Map<String, ShardingSphereDatabase> databases, final Map<String, 
OptimizerParserContext> parserContexts,
                                                               final 
SQLParserRule sqlParserRule) {
-        Map<String, OptimizerPlannerContext> result = new 
ConcurrentHashMap<>(databases.size(), 1F);
+        Map<String, OptimizerPlannerContext> result = new 
CaseInsensitiveMap<>(databases.size(), 1F);
         for (Entry<String, ShardingSphereDatabase> entry : 
databases.entrySet()) {
             result.put(entry.getKey(), create(entry.getValue(), 
parserContexts.get(entry.getKey()), sqlParserRule));
         }
@@ -73,8 +72,8 @@ public final class OptimizerPlannerContextFactory {
      * @return created optimizer planner context
      */
     public static OptimizerPlannerContext create(final ShardingSphereDatabase 
database, final OptimizerParserContext parserContext, final SQLParserRule 
sqlParserRule) {
-        Map<String, SqlValidator> validators = new LinkedHashMap<>();
-        Map<String, SqlToRelConverter> converters = new LinkedHashMap<>();
+        Map<String, SqlValidator> validators = new CaseInsensitiveMap<>();
+        Map<String, SqlToRelConverter> converters = new CaseInsensitiveMap<>();
         for (Entry<String, ShardingSphereSchema> entry : 
database.getSchemas().entrySet()) {
             CalciteConnectionConfig connectionConfig = new 
CalciteConnectionConfigImpl(parserContext.getDialectProps());
             Schema sqlFederationSchema = new 
SQLFederationSchema(entry.getKey(), entry.getValue(), 
database.getProtocolType(), DEFAULT_DATA_TYPE_FACTORY);
diff --git 
a/kernel/sql-federation/optimizer/src/main/java/org/apache/shardingsphere/sqlfederation/optimizer/metadata/schema/SQLFederationDatabase.java
 
b/kernel/sql-federation/optimizer/src/main/java/org/apache/shardingsphere/sqlfederation/optimizer/metadata/schema/SQLFederationDatabase.java
index 342e826639d..19402eed7fe 100644
--- 
a/kernel/sql-federation/optimizer/src/main/java/org/apache/shardingsphere/sqlfederation/optimizer/metadata/schema/SQLFederationDatabase.java
+++ 
b/kernel/sql-federation/optimizer/src/main/java/org/apache/shardingsphere/sqlfederation/optimizer/metadata/schema/SQLFederationDatabase.java
@@ -17,6 +17,7 @@
 
 package org.apache.shardingsphere.sqlfederation.optimizer.metadata.schema;
 
+import com.cedarsoftware.util.CaseInsensitiveMap;
 import lombok.Getter;
 import org.apache.calcite.adapter.java.JavaTypeFactory;
 import org.apache.calcite.schema.Schema;
@@ -25,7 +26,6 @@ import 
org.apache.shardingsphere.infra.database.core.type.DatabaseType;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
 
-import java.util.LinkedHashMap;
 import java.util.Map;
 import java.util.Map.Entry;
 
@@ -45,7 +45,7 @@ public final class SQLFederationDatabase extends 
AbstractSchema {
     }
     
     private Map<String, Schema> createSubSchemaMap(final 
ShardingSphereDatabase database, final DatabaseType protocolType, final 
JavaTypeFactory javaTypeFactory) {
-        Map<String, Schema> result = new 
LinkedHashMap<>(database.getSchemas().size(), 1F);
+        Map<String, Schema> result = new 
CaseInsensitiveMap<>(database.getSchemas().size(), 1F);
         for (Entry<String, ShardingSphereSchema> entry : 
database.getSchemas().entrySet()) {
             result.put(entry.getKey(), new SQLFederationSchema(entry.getKey(), 
entry.getValue(), protocolType, javaTypeFactory));
         }
diff --git 
a/kernel/sql-federation/optimizer/src/main/java/org/apache/shardingsphere/sqlfederation/optimizer/metadata/schema/SQLFederationSchema.java
 
b/kernel/sql-federation/optimizer/src/main/java/org/apache/shardingsphere/sqlfederation/optimizer/metadata/schema/SQLFederationSchema.java
index 7104d37799f..abdbcfb60cf 100644
--- 
a/kernel/sql-federation/optimizer/src/main/java/org/apache/shardingsphere/sqlfederation/optimizer/metadata/schema/SQLFederationSchema.java
+++ 
b/kernel/sql-federation/optimizer/src/main/java/org/apache/shardingsphere/sqlfederation/optimizer/metadata/schema/SQLFederationSchema.java
@@ -17,6 +17,7 @@
 
 package org.apache.shardingsphere.sqlfederation.optimizer.metadata.schema;
 
+import com.cedarsoftware.util.CaseInsensitiveMap;
 import lombok.Getter;
 import org.apache.calcite.adapter.java.JavaTypeFactory;
 import org.apache.calcite.rel.type.RelDataType;
@@ -32,7 +33,6 @@ import 
org.apache.shardingsphere.sqlfederation.optimizer.metadata.util.SQLFedera
 import 
org.apache.shardingsphere.sqlfederation.optimizer.statistic.SQLFederationStatistic;
 
 import java.util.Collections;
-import java.util.LinkedHashMap;
 import java.util.Map;
 
 /**
@@ -51,13 +51,13 @@ public final class SQLFederationSchema extends 
AbstractSchema {
     }
     
     private Map<String, Table> createTableMap(final ShardingSphereSchema 
schema, final DatabaseType protocolType, final JavaTypeFactory javaTypeFactory) 
{
-        Map<String, Table> result = new 
LinkedHashMap<>(schema.getTables().size(), 1F);
+        Map<String, Table> result = new 
CaseInsensitiveMap<>(schema.getTables().size(), 1F);
         for (ShardingSphereTable each : schema.getTables().values()) {
             if (schema.containsView(each.getName())) {
-                result.put(each.getName().toLowerCase(), getViewTable(schema, 
each, protocolType, javaTypeFactory));
+                result.put(each.getName(), getViewTable(schema, each, 
protocolType, javaTypeFactory));
             } else {
                 // TODO implement table statistic logic after using custom 
operators
-                result.put(each.getName().toLowerCase(), new 
SQLFederationTable(each, new SQLFederationStatistic(), protocolType));
+                result.put(each.getName(), new SQLFederationTable(each, new 
SQLFederationStatistic(), protocolType));
             }
         }
         return result;
diff --git 
a/kernel/sql-federation/optimizer/src/main/java/org/apache/shardingsphere/sqlfederation/optimizer/planner/rule/transformation/PushFilterIntoScanRule.java
 
b/kernel/sql-federation/optimizer/src/main/java/org/apache/shardingsphere/sqlfederation/optimizer/planner/rule/transformation/PushFilterIntoScanRule.java
index 70959e3ded0..536275bd18a 100644
--- 
a/kernel/sql-federation/optimizer/src/main/java/org/apache/shardingsphere/sqlfederation/optimizer/planner/rule/transformation/PushFilterIntoScanRule.java
+++ 
b/kernel/sql-federation/optimizer/src/main/java/org/apache/shardingsphere/sqlfederation/optimizer/planner/rule/transformation/PushFilterIntoScanRule.java
@@ -17,6 +17,7 @@
 
 package 
org.apache.shardingsphere.sqlfederation.optimizer.planner.rule.transformation;
 
+import com.cedarsoftware.util.CaseInsensitiveSet;
 import org.apache.calcite.plan.RelOptRuleCall;
 import org.apache.calcite.plan.RelRule;
 import org.apache.calcite.rel.logical.LogicalFilter;
@@ -28,7 +29,6 @@ import org.immutables.value.Value;
 
 import java.util.Arrays;
 import java.util.Collection;
-import java.util.HashSet;
 
 /**
  * Push filter into scan rule.
@@ -36,7 +36,7 @@ import java.util.HashSet;
 @Value.Enclosing
 public final class PushFilterIntoScanRule extends 
RelRule<PushFilterIntoScanRule.Config> implements TransformationRule {
     
-    private static final Collection<String> SYSTEM_SCHEMAS = new 
HashSet<>(Arrays.asList("information_schema", "performance_schema", "mysql", 
"sys", "shardingsphere", "pg_catalog"));
+    private static final Collection<String> SYSTEM_SCHEMAS = new 
CaseInsensitiveSet<>(Arrays.asList("information_schema", "performance_schema", 
"mysql", "sys", "shardingsphere", "pg_catalog"));
     
     private static final String CORRELATE_REFERENCE = "$cor";
     
@@ -48,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 (SYSTEM_SCHEMAS.contains(each.toLowerCase())) {
+            if (SYSTEM_SCHEMAS.contains(each)) {
                 return false;
             }
         }
diff --git 
a/kernel/sql-federation/optimizer/src/main/java/org/apache/shardingsphere/sqlfederation/optimizer/planner/rule/transformation/PushProjectIntoScanRule.java
 
b/kernel/sql-federation/optimizer/src/main/java/org/apache/shardingsphere/sqlfederation/optimizer/planner/rule/transformation/PushProjectIntoScanRule.java
index 2bf1dd16cca..a93e7d4de28 100644
--- 
a/kernel/sql-federation/optimizer/src/main/java/org/apache/shardingsphere/sqlfederation/optimizer/planner/rule/transformation/PushProjectIntoScanRule.java
+++ 
b/kernel/sql-federation/optimizer/src/main/java/org/apache/shardingsphere/sqlfederation/optimizer/planner/rule/transformation/PushProjectIntoScanRule.java
@@ -17,6 +17,7 @@
 
 package 
org.apache.shardingsphere.sqlfederation.optimizer.planner.rule.transformation;
 
+import com.cedarsoftware.util.CaseInsensitiveSet;
 import org.apache.calcite.plan.RelOptRuleCall;
 import org.apache.calcite.plan.RelRule;
 import org.apache.calcite.rel.logical.LogicalProject;
@@ -28,7 +29,6 @@ import org.immutables.value.Value;
 
 import java.util.Arrays;
 import java.util.Collection;
-import java.util.HashSet;
 
 /**
  * Push project into scan rule.
@@ -36,7 +36,7 @@ import java.util.HashSet;
 @Value.Enclosing
 public final class PushProjectIntoScanRule extends 
RelRule<PushProjectIntoScanRule.Config> implements TransformationRule {
     
-    private static final Collection<String> SYSTEM_SCHEMAS = new 
HashSet<>(Arrays.asList("information_schema", "performance_schema", "mysql", 
"sys", "shardingsphere", "pg_catalog"));
+    private static final Collection<String> SYSTEM_SCHEMAS = new 
CaseInsensitiveSet<>(Arrays.asList("information_schema", "performance_schema", 
"mysql", "sys", "shardingsphere", "pg_catalog"));
     
     private static final String CASE_FUNCTION_NAME = "CAST";
     
@@ -48,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 (SYSTEM_SCHEMAS.contains(each.toLowerCase())) {
+            if (SYSTEM_SCHEMAS.contains(each)) {
                 return false;
             }
         }
diff --git 
a/kernel/sql-federation/optimizer/src/test/java/org/apache/shardingsphere/sqlfederation/optimizer/context/OptimizerContextTest.java
 
b/kernel/sql-federation/optimizer/src/test/java/org/apache/shardingsphere/sqlfederation/optimizer/context/OptimizerContextTest.java
index 796e072741e..d1a20a05d5d 100644
--- 
a/kernel/sql-federation/optimizer/src/test/java/org/apache/shardingsphere/sqlfederation/optimizer/context/OptimizerContextTest.java
+++ 
b/kernel/sql-federation/optimizer/src/test/java/org/apache/shardingsphere/sqlfederation/optimizer/context/OptimizerContextTest.java
@@ -46,13 +46,13 @@ class OptimizerContextTest {
     @Test
     void assertGetParserContext() {
         OptimizerContext actual = 
OptimizerContextFactory.create(Collections.singletonMap(DefaultDatabase.LOGIC_NAME,
 createShardingSphereDatabase()), mock(ConfigurationProperties.class));
-        
assertThat(actual.getParserContext(DefaultDatabase.LOGIC_NAME.toLowerCase()), 
instanceOf(OptimizerParserContext.class));
+        assertThat(actual.getParserContext(DefaultDatabase.LOGIC_NAME), 
instanceOf(OptimizerParserContext.class));
     }
     
     @Test
     void assertGetPlannerContext() {
         OptimizerContext actual = 
OptimizerContextFactory.create(Collections.singletonMap(DefaultDatabase.LOGIC_NAME,
 createShardingSphereDatabase()), mock(ConfigurationProperties.class));
-        
assertThat(actual.getPlannerContext(DefaultDatabase.LOGIC_NAME.toLowerCase()), 
instanceOf(OptimizerPlannerContext.class));
+        assertThat(actual.getPlannerContext(DefaultDatabase.LOGIC_NAME), 
instanceOf(OptimizerPlannerContext.class));
     }
     
     private ShardingSphereDatabase createShardingSphereDatabase() {

Reply via email to