You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by me...@apache.org on 2021/09/20 23:15:42 UTC
[shardingsphere] branch master updated: Refactor
OptimizerContextFactory to pull down global field into method (#12603)
This is an automated email from the ASF dual-hosted git repository.
menghaoran 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 6ec0c1e Refactor OptimizerContextFactory to pull down global field into method (#12603)
6ec0c1e is described below
commit 6ec0c1ed6c9ed565796933df2cb812b0fe0289c9
Author: Liang Zhang <te...@163.com>
AuthorDate: Tue Sep 21 07:14:52 2021 +0800
Refactor OptimizerContextFactory to pull down global field into method (#12603)
* Refactor OptimizerContextFactory
* Refactor OptimizerContextFactory
* Refactor OptimizerContextFactory
* Refactor OptimizerContextFactory
---
.../optimize/context/OptimizerContextFactory.java | 61 ++++++++++------------
1 file changed, 28 insertions(+), 33 deletions(-)
diff --git a/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/context/OptimizerContextFactory.java b/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/context/OptimizerContextFactory.java
index 84e1391..bfaf9ef 100644
--- a/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/context/OptimizerContextFactory.java
+++ b/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/context/OptimizerContextFactory.java
@@ -25,7 +25,7 @@ import org.apache.calcite.jdbc.CalciteSchema;
import org.apache.calcite.jdbc.JavaTypeFactoryImpl;
import org.apache.calcite.plan.RelOptCluster;
import org.apache.calcite.plan.RelOptPlanner;
-import org.apache.calcite.plan.RelOptTable;
+import org.apache.calcite.plan.RelOptTable.ViewExpander;
import org.apache.calcite.plan.volcano.VolcanoPlanner;
import org.apache.calcite.prepare.CalciteCatalogReader;
import org.apache.calcite.rel.type.RelDataTypeFactory;
@@ -58,6 +58,9 @@ public final class OptimizerContextFactory {
private final DatabaseType databaseType;
@Getter
+ private final FederationMetaData metaData;
+
+ @Getter
private final Properties props;
private final CalciteConnectionConfig connectionConfig;
@@ -69,19 +72,10 @@ public final class OptimizerContextFactory {
@Deprecated
private final Config parserConfig;
- private final RelDataTypeFactory typeFactory;
-
- @Getter
- private final FederationMetaData metaData;
-
- private final RelOptCluster cluster;
-
public OptimizerContextFactory(final Map<String, ShardingSphereMetaData> metaDataMap) {
this.databaseType = metaDataMap.isEmpty() ? null : metaDataMap.values().iterator().next().getResource().getDatabaseType();
- props = createOptimizerProperties(databaseType);
- typeFactory = new JavaTypeFactoryImpl();
- cluster = newCluster();
metaData = new FederationMetaData(metaDataMap);
+ props = createOptimizerProperties(databaseType);
connectionConfig = new CalciteConnectionConfigImpl(props);
parserConfig = SqlParser.config()
.withLex(connectionConfig.lex())
@@ -97,12 +91,6 @@ public final class OptimizerContextFactory {
return result;
}
- private RelOptCluster newCluster() {
- RelOptPlanner planner = new VolcanoPlanner();
- PlannerInitializer.init(planner);
- return RelOptCluster.create(planner, new RexBuilder(typeFactory));
- }
-
/**
* Create.
*
@@ -111,30 +99,37 @@ public final class OptimizerContextFactory {
* @return optimize context
*/
public OptimizerContext create(final String schemaName, final Schema logicSchema) {
- CalciteCatalogReader catalogReader = createCalciteCatalogReader(schemaName, connectionConfig, typeFactory, logicSchema);
- SqlValidator validator = createSqlValidator(connectionConfig, typeFactory, catalogReader);
- SqlToRelConverter relConverter = createSqlToRelConverter(cluster, validator, catalogReader);
+ RelDataTypeFactory relDataTypeFactory = new JavaTypeFactoryImpl();
+ CalciteCatalogReader catalogReader = createCatalogReader(schemaName, logicSchema, relDataTypeFactory);
+ SqlValidator validator = createValidator(catalogReader, relDataTypeFactory);
+ SqlToRelConverter relConverter = createRelConverter(catalogReader, validator, relDataTypeFactory);
return new OptimizerContext(databaseType, props, schemaName, logicSchema, parserConfig, validator, relConverter);
}
- private CalciteCatalogReader createCalciteCatalogReader(final String schemaName, final CalciteConnectionConfig config,
- final RelDataTypeFactory typeFactory, final Schema logicSchema) {
+ private CalciteCatalogReader createCatalogReader(final String schemaName, final Schema logicSchema, final RelDataTypeFactory relDataTypeFactory) {
CalciteSchema rootSchema = CalciteSchema.createRootSchema(true);
rootSchema.add(schemaName, logicSchema);
- return new CalciteCatalogReader(rootSchema, Collections.singletonList(schemaName), typeFactory, config);
+ return new CalciteCatalogReader(rootSchema, Collections.singletonList(schemaName), relDataTypeFactory, connectionConfig);
}
- private SqlValidator createSqlValidator(final CalciteConnectionConfig config, final RelDataTypeFactory typeFactory, final CalciteCatalogReader catalogReader) {
- return SqlValidatorUtil.newValidator(SqlStdOperatorTable.instance(), catalogReader, typeFactory, SqlValidator.Config.DEFAULT
- .withLenientOperatorLookup(config.lenientOperatorLookup())
- .withSqlConformance(config.conformance())
- .withDefaultNullCollation(config.defaultNullCollation())
- .withIdentifierExpansion(true));
+ private SqlValidator createValidator(final CalciteCatalogReader catalogReader, final RelDataTypeFactory relDataTypeFactory) {
+ SqlValidator.Config validatorConfig = SqlValidator.Config.DEFAULT
+ .withLenientOperatorLookup(connectionConfig.lenientOperatorLookup())
+ .withSqlConformance(connectionConfig.conformance())
+ .withDefaultNullCollation(connectionConfig.defaultNullCollation())
+ .withIdentifierExpansion(true);
+ return SqlValidatorUtil.newValidator(SqlStdOperatorTable.instance(), catalogReader, relDataTypeFactory, validatorConfig);
}
- private SqlToRelConverter createSqlToRelConverter(final RelOptCluster cluster, final SqlValidator validator, final CalciteCatalogReader catalogReader) {
- SqlToRelConverter.Config config = SqlToRelConverter.config().withTrimUnusedFields(true);
- RelOptTable.ViewExpander expander = (rowType, queryString, schemaPath, viewPath) -> null;
- return new SqlToRelConverter(expander, validator, catalogReader, cluster, StandardConvertletTable.INSTANCE, config);
+ private SqlToRelConverter createRelConverter(final CalciteCatalogReader catalogReader, final SqlValidator validator, final RelDataTypeFactory relDataTypeFactory) {
+ ViewExpander expander = (rowType, queryString, schemaPath, viewPath) -> null;
+ SqlToRelConverter.Config relConverterConfig = SqlToRelConverter.config().withTrimUnusedFields(true);
+ return new SqlToRelConverter(expander, validator, catalogReader, createCluster(relDataTypeFactory), StandardConvertletTable.INSTANCE, relConverterConfig);
+ }
+
+ private RelOptCluster createCluster(final RelDataTypeFactory relDataTypeFactory) {
+ RelOptPlanner planner = new VolcanoPlanner();
+ PlannerInitializer.init(planner);
+ return RelOptCluster.create(planner, new RexBuilder(relDataTypeFactory));
}
}