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

Reply via email to