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() {