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 <[email protected]>
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));
}
}