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 1c0b7531f09 fix validator and converter used in multi thread (#30683)
1c0b7531f09 is described below

commit 1c0b7531f092203892206a93f8bb21fbd34d7c28
Author: Chuxin Chen <[email protected]>
AuthorDate: Thu Mar 28 18:42:07 2024 +0800

    fix validator and converter used in multi thread (#30683)
---
 .../sqlfederation/engine/SQLFederationEngine.java  | 44 +++++++----
 .../optimizer/context/OptimizerContext.java        | 12 +--
 .../optimizer/context/OptimizerContextFactory.java |  8 +-
 ...rPlannerContext.java => OptimizerMetaData.java} | 29 ++-----
 .../context/planner/OptimizerMetaDataFactory.java  | 69 +++++++++++++++++
 .../planner/OptimizerPlannerContextFactory.java    | 89 ----------------------
 .../optimizer/context/OptimizerContextTest.java    |  6 +-
 7 files changed, 119 insertions(+), 138 deletions(-)

diff --git 
a/kernel/sql-federation/core/src/main/java/org/apache/shardingsphere/sqlfederation/engine/SQLFederationEngine.java
 
b/kernel/sql-federation/core/src/main/java/org/apache/shardingsphere/sqlfederation/engine/SQLFederationEngine.java
index 2100bfae4d7..45be877cb59 100644
--- 
a/kernel/sql-federation/core/src/main/java/org/apache/shardingsphere/sqlfederation/engine/SQLFederationEngine.java
+++ 
b/kernel/sql-federation/core/src/main/java/org/apache/shardingsphere/sqlfederation/engine/SQLFederationEngine.java
@@ -20,10 +20,17 @@ package org.apache.shardingsphere.sqlfederation.engine;
 import lombok.Getter;
 import org.apache.calcite.adapter.enumerable.EnumerableInterpretable;
 import org.apache.calcite.adapter.enumerable.EnumerableRel;
+import org.apache.calcite.adapter.java.JavaTypeFactory;
+import org.apache.calcite.config.CalciteConnectionConfig;
+import org.apache.calcite.config.CalciteConnectionConfigImpl;
+import org.apache.calcite.jdbc.JavaTypeFactoryImpl;
 import org.apache.calcite.linq4j.Enumerator;
+import org.apache.calcite.prepare.CalciteCatalogReader;
 import org.apache.calcite.runtime.Bindable;
 import org.apache.calcite.schema.Schema;
 import org.apache.calcite.schema.Table;
+import org.apache.calcite.sql.validate.SqlValidator;
+import org.apache.calcite.sql2rel.SqlToRelConverter;
 import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
 import 
org.apache.shardingsphere.infra.binder.context.statement.dml.SelectStatementContext;
 import org.apache.shardingsphere.infra.datanode.DataNode;
@@ -51,10 +58,11 @@ import 
org.apache.shardingsphere.sqlfederation.executor.enumerable.EnumerableSca
 import 
org.apache.shardingsphere.sqlfederation.optimizer.SQLFederationCompilerEngine;
 import 
org.apache.shardingsphere.sqlfederation.optimizer.SQLFederationExecutionPlan;
 import 
org.apache.shardingsphere.sqlfederation.optimizer.context.OptimizerContext;
-import 
org.apache.shardingsphere.sqlfederation.optimizer.context.planner.OptimizerPlannerContext;
+import 
org.apache.shardingsphere.sqlfederation.optimizer.context.planner.OptimizerMetaData;
 import 
org.apache.shardingsphere.sqlfederation.optimizer.exception.syntax.SQLFederationUnsupportedSQLException;
 import 
org.apache.shardingsphere.sqlfederation.optimizer.metadata.schema.SQLFederationTable;
 import 
org.apache.shardingsphere.sqlfederation.optimizer.planner.cache.ExecutionPlanCacheKey;
+import 
org.apache.shardingsphere.sqlfederation.optimizer.planner.util.SQLFederationPlannerUtils;
 import 
org.apache.shardingsphere.sqlfederation.optimizer.statement.SQLStatementCompiler;
 import 
org.apache.shardingsphere.sqlfederation.resultset.SQLFederationResultSet;
 import org.apache.shardingsphere.sqlfederation.rule.SQLFederationRule;
@@ -79,6 +87,8 @@ public final class SQLFederationEngine implements 
AutoCloseable {
     
     private static final int DEFAULT_METADATA_VERSION = 0;
     
+    private static final JavaTypeFactory DEFAULT_DATA_TYPE_FACTORY = new 
JavaTypeFactoryImpl();
+    
     private final ProcessEngine processEngine = new ProcessEngine();
     
     @SuppressWarnings("rawtypes")
@@ -163,8 +173,16 @@ public final class SQLFederationEngine implements 
AutoCloseable {
         try {
             String databaseName = 
federationContext.getQueryContext().getDatabaseNameFromSQLStatement().orElse(this.databaseName);
             String schemaName = 
federationContext.getQueryContext().getSchemaNameFromSQLStatement().orElse(this.schemaName);
-            SQLFederationExecutionPlan executionPlan = 
compileQuery(prepareEngine, callback, federationContext, databaseName, 
schemaName);
-            resultSet = executePlan(federationContext, executionPlan, 
databaseName, schemaName);
+            OptimizerMetaData optimizerMetaData = 
sqlFederationRule.getOptimizerContext().getMetaData(databaseName);
+            CalciteConnectionConfig connectionConfig = new 
CalciteConnectionConfigImpl(sqlFederationRule.getOptimizerContext().getParserContext(databaseName).getDialectProps());
+            CalciteCatalogReader catalogReader = 
SQLFederationPlannerUtils.createCatalogReader(schemaName, 
optimizerMetaData.getSchema(schemaName), DEFAULT_DATA_TYPE_FACTORY, 
connectionConfig);
+            SqlValidator validator = 
SQLFederationPlannerUtils.createSqlValidator(catalogReader, 
DEFAULT_DATA_TYPE_FACTORY,
+                    
sqlFederationRule.getOptimizerContext().getParserContext(databaseName).getDatabaseType(),
 connectionConfig);
+            SqlToRelConverter converter = 
SQLFederationPlannerUtils.createSqlToRelConverter(catalogReader, validator, 
SQLFederationPlannerUtils.createRelOptCluster(DEFAULT_DATA_TYPE_FACTORY),
+                    
sqlFederationRule.getOptimizerContext().getSqlParserRule(), 
sqlFederationRule.getOptimizerContext().getParserContext(databaseName).getDatabaseType(),
 true);
+            Schema sqlFederationSchema = 
catalogReader.getRootSchema().plus().getSubSchema(schemaName);
+            SQLFederationExecutionPlan executionPlan = 
compileQuery(prepareEngine, callback, federationContext, databaseName, 
schemaName, sqlFederationSchema, converter);
+            resultSet = executePlan(federationContext, executionPlan, 
validator, converter, databaseName, schemaName, sqlFederationSchema);
             return resultSet;
             // CHECKSTYLE:OFF
         } catch (final Exception ex) {
@@ -173,30 +191,26 @@ public final class SQLFederationEngine implements 
AutoCloseable {
         }
     }
     
-    private SQLFederationExecutionPlan compileQuery(final 
DriverExecutionPrepareEngine<JDBCExecutionUnit, Connection> prepareEngine,
-                                                    final 
JDBCExecutorCallback<? extends ExecuteResult> callback, final 
SQLFederationContext federationContext, final String databaseName,
-                                                    final String schemaName) {
+    private SQLFederationExecutionPlan compileQuery(final 
DriverExecutionPrepareEngine<JDBCExecutionUnit, Connection> prepareEngine, 
final JDBCExecutorCallback<? extends ExecuteResult> callback,
+                                                    final SQLFederationContext 
federationContext, final String databaseName, final String schemaName, final 
Schema sqlFederationSchema,
+                                                    final SqlToRelConverter 
converter) {
         SQLStatementContext sqlStatementContext = 
federationContext.getQueryContext().getSqlStatementContext();
         ShardingSpherePreconditions.checkState(sqlStatementContext instanceof 
SelectStatementContext, () -> new IllegalArgumentException("SQL statement 
context must be select statement context."));
-        OptimizerPlannerContext plannerContext = 
sqlFederationRule.getOptimizerContext().getPlannerContext(databaseName);
-        Schema sqlFederationSchema = 
plannerContext.getValidator(schemaName).getCatalogReader().getRootSchema().plus().getSubSchema(schemaName);
         registerTableScanExecutor(sqlFederationSchema, prepareEngine, 
callback, federationContext, sqlFederationRule.getOptimizerContext(), 
databaseName, schemaName);
-        SQLStatementCompiler sqlStatementCompiler = new 
SQLStatementCompiler(plannerContext.getConverter(schemaName));
+        SQLStatementCompiler sqlStatementCompiler = new 
SQLStatementCompiler(converter);
         SQLFederationCompilerEngine compilerEngine = new 
SQLFederationCompilerEngine(databaseName, schemaName, 
sqlFederationRule.getConfiguration().getExecutionPlanCache());
-        SelectStatementContext selectStatementContext = 
(SelectStatementContext) sqlStatementContext;
         // TODO open useCache flag when ShardingSphereTable contains version
-        return compilerEngine.compile(buildCacheKey(federationContext, 
selectStatementContext, sqlStatementCompiler, databaseName, schemaName), false);
+        return compilerEngine.compile(buildCacheKey(federationContext, 
(SelectStatementContext) sqlStatementContext, sqlStatementCompiler, 
databaseName, schemaName), false);
     }
     
     @SuppressWarnings("unchecked")
-    private ResultSet executePlan(final SQLFederationContext 
federationContext, final SQLFederationExecutionPlan executionPlan, final String 
databaseName, final String schemaName) {
+    private ResultSet executePlan(final SQLFederationContext 
federationContext, final SQLFederationExecutionPlan executionPlan, final 
SqlValidator validator, final SqlToRelConverter converter,
+                                  final String databaseName, final String 
schemaName, final Schema sqlFederationSchema) {
         try {
             Bindable<Object> executablePlan = 
EnumerableInterpretable.toBindable(Collections.emptyMap(), null, 
(EnumerableRel) executionPlan.getPhysicalPlan(), EnumerableRel.Prefer.ARRAY);
             Map<String, Object> params = 
createParameters(federationContext.getQueryContext().getParameters());
-            OptimizerPlannerContext plannerContext = 
sqlFederationRule.getOptimizerContext().getPlannerContext(databaseName);
-            Enumerator<Object> enumerator = executablePlan.bind(new 
SQLFederationBindContext(plannerContext.getValidator(schemaName), 
plannerContext.getConverter(schemaName), params)).enumerator();
+            Enumerator<Object> enumerator = executablePlan.bind(new 
SQLFederationBindContext(validator, converter, params)).enumerator();
             ShardingSphereSchema schema = 
federationContext.getMetaData().getDatabase(databaseName).getSchema(schemaName);
-            Schema sqlFederationSchema = 
plannerContext.getValidator(schemaName).getCatalogReader().getRootSchema().plus().getSubSchema(schemaName);
             return new SQLFederationResultSet(enumerator, schema, 
sqlFederationSchema, (SelectStatementContext) 
federationContext.getQueryContext().getSqlStatementContext(),
                     executionPlan.getResultColumnType());
         } finally {
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 f8fa9ce7da8..988f34a6fdc 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
@@ -21,7 +21,7 @@ import lombok.Getter;
 import lombok.RequiredArgsConstructor;
 import org.apache.shardingsphere.parser.rule.SQLParserRule;
 import 
org.apache.shardingsphere.sqlfederation.optimizer.context.parser.OptimizerParserContext;
-import 
org.apache.shardingsphere.sqlfederation.optimizer.context.planner.OptimizerPlannerContext;
+import 
org.apache.shardingsphere.sqlfederation.optimizer.context.planner.OptimizerMetaData;
 
 import java.util.Map;
 
@@ -36,7 +36,7 @@ public final class OptimizerContext {
     
     private final Map<String, OptimizerParserContext> parserContexts;
     
-    private final Map<String, OptimizerPlannerContext> plannerContexts;
+    private final Map<String, OptimizerMetaData> optimizerMetaData;
     
     /**
      * Get parser context.
@@ -49,12 +49,12 @@ public final class OptimizerContext {
     }
     
     /**
-     * Get planner context.
+     * Get meta data.
      *
      * @param databaseName database name
-     * @return Planner
+     * @return optimizer meta data
      */
-    public OptimizerPlannerContext getPlannerContext(final String 
databaseName) {
-        return plannerContexts.get(databaseName);
+    public OptimizerMetaData getMetaData(final String databaseName) {
+        return optimizerMetaData.get(databaseName);
     }
 }
diff --git 
a/kernel/sql-federation/optimizer/src/main/java/org/apache/shardingsphere/sqlfederation/optimizer/context/OptimizerContextFactory.java
 
b/kernel/sql-federation/optimizer/src/main/java/org/apache/shardingsphere/sqlfederation/optimizer/context/OptimizerContextFactory.java
index 0011b2ae916..5f2a2ad1bae 100644
--- 
a/kernel/sql-federation/optimizer/src/main/java/org/apache/shardingsphere/sqlfederation/optimizer/context/OptimizerContextFactory.java
+++ 
b/kernel/sql-federation/optimizer/src/main/java/org/apache/shardingsphere/sqlfederation/optimizer/context/OptimizerContextFactory.java
@@ -26,8 +26,8 @@ import 
org.apache.shardingsphere.parser.rule.builder.DefaultSQLParserRuleConfigu
 import org.apache.shardingsphere.parser.rule.builder.SQLParserRuleBuilder;
 import 
org.apache.shardingsphere.sqlfederation.optimizer.context.parser.OptimizerParserContext;
 import 
org.apache.shardingsphere.sqlfederation.optimizer.context.parser.OptimizerParserContextFactory;
-import 
org.apache.shardingsphere.sqlfederation.optimizer.context.planner.OptimizerPlannerContext;
-import 
org.apache.shardingsphere.sqlfederation.optimizer.context.planner.OptimizerPlannerContextFactory;
+import 
org.apache.shardingsphere.sqlfederation.optimizer.context.planner.OptimizerMetaData;
+import 
org.apache.shardingsphere.sqlfederation.optimizer.context.planner.OptimizerMetaDataFactory;
 
 import java.util.Map;
 import java.util.Properties;
@@ -48,7 +48,7 @@ public final class OptimizerContextFactory {
         Map<String, OptimizerParserContext> parserContexts = 
OptimizerParserContextFactory.create(databases);
         // TODO consider to use sqlParserRule in global rule
         SQLParserRule sqlParserRule = new SQLParserRuleBuilder().build(new 
DefaultSQLParserRuleConfigurationBuilder().build(), databases, new 
ConfigurationProperties(new Properties()));
-        Map<String, OptimizerPlannerContext> plannerContexts = 
OptimizerPlannerContextFactory.create(databases, parserContexts, sqlParserRule);
-        return new OptimizerContext(sqlParserRule, parserContexts, 
plannerContexts);
+        Map<String, OptimizerMetaData> optimizerMetaData = 
OptimizerMetaDataFactory.create(databases);
+        return new OptimizerContext(sqlParserRule, parserContexts, 
optimizerMetaData);
     }
 }
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/OptimizerMetaData.java
similarity index 60%
rename from 
kernel/sql-federation/optimizer/src/main/java/org/apache/shardingsphere/sqlfederation/optimizer/context/planner/OptimizerPlannerContext.java
rename to 
kernel/sql-federation/optimizer/src/main/java/org/apache/shardingsphere/sqlfederation/optimizer/context/planner/OptimizerMetaData.java
index bc92a253538..ca4a578f9df 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/OptimizerMetaData.java
@@ -18,38 +18,25 @@
 package org.apache.shardingsphere.sqlfederation.optimizer.context.planner;
 
 import lombok.RequiredArgsConstructor;
-import org.apache.calcite.sql.validate.SqlValidator;
-import org.apache.calcite.sql2rel.SqlToRelConverter;
+import org.apache.calcite.schema.Schema;
 
 import java.util.Map;
 
 /**
- * Optimize planner context.
+ * Optimize meta data.
  */
 @RequiredArgsConstructor
-public final class OptimizerPlannerContext {
+public final class OptimizerMetaData {
     
-    private final Map<String, SqlValidator> validators;
-    
-    private final Map<String, SqlToRelConverter> converters;
-    
-    /**
-     * Get validator.
-     * 
-     * @param schemaName schema name
-     * @return validator
-     */
-    public SqlValidator getValidator(final String schemaName) {
-        return validators.get(schemaName);
-    }
+    private final Map<String, Schema> schemas;
     
     /**
-     * Get converter.
+     * Get schema.
      *
      * @param schemaName schema name
-     * @return converter
+     * @return schema
      */
-    public SqlToRelConverter getConverter(final String schemaName) {
-        return converters.get(schemaName);
+    public Schema getSchema(final String schemaName) {
+        return schemas.get(schemaName);
     }
 }
diff --git 
a/kernel/sql-federation/optimizer/src/main/java/org/apache/shardingsphere/sqlfederation/optimizer/context/planner/OptimizerMetaDataFactory.java
 
b/kernel/sql-federation/optimizer/src/main/java/org/apache/shardingsphere/sqlfederation/optimizer/context/planner/OptimizerMetaDataFactory.java
new file mode 100644
index 00000000000..c87ac49fc57
--- /dev/null
+++ 
b/kernel/sql-federation/optimizer/src/main/java/org/apache/shardingsphere/sqlfederation/optimizer/context/planner/OptimizerMetaDataFactory.java
@@ -0,0 +1,69 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+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;
+import org.apache.calcite.jdbc.JavaTypeFactoryImpl;
+import org.apache.calcite.schema.Schema;
+import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
+import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
+import 
org.apache.shardingsphere.sqlfederation.optimizer.metadata.schema.SQLFederationSchema;
+
+import java.util.Map;
+import java.util.Map.Entry;
+
+/**
+ * Optimizer meta data factory.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class OptimizerMetaDataFactory {
+    
+    private static final JavaTypeFactory DEFAULT_DATA_TYPE_FACTORY = new 
JavaTypeFactoryImpl();
+    
+    /**
+     * Create optimizer meta data map.
+     *
+     * @param databases databases
+     * @return created optimizer planner context map
+     */
+    public static Map<String, OptimizerMetaData> create(final Map<String, 
ShardingSphereDatabase> databases) {
+        Map<String, OptimizerMetaData> result = new 
CaseInsensitiveMap<>(databases.size(), 1F);
+        for (Entry<String, ShardingSphereDatabase> entry : 
databases.entrySet()) {
+            result.put(entry.getKey(), create(entry.getValue()));
+        }
+        return result;
+    }
+    
+    /**
+     * Create optimizer meta data.
+     *
+     * @param database database
+     * @return created optimizer planner context
+     */
+    public static OptimizerMetaData create(final ShardingSphereDatabase 
database) {
+        Map<String, Schema> schemas = new CaseInsensitiveMap<>();
+        for (Entry<String, ShardingSphereSchema> entry : 
database.getSchemas().entrySet()) {
+            Schema sqlFederationSchema = new 
SQLFederationSchema(entry.getKey(), entry.getValue(), 
database.getProtocolType(), DEFAULT_DATA_TYPE_FACTORY);
+            schemas.put(entry.getKey(), sqlFederationSchema);
+        }
+        return new OptimizerMetaData(schemas);
+    }
+}
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
deleted file mode 100644
index 6d7ffaa7879..00000000000
--- 
a/kernel/sql-federation/optimizer/src/main/java/org/apache/shardingsphere/sqlfederation/optimizer/context/planner/OptimizerPlannerContextFactory.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-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;
-import org.apache.calcite.config.CalciteConnectionConfig;
-import org.apache.calcite.config.CalciteConnectionConfigImpl;
-import org.apache.calcite.jdbc.JavaTypeFactoryImpl;
-import org.apache.calcite.prepare.CalciteCatalogReader;
-import org.apache.calcite.schema.Schema;
-import org.apache.calcite.sql.validate.SqlValidator;
-import org.apache.calcite.sql2rel.SqlToRelConverter;
-import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
-import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
-import org.apache.shardingsphere.parser.rule.SQLParserRule;
-import 
org.apache.shardingsphere.sqlfederation.optimizer.context.parser.OptimizerParserContext;
-import 
org.apache.shardingsphere.sqlfederation.optimizer.metadata.schema.SQLFederationSchema;
-import 
org.apache.shardingsphere.sqlfederation.optimizer.planner.util.SQLFederationPlannerUtils;
-
-import java.util.Map;
-import java.util.Map.Entry;
-
-/**
- * Optimizer planner context factory.
- */
-@NoArgsConstructor(access = AccessLevel.PRIVATE)
-public final class OptimizerPlannerContextFactory {
-    
-    private static final JavaTypeFactory DEFAULT_DATA_TYPE_FACTORY = new 
JavaTypeFactoryImpl();
-    
-    /**
-     * Create optimizer planner context map.
-     *
-     * @param databases databases
-     * @param parserContexts parser contexts
-     * @param sqlParserRule sql parser rule
-     * @return created optimizer planner context map
-     */
-    public static Map<String, OptimizerPlannerContext> create(final 
Map<String, ShardingSphereDatabase> databases, final Map<String, 
OptimizerParserContext> parserContexts,
-                                                              final 
SQLParserRule sqlParserRule) {
-        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));
-        }
-        return result;
-    }
-    
-    /**
-     * Create optimizer planner context.
-     *
-     * @param database database
-     * @param parserContext parser context
-     * @param sqlParserRule sql parser rule
-     * @return created optimizer planner context
-     */
-    public static OptimizerPlannerContext create(final ShardingSphereDatabase 
database, final OptimizerParserContext parserContext, final SQLParserRule 
sqlParserRule) {
-        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);
-            CalciteCatalogReader catalogReader = 
SQLFederationPlannerUtils.createCatalogReader(entry.getKey(), 
sqlFederationSchema, DEFAULT_DATA_TYPE_FACTORY, connectionConfig);
-            SqlValidator validator = 
SQLFederationPlannerUtils.createSqlValidator(catalogReader, 
DEFAULT_DATA_TYPE_FACTORY, parserContext.getDatabaseType(), connectionConfig);
-            SqlToRelConverter converter = 
SQLFederationPlannerUtils.createSqlToRelConverter(catalogReader, validator, 
SQLFederationPlannerUtils.createRelOptCluster(DEFAULT_DATA_TYPE_FACTORY),
-                    sqlParserRule, parserContext.getDatabaseType(), true);
-            validators.put(entry.getKey(), validator);
-            converters.put(entry.getKey(), converter);
-        }
-        return new OptimizerPlannerContext(validators, converters);
-    }
-}
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 5aa122a76b0..5fd485769da 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
@@ -23,7 +23,7 @@ import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
 import org.apache.shardingsphere.parser.rule.SQLParserRule;
 import 
org.apache.shardingsphere.sqlfederation.optimizer.context.parser.OptimizerParserContext;
-import 
org.apache.shardingsphere.sqlfederation.optimizer.context.planner.OptimizerPlannerContext;
+import 
org.apache.shardingsphere.sqlfederation.optimizer.context.planner.OptimizerMetaData;
 import org.junit.jupiter.api.Test;
 
 import java.util.Collections;
@@ -49,9 +49,9 @@ class OptimizerContextTest {
     }
     
     @Test
-    void assertGetPlannerContext() {
+    void assertGetOptimizerMetaData() {
         OptimizerContext actual = 
OptimizerContextFactory.create(Collections.singletonMap(DefaultDatabase.LOGIC_NAME,
 createShardingSphereDatabase()));
-        assertThat(actual.getPlannerContext(DefaultDatabase.LOGIC_NAME), 
instanceOf(OptimizerPlannerContext.class));
+        assertThat(actual.getMetaData(DefaultDatabase.LOGIC_NAME), 
instanceOf(OptimizerMetaData.class));
     }
     
     private ShardingSphereDatabase createShardingSphereDatabase() {

Reply via email to