You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by du...@apache.org on 2021/09/26 03:38:54 UTC
[shardingsphere] branch master updated: Add
OptimizerParserContextFactory (#12719)
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 9c5cafe Add OptimizerParserContextFactory (#12719)
9c5cafe is described below
commit 9c5cafee2db22e49d3fd907385b3aa83d4f253c3
Author: Liang Zhang <te...@163.com>
AuthorDate: Sun Sep 26 11:38:17 2021 +0800
Add OptimizerParserContextFactory (#12719)
* Add OptimizerParserContextFactory
* Update TODO
---
.../infra/optimize/context/OptimizerContext.java | 2 +-
.../optimize/context/OptimizerContextFactory.java | 20 ++------
.../parser/OptimizerParserContextFactory.java | 60 ++++++++++++++++++++++
3 files changed, 65 insertions(+), 17 deletions(-)
diff --git a/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/context/OptimizerContext.java b/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/context/OptimizerContext.java
index 4c9ecc4..93a97fa 100644
--- a/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/context/OptimizerContext.java
+++ b/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/context/OptimizerContext.java
@@ -41,5 +41,5 @@ public final class OptimizerContext {
private final Map<String, SqlToRelConverter> converters;
- // TODO refresh it after meta data changed
+ // TODO refresh validators and converters after meta data changed
}
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 7fe459c..3b7fa5f 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
@@ -36,10 +36,8 @@ import org.apache.calcite.sql.validate.SqlValidatorUtil;
import org.apache.calcite.sql2rel.SqlToRelConverter;
import org.apache.calcite.sql2rel.SqlToRelConverter.Config;
import org.apache.calcite.sql2rel.StandardConvertletTable;
-import org.apache.shardingsphere.infra.database.type.DatabaseType;
import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
-import org.apache.shardingsphere.infra.optimize.context.parser.OptimizerParserContext;
-import org.apache.shardingsphere.infra.optimize.context.parser.dialect.OptimizerSQLDialectBuilderFactory;
+import org.apache.shardingsphere.infra.optimize.context.parser.OptimizerParserContextFactory;
import org.apache.shardingsphere.infra.optimize.metadata.FederationMetaData;
import org.apache.shardingsphere.infra.optimize.metadata.FederationSchemaMetaData;
import org.apache.shardingsphere.infra.optimize.metadata.calcite.FederationSchema;
@@ -65,29 +63,19 @@ public final class OptimizerContextFactory {
*/
public static OptimizerContext create(final Map<String, ShardingSphereMetaData> metaDataMap) {
FederationMetaData metaData = new FederationMetaData(metaDataMap);
- Map<String, OptimizerParserContext> parserContexts = new HashMap<>();
Map<String, SqlValidator> validators = new HashMap<>(metaDataMap.size(), 1);
Map<String, SqlToRelConverter> converters = new HashMap<>(metaDataMap.size(), 1);
for (Entry<String, FederationSchemaMetaData> entry : metaData.getSchemas().entrySet()) {
String schemaName = entry.getKey();
- FederationSchema schema = new FederationSchema(entry.getValue());
- DatabaseType databaseType = metaDataMap.get(schemaName).getResource().getDatabaseType();
- parserContexts.put(entry.getKey(), new OptimizerParserContext(databaseType, createSQLDialectProperties(databaseType)));
+ FederationSchema federationSchema = new FederationSchema(entry.getValue());
CalciteConnectionConfig connectionConfig = new CalciteConnectionConfigImpl(createConnectionProperties());
RelDataTypeFactory relDataTypeFactory = new JavaTypeFactoryImpl();
- CalciteCatalogReader catalogReader = createCatalogReader(schemaName, schema, relDataTypeFactory, connectionConfig);
+ CalciteCatalogReader catalogReader = createCatalogReader(schemaName, federationSchema, relDataTypeFactory, connectionConfig);
SqlValidator validator = createValidator(catalogReader, relDataTypeFactory, connectionConfig);
validators.put(schemaName, validator);
converters.put(schemaName, createConverter(catalogReader, validator, relDataTypeFactory));
}
- return new OptimizerContext(metaData, parserContexts, validators, converters);
- }
-
- private static Properties createSQLDialectProperties(final DatabaseType databaseType) {
- Properties result = new Properties();
- result.setProperty(CalciteConnectionProperty.TIME_ZONE.camelName(), "UTC");
- result.putAll(OptimizerSQLDialectBuilderFactory.build(databaseType, result));
- return result;
+ return new OptimizerContext(metaData, OptimizerParserContextFactory.create(metaDataMap), validators, converters);
}
private static Properties createConnectionProperties() {
diff --git a/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/context/parser/OptimizerParserContextFactory.java b/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/context/parser/OptimizerParserContextFactory.java
new file mode 100644
index 0000000..aa59187
--- /dev/null
+++ b/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/context/parser/OptimizerParserContextFactory.java
@@ -0,0 +1,60 @@
+/*
+ * 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.infra.optimize.context.parser;
+
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
+import org.apache.calcite.config.CalciteConnectionProperty;
+import org.apache.shardingsphere.infra.database.type.DatabaseType;
+import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
+import org.apache.shardingsphere.infra.optimize.context.parser.dialect.OptimizerSQLDialectBuilderFactory;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Properties;
+
+/**
+ * Optimizer parser context factory.
+ */
+@RequiredArgsConstructor
+@Getter
+public final class OptimizerParserContextFactory {
+
+ /**
+ * Create optimize context.
+ *
+ * @param metaDataMap meta data map
+ * @return created optimizer context
+ */
+ public static Map<String, OptimizerParserContext> create(final Map<String, ShardingSphereMetaData> metaDataMap) {
+ Map<String, OptimizerParserContext> result = new HashMap<>();
+ for (Entry<String, ShardingSphereMetaData> entry : metaDataMap.entrySet()) {
+ DatabaseType databaseType = entry.getValue().getResource().getDatabaseType();
+ result.put(entry.getKey(), new OptimizerParserContext(databaseType, createSQLDialectProperties(databaseType)));
+ }
+ return result;
+ }
+
+ private static Properties createSQLDialectProperties(final DatabaseType databaseType) {
+ Properties result = new Properties();
+ result.setProperty(CalciteConnectionProperty.TIME_ZONE.camelName(), "UTC");
+ result.putAll(OptimizerSQLDialectBuilderFactory.build(databaseType, result));
+ return result;
+ }
+}