You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by zh...@apache.org on 2021/05/20 11:53:56 UTC

[shardingsphere] branch master updated: Use OptimizeContext instead of CalciteContext (#10404)

This is an automated email from the ASF dual-hosted git repository.

zhangliang 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 8b21735  Use OptimizeContext instead of CalciteContext (#10404)
8b21735 is described below

commit 8b217352c4798a18044f33473d278c6953b87dd4
Author: Juan Pan(Trista) <pa...@apache.org>
AuthorDate: Thu May 20 19:53:11 2021 +0800

    Use OptimizeContext instead of CalciteContext (#10404)
---
 .../sql/optimize/context/CalciteContext.java       |  45 -------
 .../optimize/context/CalciteContextFactory.java    | 144 +--------------------
 .../sql/optimize/execute/CalciteJDBCExecutor.java  |  10 +-
 .../optimize/execute/raw/CalciteRawExecutor.java   |   4 +-
 .../execute/raw/context/CalciteDataContext.java    |   4 +-
 .../execute/raw/convert/SqlNodeConverter.java      |  41 ------
 .../infra/optimize/context/OptimizeContext.java    |   2 +
 .../optimize/context/OptimizeContextFactory.java   |   4 +-
 8 files changed, 21 insertions(+), 233 deletions(-)

diff --git a/shardingsphere-infra/shardingsphere-infra-executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/optimize/context/CalciteContext.java b/shardingsphere-infra/shardingsphere-infra-executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/optimize/context/CalciteContext.java
deleted file mode 100644
index 0c935f2..0000000
--- a/shardingsphere-infra/shardingsphere-infra-executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/optimize/context/CalciteContext.java
+++ /dev/null
@@ -1,45 +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.infra.executor.sql.optimize.context;
-
-import lombok.Getter;
-import lombok.RequiredArgsConstructor;
-import org.apache.calcite.sql.parser.SqlParser;
-import org.apache.calcite.sql.validate.SqlValidator;
-import org.apache.calcite.sql2rel.SqlToRelConverter;
-import org.apache.shardingsphere.infra.executor.sql.optimize.schema.CalciteLogicSchema;
-
-import java.util.Properties;
-
-/**
- * Calcite context.
- */
-@RequiredArgsConstructor
-@Getter
-public final class CalciteContext {
-    
-    private final Properties connectionProperties;
-    
-    private final CalciteLogicSchema calciteLogicSchema;
-    
-    private final SqlParser.Config parserConfig;
-    
-    private final SqlValidator validator;
-    
-    private final SqlToRelConverter relConverter;
-}
diff --git a/shardingsphere-infra/shardingsphere-infra-executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/optimize/context/CalciteContextFactory.java b/shardingsphere-infra/shardingsphere-infra-executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/optimize/context/CalciteContextFactory.java
index 5cbcd4d..152f093 100644
--- a/shardingsphere-infra/shardingsphere-infra-executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/optimize/context/CalciteContextFactory.java
+++ b/shardingsphere-infra/shardingsphere-infra-executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/optimize/context/CalciteContextFactory.java
@@ -17,129 +17,23 @@
 
 package org.apache.shardingsphere.infra.executor.sql.optimize.context;
 
-import org.apache.calcite.config.CalciteConnectionConfig;
-import org.apache.calcite.config.CalciteConnectionConfigImpl;
-import org.apache.calcite.config.CalciteConnectionProperty;
-import org.apache.calcite.config.Lex;
-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.volcano.VolcanoPlanner;
-import org.apache.calcite.prepare.CalciteCatalogReader;
-import org.apache.calcite.rel.type.RelDataTypeFactory;
-import org.apache.calcite.rex.RexBuilder;
-import org.apache.calcite.sql.fun.SqlStdOperatorTable;
-import org.apache.calcite.sql.parser.SqlParser;
-import org.apache.calcite.sql.parser.SqlParser.Config;
-import org.apache.calcite.sql.parser.impl.SqlParserImpl;
-import org.apache.calcite.sql.validate.SqlConformanceEnum;
-import org.apache.calcite.sql.validate.SqlValidator;
-import org.apache.calcite.sql.validate.SqlValidatorUtil;
-import org.apache.calcite.sql2rel.SqlToRelConverter;
-import org.apache.calcite.sql2rel.StandardConvertletTable;
-import org.apache.shardingsphere.infra.database.type.DatabaseType;
-import org.apache.shardingsphere.infra.database.type.dialect.H2DatabaseType;
-import org.apache.shardingsphere.infra.database.type.dialect.MariaDBDatabaseType;
-import org.apache.shardingsphere.infra.database.type.dialect.MySQLDatabaseType;
-import org.apache.shardingsphere.infra.database.type.dialect.OracleDatabaseType;
-import org.apache.shardingsphere.infra.database.type.dialect.PostgreSQLDatabaseType;
-import org.apache.shardingsphere.infra.database.type.dialect.SQL92DatabaseType;
-import org.apache.shardingsphere.infra.database.type.dialect.SQLServerDatabaseType;
-import org.apache.shardingsphere.infra.exception.ShardingSphereException;
-import org.apache.shardingsphere.infra.executor.sql.optimize.execute.raw.plan.PlannerInitializer;
 import org.apache.shardingsphere.infra.executor.sql.optimize.schema.CalciteLogicSchema;
-import org.apache.shardingsphere.infra.executor.sql.optimize.schema.CalciteLogicSchemaFactory;
 import org.apache.shardingsphere.infra.executor.sql.optimize.schema.row.CalciteRowExecutor;
 import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
+import org.apache.shardingsphere.infra.optimize.context.OptimizeContext;
+import org.apache.shardingsphere.infra.optimize.context.OptimizeContextFactory;
 
-import java.util.Collections;
 import java.util.Map;
-import java.util.Properties;
 
 /**
  * Calcite context factory.
  */
 public final class CalciteContextFactory {
     
-    private static final String LEX_CAMEL_NAME = CalciteConnectionProperty.LEX.camelName();
-    
-    private static final String CONFORMANCE_CAMEL_NAME = CalciteConnectionProperty.CONFORMANCE.camelName();
-    
-    private final Properties properties = new Properties();
-    
-    private final CalciteConnectionConfig connectionConfig;
-    
-    private final Config parserConfig;
-    
-    private final RelDataTypeFactory typeFactory;
-    
-    private final CalciteLogicSchemaFactory factory;
-    
-    private final RelOptCluster cluster;
+    private final OptimizeContextFactory optimizeContextFactory;
     
     public CalciteContextFactory(final Map<String, ShardingSphereMetaData> metaDataMap) {
-        DatabaseType databaseType = metaDataMap.isEmpty() ? null : metaDataMap.values().iterator().next().getResource().getDatabaseType();
-        initProperties(databaseType);
-        typeFactory = new JavaTypeFactoryImpl();
-        cluster = newCluster();
-        factory = new CalciteLogicSchemaFactory(metaDataMap);
-        connectionConfig = new CalciteConnectionConfigImpl(properties);
-        parserConfig = SqlParser.config()
-                .withLex(connectionConfig.lex())
-                .withIdentifierMaxLength(SqlParser.DEFAULT_IDENTIFIER_MAX_LENGTH)
-                .withConformance(connectionConfig.conformance())
-                .withParserFactory(SqlParserImpl.FACTORY);
-    }
-    
-    private void initProperties(final DatabaseType databaseType) {
-        // TODO Logic could be improved.
-        if (databaseType instanceof MySQLDatabaseType || databaseType == null) {
-            properties.setProperty(LEX_CAMEL_NAME, Lex.MYSQL.name());
-            properties.setProperty(CONFORMANCE_CAMEL_NAME, SqlConformanceEnum.MYSQL_5.name());
-            return;
-        }
-        if (databaseType instanceof H2DatabaseType) {
-            // TODO No suitable type of Lex
-            properties.setProperty(LEX_CAMEL_NAME, Lex.MYSQL.name());
-            properties.setProperty(CONFORMANCE_CAMEL_NAME, SqlConformanceEnum.DEFAULT.name());
-            return;
-        }
-        if (databaseType instanceof MariaDBDatabaseType) {
-            properties.setProperty(LEX_CAMEL_NAME, Lex.MYSQL.name());
-            properties.setProperty(CONFORMANCE_CAMEL_NAME, SqlConformanceEnum.MYSQL_5.name());
-            return;
-        }
-        if (databaseType instanceof OracleDatabaseType) {
-            properties.setProperty(LEX_CAMEL_NAME, Lex.ORACLE.name());
-            properties.setProperty(CONFORMANCE_CAMEL_NAME, SqlConformanceEnum.ORACLE_12.name());
-            return;
-        }
-        if (databaseType instanceof PostgreSQLDatabaseType) {
-            // TODO No suitable type of Lex and conformance
-            properties.setProperty(LEX_CAMEL_NAME, Lex.MYSQL.name());
-            properties.setProperty(CONFORMANCE_CAMEL_NAME, SqlConformanceEnum.DEFAULT.name());
-            return;
-        }
-        if (databaseType instanceof SQL92DatabaseType) {
-            // TODO No suitable type of Lex
-            properties.setProperty(LEX_CAMEL_NAME, Lex.MYSQL.name());
-            properties.setProperty(CONFORMANCE_CAMEL_NAME, SqlConformanceEnum.STRICT_92.name());
-            return;
-        }
-        if (databaseType instanceof SQLServerDatabaseType) {
-            properties.setProperty(LEX_CAMEL_NAME, Lex.SQL_SERVER.name());
-            properties.setProperty(CONFORMANCE_CAMEL_NAME, SqlConformanceEnum.SQL_SERVER_2008.name());
-            return;
-        }
-        throw new ShardingSphereException("No matching DatabaseType found");
-    }
-    
-    private RelOptCluster newCluster() {
-        RelOptPlanner planner = new VolcanoPlanner();
-        PlannerInitializer.init(planner);
-        return RelOptCluster.create(planner, new RexBuilder(typeFactory));
+        optimizeContextFactory = new OptimizeContextFactory(metaDataMap);
     }
     
     /**
@@ -149,32 +43,8 @@ public final class CalciteContextFactory {
      * @param executor executor
      * @return calcite context
      */
-    public CalciteContext create(final String schema, final CalciteRowExecutor executor) {
-        CalciteLogicSchema calciteLogicSchema = factory.create(schema, executor);
-        CalciteCatalogReader catalogReader = createCalciteCatalogReader(schema, connectionConfig, typeFactory, calciteLogicSchema);
-        SqlValidator validator = createSqlValidator(connectionConfig, typeFactory, catalogReader);
-        SqlToRelConverter relConverter = createSqlToRelConverter(cluster, validator, catalogReader);
-        return new CalciteContext(properties, calciteLogicSchema, parserConfig, validator, relConverter);
-    }
-    
-    private CalciteCatalogReader createCalciteCatalogReader(final String schema, final CalciteConnectionConfig config,
-                                                            final RelDataTypeFactory typeFactory, final CalciteLogicSchema calciteLogicSchema) {
-        CalciteSchema rootSchema = CalciteSchema.createRootSchema(true);
-        rootSchema.add(calciteLogicSchema.getName(), calciteLogicSchema);
-        return new CalciteCatalogReader(rootSchema, Collections.singletonList(schema), typeFactory, config);
-    }
-    
-    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 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);
+    public OptimizeContext create(final String schema, final CalciteRowExecutor executor) {
+        CalciteLogicSchema calciteLogicSchema = new CalciteLogicSchema(optimizeContextFactory.getSchemaMetadatas().getSchemas().get(schema), executor);
+        return optimizeContextFactory.create(schema, calciteLogicSchema);
     }
 }
diff --git a/shardingsphere-infra/shardingsphere-infra-executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/optimize/execute/CalciteJDBCExecutor.java b/shardingsphere-infra/shardingsphere-infra-executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/optimize/execute/CalciteJDBCExecutor.java
index 07ce4eb..87a1278 100644
--- a/shardingsphere-infra/shardingsphere-infra-executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/optimize/execute/CalciteJDBCExecutor.java
+++ b/shardingsphere-infra/shardingsphere-infra-executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/optimize/execute/CalciteJDBCExecutor.java
@@ -22,7 +22,7 @@ import org.apache.calcite.jdbc.CalciteConnection;
 import org.apache.calcite.schema.SchemaPlus;
 import org.apache.shardingsphere.infra.executor.sql.execute.result.query.QueryResult;
 import org.apache.shardingsphere.infra.executor.sql.execute.result.query.impl.driver.jdbc.type.stream.JDBCStreamQueryResult;
-import org.apache.shardingsphere.infra.executor.sql.optimize.context.CalciteContext;
+import org.apache.shardingsphere.infra.optimize.context.OptimizeContext;
 
 import java.sql.Connection;
 import java.sql.DriverManager;
@@ -45,7 +45,7 @@ public final class CalciteJDBCExecutor implements CalciteExecutor {
     
     public static final Properties PROPERTIES = new Properties();
     
-    private final CalciteContext context;
+    private final OptimizeContext context;
     
     private Statement statement;
     
@@ -57,7 +57,7 @@ public final class CalciteJDBCExecutor implements CalciteExecutor {
         }
     }
     
-    public CalciteJDBCExecutor(final CalciteContext context) {
+    public CalciteJDBCExecutor(final OptimizeContext context) {
         this.context = context;
         PROPERTIES.setProperty(CalciteConnectionProperty.LEX.camelName(), context.getConnectionProperties().getProperty(CalciteConnectionProperty.LEX.camelName()));
         PROPERTIES.setProperty(CalciteConnectionProperty.CONFORMANCE.camelName(), context.getConnectionProperties().getProperty(CalciteConnectionProperty.CONFORMANCE.camelName()));
@@ -92,8 +92,8 @@ public final class CalciteJDBCExecutor implements CalciteExecutor {
         Connection result = DriverManager.getConnection(CONNECTION_URL, PROPERTIES);
         CalciteConnection calciteConnection = result.unwrap(CalciteConnection.class);
         SchemaPlus rootSchema = calciteConnection.getRootSchema();
-        rootSchema.add(context.getCalciteLogicSchema().getName(), context.getCalciteLogicSchema());
-        calciteConnection.setSchema(context.getCalciteLogicSchema().getName());
+        rootSchema.add(context.getSchemaName(), context.getLogicSchema());
+        calciteConnection.setSchema(context.getSchemaName());
         return result;
     }
     
diff --git a/shardingsphere-infra/shardingsphere-infra-executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/optimize/execute/raw/CalciteRawExecutor.java b/shardingsphere-infra/shardingsphere-infra-executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/optimize/execute/raw/CalciteRawExecutor.java
index 5f3c304..b251d9e 100644
--- a/shardingsphere-infra/shardingsphere-infra-executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/optimize/execute/raw/CalciteRawExecutor.java
+++ b/shardingsphere-infra/shardingsphere-infra-executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/optimize/execute/raw/CalciteRawExecutor.java
@@ -30,9 +30,9 @@ import org.apache.calcite.sql.SqlNode;
 import org.apache.calcite.sql.parser.SqlParseException;
 import org.apache.calcite.sql.parser.SqlParser;
 import org.apache.shardingsphere.infra.executor.sql.execute.result.query.QueryResult;
-import org.apache.shardingsphere.infra.executor.sql.optimize.context.CalciteContext;
 import org.apache.shardingsphere.infra.executor.sql.optimize.execute.CalciteExecutor;
 import org.apache.shardingsphere.infra.executor.sql.optimize.execute.raw.context.CalciteDataContext;
+import org.apache.shardingsphere.infra.optimize.context.OptimizeContext;
 
 import java.sql.ResultSet;
 import java.util.Collections;
@@ -44,7 +44,7 @@ import java.util.List;
 @RequiredArgsConstructor
 public final class CalciteRawExecutor implements CalciteExecutor {
     
-    private final CalciteContext context;
+    private final OptimizeContext context;
     
     @Override
     public List<QueryResult> executeQuery(final String sql, final List<Object> parameters) {
diff --git a/shardingsphere-infra/shardingsphere-infra-executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/optimize/execute/raw/context/CalciteDataContext.java b/shardingsphere-infra/shardingsphere-infra-executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/optimize/execute/raw/context/CalciteDataContext.java
index da76af8..b453a06 100644
--- a/shardingsphere-infra/shardingsphere-infra-executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/optimize/execute/raw/context/CalciteDataContext.java
+++ b/shardingsphere-infra/shardingsphere-infra-executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/optimize/execute/raw/context/CalciteDataContext.java
@@ -22,7 +22,7 @@ import org.apache.calcite.DataContext;
 import org.apache.calcite.adapter.java.JavaTypeFactory;
 import org.apache.calcite.linq4j.QueryProvider;
 import org.apache.calcite.schema.SchemaPlus;
-import org.apache.shardingsphere.infra.executor.sql.optimize.context.CalciteContext;
+import org.apache.shardingsphere.infra.optimize.context.OptimizeContext;
 
 /**
  * Calcite data context.
@@ -30,7 +30,7 @@ import org.apache.shardingsphere.infra.executor.sql.optimize.context.CalciteCont
 @RequiredArgsConstructor
 public final class CalciteDataContext implements DataContext {
     
-    private final CalciteContext context;
+    private final OptimizeContext context;
     
     @Override
     public SchemaPlus getRootSchema() {
diff --git a/shardingsphere-infra/shardingsphere-infra-executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/optimize/execute/raw/convert/SqlNodeConverter.java b/shardingsphere-infra/shardingsphere-infra-executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/optimize/execute/raw/convert/SqlNodeConverter.java
deleted file mode 100644
index 748266d..0000000
--- a/shardingsphere-infra/shardingsphere-infra-executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/optimize/execute/raw/convert/SqlNodeConverter.java
+++ /dev/null
@@ -1,41 +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.infra.executor.sql.optimize.execute.raw.convert;
-
-import lombok.AccessLevel;
-import lombok.NoArgsConstructor;
-import org.apache.calcite.sql.SqlNode;
-import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
-
-import java.util.Optional;
-
-/**
- * SqlNode converter.
- */
-@NoArgsConstructor(access = AccessLevel.PRIVATE)
-public final class SqlNodeConverter {
-    
-    /**
-     *  Convert.
-     * @param statementContext statement context
-     * @return sqlNode optional
-     */
-    public static Optional<SqlNode> convert(final SQLStatementContext<?> statementContext) {
-        return Optional.empty();
-    }
-}
diff --git a/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/context/OptimizeContext.java b/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/context/OptimizeContext.java
index 7dc346e..d11a911 100644
--- a/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/context/OptimizeContext.java
+++ b/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/context/OptimizeContext.java
@@ -35,6 +35,8 @@ public final class OptimizeContext {
     
     private final Properties connectionProperties;
     
+    private final String schemaName;
+    
     private final Schema logicSchema;
     
     private final SqlParser.Config parserConfig;
diff --git a/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/context/OptimizeContextFactory.java b/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/context/OptimizeContextFactory.java
index a3dac54..0104ad1 100644
--- a/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/context/OptimizeContextFactory.java
+++ b/shardingsphere-infra/shardingsphere-infra-optimize/src/main/java/org/apache/shardingsphere/infra/optimize/context/OptimizeContextFactory.java
@@ -17,6 +17,7 @@
 
 package org.apache.shardingsphere.infra.optimize.context;
 
+import lombok.Getter;
 import org.apache.calcite.config.CalciteConnectionConfig;
 import org.apache.calcite.config.CalciteConnectionConfigImpl;
 import org.apache.calcite.config.CalciteConnectionProperty;
@@ -74,6 +75,7 @@ public final class OptimizeContextFactory {
     
     private final RelDataTypeFactory typeFactory;
     
+    @Getter
     private final LogicSchemaMetadatas schemaMetadatas;
     
     private final RelOptCluster cluster;
@@ -152,7 +154,7 @@ public final class OptimizeContextFactory {
         CalciteCatalogReader catalogReader = createCalciteCatalogReader(schemaName, connectionConfig, typeFactory, logicSchema);
         SqlValidator validator = createSqlValidator(connectionConfig, typeFactory, catalogReader);
         SqlToRelConverter relConverter = createSqlToRelConverter(cluster, validator, catalogReader);
-        return new OptimizeContext(properties, logicSchema, parserConfig, validator, relConverter);
+        return new OptimizeContext(properties, schemaName, logicSchema, parserConfig, validator, relConverter);
     }
     
     private CalciteCatalogReader createCalciteCatalogReader(final String schemaName, final CalciteConnectionConfig config,