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

jackietien pushed a commit to branch ty/TableModelGrammar
in repository https://gitbox.apache.org/repos/asf/iotdb.git


The following commit(s) were added to refs/heads/ty/TableModelGrammar by this 
push:
     new 87fd54953c3 Unity the implementation of PlanOptimizers in query
87fd54953c3 is described below

commit 87fd54953c39ca15a09289ffbbcc95a0d8dcacd3
Author: Beyyes <[email protected]>
AuthorDate: Wed Jul 17 14:19:41 2024 +0800

    Unity the implementation of PlanOptimizers in query
---
 .../plan/relational/planner/LogicalPlanner.java    | 116 +++++----------------
 .../plan/relational/planner/PlannerContext.java    |   4 +
 .../distribute/TableDistributionPlanner.java       |  34 ++++--
 .../planner/optimizations/OptimizeFactory.java     |  78 ++++++++++++++
 .../planner/optimizations/PlanOptimizer.java       |  44 ++++++--
 ...Down.java => PushLimitOffsetIntoTableScan.java} |  18 +---
 .../optimizations/PushPredicateIntoTableScan.java  |  18 ++--
 .../planner/optimizations/SimplifyExpressions.java |  16 +--
 .../planner/optimizations/TablePlanOptimizer.java  |  30 ------
 .../analyzer/LimitOffsetPushDownTest.java          |  17 +--
 .../plan/relational/analyzer/SortTest.java         |  30 +++---
 11 files changed, 198 insertions(+), 207 deletions(-)

diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/LogicalPlanner.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/LogicalPlanner.java
index 8d34326e066..ad8fc032791 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/LogicalPlanner.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/LogicalPlanner.java
@@ -17,7 +17,6 @@ package 
org.apache.iotdb.db.queryengine.plan.relational.planner;
 import org.apache.iotdb.commons.partition.SchemaPartition;
 import org.apache.iotdb.commons.schema.table.column.TsTableColumnCategory;
 import org.apache.iotdb.commons.schema.table.column.TsTableColumnSchema;
-import org.apache.iotdb.commons.utils.TestOnly;
 import org.apache.iotdb.db.queryengine.common.MPPQueryContext;
 import org.apache.iotdb.db.queryengine.common.SessionInfo;
 import org.apache.iotdb.db.queryengine.common.header.ColumnHeader;
@@ -33,24 +32,10 @@ import 
org.apache.iotdb.db.queryengine.plan.relational.analyzer.Field;
 import org.apache.iotdb.db.queryengine.plan.relational.analyzer.RelationType;
 import 
org.apache.iotdb.db.queryengine.plan.relational.execution.querystats.PlanOptimizersStatsCollector;
 import org.apache.iotdb.db.queryengine.plan.relational.metadata.Metadata;
-import 
org.apache.iotdb.db.queryengine.plan.relational.planner.iterative.IterativeOptimizer;
-import org.apache.iotdb.db.queryengine.plan.relational.planner.iterative.Rule;
-import 
org.apache.iotdb.db.queryengine.plan.relational.planner.iterative.RuleStatsRecorder;
-import 
org.apache.iotdb.db.queryengine.plan.relational.planner.iterative.rule.InlineProjections;
-import 
org.apache.iotdb.db.queryengine.plan.relational.planner.iterative.rule.PruneFilterColumns;
-import 
org.apache.iotdb.db.queryengine.plan.relational.planner.iterative.rule.PruneLimitColumns;
-import 
org.apache.iotdb.db.queryengine.plan.relational.planner.iterative.rule.PruneOffsetColumns;
-import 
org.apache.iotdb.db.queryengine.plan.relational.planner.iterative.rule.PruneOutputSourceColumns;
-import 
org.apache.iotdb.db.queryengine.plan.relational.planner.iterative.rule.PruneProjectColumns;
-import 
org.apache.iotdb.db.queryengine.plan.relational.planner.iterative.rule.PruneSortColumns;
-import 
org.apache.iotdb.db.queryengine.plan.relational.planner.iterative.rule.PruneTableScanColumns;
-import 
org.apache.iotdb.db.queryengine.plan.relational.planner.iterative.rule.RemoveRedundantIdentityProjections;
 import 
org.apache.iotdb.db.queryengine.plan.relational.planner.node.CreateTableDeviceNode;
 import org.apache.iotdb.db.queryengine.plan.relational.planner.node.OutputNode;
+import 
org.apache.iotdb.db.queryengine.plan.relational.planner.optimizations.OptimizeFactory;
 import 
org.apache.iotdb.db.queryengine.plan.relational.planner.optimizations.PlanOptimizer;
-import 
org.apache.iotdb.db.queryengine.plan.relational.planner.optimizations.PushPredicateIntoTableScan;
-import 
org.apache.iotdb.db.queryengine.plan.relational.planner.optimizations.SimplifyExpressions;
-import 
org.apache.iotdb.db.queryengine.plan.relational.planner.optimizations.TablePlanOptimizer;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.CreateDevice;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Explain;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.FetchDevice;
@@ -63,14 +48,11 @@ import 
org.apache.iotdb.db.schemaengine.table.DataNodeTableCache;
 
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.ImmutableSet;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.List;
-import java.util.Set;
 
 import static java.util.Objects.requireNonNull;
 import static 
org.apache.iotdb.db.queryengine.plan.expression.leaf.TimestampOperand.TIMESTAMP_EXPRESSION_STRING;
@@ -78,98 +60,46 @@ import static 
org.apache.iotdb.db.queryengine.plan.relational.type.InternalTypeM
 
 public class LogicalPlanner {
   private static final Logger LOG = 
LoggerFactory.getLogger(LogicalPlanner.class);
-  private final MPPQueryContext context;
+  private final MPPQueryContext queryContext;
   private final SessionInfo sessionInfo;
   private final SymbolAllocator symbolAllocator = new SymbolAllocator();
   private final List<PlanOptimizer> planOptimizers;
-  // TODO Remove after all rules are modified
-  private final List<TablePlanOptimizer> tablePlanOptimizers;
   private final Metadata metadata;
   private final WarningCollector warningCollector;
 
   public LogicalPlanner(
-      MPPQueryContext context,
+      MPPQueryContext queryContext,
       Metadata metadata,
       SessionInfo sessionInfo,
       WarningCollector warningCollector) {
-    this.context = context;
+    this.queryContext = queryContext;
     this.metadata = metadata;
     this.sessionInfo = requireNonNull(sessionInfo, "session is null");
     this.warningCollector = requireNonNull(warningCollector, "warningCollector 
is null");
     PlannerContext plannerContext = new PlannerContext(metadata, new 
InternalTypeManager());
-    this.tablePlanOptimizers =
-        Arrays.asList(new SimplifyExpressions(), new 
PushPredicateIntoTableScan());
-
-    Set<Rule<?>> pruneRules =
-        ImmutableSet.of(
-            new PruneFilterColumns(),
-            new PruneLimitColumns(),
-            new PruneOffsetColumns(),
-            new PruneOutputSourceColumns(),
-            new PruneProjectColumns(),
-            new PruneSortColumns(),
-            new PruneTableScanColumns(metadata));
-    Set<Rule<?>> inlineProjections =
-        ImmutableSet.of(
-            new InlineProjections(plannerContext), new 
RemoveRedundantIdentityProjections());
-    this.planOptimizers =
-        ImmutableList.of(
-            new IterativeOptimizer(plannerContext, new RuleStatsRecorder(), 
pruneRules),
-            new IterativeOptimizer(plannerContext, new RuleStatsRecorder(), 
inlineProjections));
-  }
-
-  @TestOnly
-  public LogicalPlanner(
-      MPPQueryContext context,
-      Metadata metadata,
-      SessionInfo sessionInfo,
-      List<TablePlanOptimizer> tablePlanOptimizers,
-      WarningCollector warningCollector) {
-    this.context = context;
-    this.metadata = metadata;
-    this.sessionInfo = requireNonNull(sessionInfo, "session is null");
-    this.warningCollector = requireNonNull(warningCollector, "warningCollector 
is null");
-    this.tablePlanOptimizers = tablePlanOptimizers;
-    PlannerContext plannerContext = new PlannerContext(metadata, new 
InternalTypeManager());
-    Set<Rule<?>> pruneRules =
-        ImmutableSet.of(
-            new PruneFilterColumns(),
-            new PruneLimitColumns(),
-            new PruneOffsetColumns(),
-            new PruneOutputSourceColumns(),
-            new PruneProjectColumns(),
-            new PruneSortColumns(),
-            new PruneTableScanColumns(metadata));
-    Set<Rule<?>> inlineProjections =
-        ImmutableSet.of(
-            new InlineProjections(plannerContext), new 
RemoveRedundantIdentityProjections());
-    this.planOptimizers =
-        ImmutableList.of(
-            new IterativeOptimizer(plannerContext, new RuleStatsRecorder(), 
pruneRules),
-            new IterativeOptimizer(plannerContext, new RuleStatsRecorder(), 
inlineProjections));
+    this.planOptimizers = new 
OptimizeFactory(plannerContext).getPlanOptimizers();
   }
 
   public LogicalQueryPlan plan(Analysis analysis) {
     PlanNode planNode = planStatement(analysis, analysis.getStatement());
 
-    // TODO remove after all optimizer rewritten as Trino-like
-    for (TablePlanOptimizer optimizer : tablePlanOptimizers) {
-      planNode = optimizer.optimize(planNode, analysis, metadata, sessionInfo, 
context);
-    }
-
     for (PlanOptimizer optimizer : planOptimizers) {
       planNode =
           optimizer.optimize(
               planNode,
               new PlanOptimizer.Context(
                   sessionInfo,
-                  context.getTypeProvider(),
+                  analysis,
+                  metadata,
+                  queryContext,
+                  queryContext.getTypeProvider(),
                   symbolAllocator,
-                  context.getQueryId(),
+                  queryContext.getQueryId(),
                   warningCollector,
                   
PlanOptimizersStatsCollector.createPlanOptimizersStatsCollector()));
     }
-    return new LogicalQueryPlan(context, planNode);
+
+    return new LogicalQueryPlan(queryContext, planNode);
   }
 
   private PlanNode planStatement(Analysis analysis, Statement statement) {
@@ -221,7 +151,10 @@ public class LogicalPlanner {
 
     OutputNode outputNode =
         new OutputNode(
-            context.getQueryId().genPlanNodeId(), plan.getRoot(), 
names.build(), outputs.build());
+            queryContext.getQueryId().genPlanNodeId(),
+            plan.getRoot(),
+            names.build(),
+            outputs.build());
 
     DatasetHeader respDatasetHeader = new DatasetHeader(columnHeaders, false);
     analysis.setRespDatasetHeader(respDatasetHeader);
@@ -238,15 +171,16 @@ public class LogicalPlanner {
   }
 
   private RelationPlanner getRelationPlanner(Analysis analysis) {
-    return new RelationPlanner(analysis, symbolAllocator, context, 
sessionInfo, ImmutableMap.of());
+    return new RelationPlanner(
+        analysis, symbolAllocator, queryContext, sessionInfo, 
ImmutableMap.of());
   }
 
   private PlanNode planCreateDevice(CreateDevice statement, Analysis analysis) 
{
-    context.setQueryType(QueryType.WRITE);
+    queryContext.setQueryType(QueryType.WRITE);
 
     CreateTableDeviceNode node =
         new CreateTableDeviceNode(
-            context.getQueryId().genPlanNodeId(),
+            queryContext.getQueryId().genPlanNodeId(),
             statement.getDatabase(),
             statement.getTable(),
             statement.getDeviceIdList(),
@@ -258,14 +192,14 @@ public class LogicalPlanner {
         metadata.getOrCreateSchemaPartition(
             statement.getDatabase(),
             node.getPartitionKeyList(),
-            context.getSession().getUserName());
+            queryContext.getSession().getUserName());
     analysis.setSchemaPartitionInfo(partition);
 
     return node;
   }
 
   private PlanNode planFetchDevice(FetchDevice statement, Analysis analysis) {
-    context.setQueryType(QueryType.READ);
+    queryContext.setQueryType(QueryType.READ);
 
     List<ColumnHeader> columnHeaderList =
         getColumnHeaderList(statement.getDatabase(), statement.getTableName());
@@ -274,7 +208,7 @@ public class LogicalPlanner {
 
     TableDeviceFetchNode fetchNode =
         new TableDeviceFetchNode(
-            context.getQueryId().genPlanNodeId(),
+            queryContext.getQueryId().genPlanNodeId(),
             statement.getDatabase(),
             statement.getTableName(),
             statement.getDeviceIdList(),
@@ -293,14 +227,14 @@ public class LogicalPlanner {
   }
 
   private PlanNode planShowDevice(ShowDevice statement, Analysis analysis) {
-    context.setQueryType(QueryType.READ);
+    queryContext.setQueryType(QueryType.READ);
 
     List<ColumnHeader> columnHeaderList =
         getColumnHeaderList(statement.getDatabase(), statement.getTableName());
 
     TableDeviceQueryNode queryNode =
         new TableDeviceQueryNode(
-            context.getQueryId().genPlanNodeId(),
+            queryContext.getQueryId().genPlanNodeId(),
             statement.getDatabase(),
             statement.getTableName(),
             statement.getIdDeterminedPredicateList(),
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/PlannerContext.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/PlannerContext.java
index b8090df85d4..7fb3a2cb59e 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/PlannerContext.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/PlannerContext.java
@@ -37,4 +37,8 @@ public class PlannerContext {
     this.metadata = metadata;
     this.typeManager = typeManager;
   }
+
+  public Metadata getMetadata() {
+    return metadata;
+  }
 }
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/distribute/TableDistributionPlanner.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/distribute/TableDistributionPlanner.java
index b47eb51db94..e6911aceb7b 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/distribute/TableDistributionPlanner.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/distribute/TableDistributionPlanner.java
@@ -26,9 +26,11 @@ import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.ExchangeNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.sink.IdentitySinkNode;
 import org.apache.iotdb.db.queryengine.plan.relational.analyzer.Analysis;
+import 
org.apache.iotdb.db.queryengine.plan.relational.execution.querystats.PlanOptimizersStatsCollector;
 import org.apache.iotdb.db.queryengine.plan.relational.planner.Symbol;
-import 
org.apache.iotdb.db.queryengine.plan.relational.planner.optimizations.LimitOffsetPushDown;
-import 
org.apache.iotdb.db.queryengine.plan.relational.planner.optimizations.TablePlanOptimizer;
+import org.apache.iotdb.db.queryengine.plan.relational.planner.SymbolAllocator;
+import 
org.apache.iotdb.db.queryengine.plan.relational.planner.optimizations.PlanOptimizer;
+import 
org.apache.iotdb.db.queryengine.plan.relational.planner.optimizations.PushLimitOffsetIntoTableScan;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Query;
 
 import java.util.Collections;
@@ -38,20 +40,21 @@ import java.util.Map;
 import java.util.stream.Collectors;
 
 import static com.google.common.base.Preconditions.checkArgument;
+import static 
org.apache.iotdb.db.queryengine.execution.warnings.WarningCollector.NOOP;
 import static 
org.apache.iotdb.db.queryengine.plan.expression.leaf.TimestampOperand.TIMESTAMP_EXPRESSION_STRING;
 
 public class TableDistributionPlanner {
   private final Analysis analysis;
   private final LogicalQueryPlan logicalQueryPlan;
   private final MPPQueryContext mppQueryContext;
-  private final List<TablePlanOptimizer> optimizers;
+  private final List<PlanOptimizer> optimizers;
 
   public TableDistributionPlanner(
       Analysis analysis, LogicalQueryPlan logicalQueryPlan, MPPQueryContext 
mppQueryContext) {
     this.analysis = analysis;
     this.logicalQueryPlan = logicalQueryPlan;
     this.mppQueryContext = mppQueryContext;
-    this.optimizers = Collections.singletonList(new LimitOffsetPushDown());
+    this.optimizers = Collections.singletonList(new 
PushLimitOffsetIntoTableScan());
   }
 
   public DistributedQueryPlan plan() {
@@ -64,15 +67,26 @@ public class TableDistributionPlanner {
     checkArgument(distributedPlanResult.size() == 1, "Root node must return 
only one");
 
     // distribute plan optimize rule
-    this.optimizers.forEach(
-        optimizer ->
-            optimizer.optimize(
-                distributedPlanResult.get(0), analysis, null, null, 
mppQueryContext));
+    PlanNode distributedPlan = distributedPlanResult.get(0);
+    for (PlanOptimizer optimizer : optimizers) {
+      distributedPlan =
+          optimizer.optimize(
+              distributedPlan,
+              new PlanOptimizer.Context(
+                  null,
+                  analysis,
+                  null,
+                  mppQueryContext,
+                  mppQueryContext.getTypeProvider(),
+                  new SymbolAllocator(),
+                  mppQueryContext.getQueryId(),
+                  NOOP,
+                  
PlanOptimizersStatsCollector.createPlanOptimizersStatsCollector()));
+    }
 
     // add exchange node for distributed plan
     PlanNode outputNodeWithExchange =
-        new AddExchangeNodes(mppQueryContext)
-            .addExchangeNodes(distributedPlanResult.get(0), planContext);
+        new 
AddExchangeNodes(mppQueryContext).addExchangeNodes(distributedPlan, 
planContext);
     if (analysis.getStatement() instanceof Query) {
       analysis
           .getRespDatasetHeader()
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/OptimizeFactory.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/OptimizeFactory.java
new file mode 100644
index 00000000000..486721b46e9
--- /dev/null
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/OptimizeFactory.java
@@ -0,0 +1,78 @@
+/*
+ * Licensed 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.iotdb.db.queryengine.plan.relational.planner.optimizations;
+
+import org.apache.iotdb.db.queryengine.plan.relational.planner.PlannerContext;
+import 
org.apache.iotdb.db.queryengine.plan.relational.planner.iterative.IterativeOptimizer;
+import org.apache.iotdb.db.queryengine.plan.relational.planner.iterative.Rule;
+import 
org.apache.iotdb.db.queryengine.plan.relational.planner.iterative.RuleStatsRecorder;
+import 
org.apache.iotdb.db.queryengine.plan.relational.planner.iterative.rule.InlineProjections;
+import 
org.apache.iotdb.db.queryengine.plan.relational.planner.iterative.rule.PruneFilterColumns;
+import 
org.apache.iotdb.db.queryengine.plan.relational.planner.iterative.rule.PruneLimitColumns;
+import 
org.apache.iotdb.db.queryengine.plan.relational.planner.iterative.rule.PruneOffsetColumns;
+import 
org.apache.iotdb.db.queryengine.plan.relational.planner.iterative.rule.PruneOutputSourceColumns;
+import 
org.apache.iotdb.db.queryengine.plan.relational.planner.iterative.rule.PruneProjectColumns;
+import 
org.apache.iotdb.db.queryengine.plan.relational.planner.iterative.rule.PruneSortColumns;
+import 
org.apache.iotdb.db.queryengine.plan.relational.planner.iterative.rule.PruneTableScanColumns;
+import 
org.apache.iotdb.db.queryengine.plan.relational.planner.iterative.rule.RemoveRedundantIdentityProjections;
+
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableSet;
+
+import java.util.List;
+import java.util.Set;
+
+public class OptimizeFactory {
+
+  private final List<PlanOptimizer> planOptimizers;
+
+  public OptimizeFactory(PlannerContext plannerContext) {
+
+    PlanOptimizer simplifyExpressionOptimizer = new SimplifyExpressions();
+    PlanOptimizer pushPredicateIntoTableScanOptimizer = new 
PushPredicateIntoTableScan();
+
+    Set<Rule<?>> columnPruningRules =
+        ImmutableSet.of(
+            new PruneFilterColumns(),
+            new PruneLimitColumns(),
+            new PruneOffsetColumns(),
+            new PruneOutputSourceColumns(),
+            new PruneProjectColumns(),
+            new PruneSortColumns(),
+            new PruneTableScanColumns(plannerContext.getMetadata()));
+    IterativeOptimizer columnPruningOptimizer =
+        new IterativeOptimizer(plannerContext, new RuleStatsRecorder(), 
columnPruningRules);
+
+    IterativeOptimizer inlineProjectionsOptimizer =
+        new IterativeOptimizer(
+            plannerContext,
+            new RuleStatsRecorder(),
+            ImmutableSet.of(
+                new InlineProjections(plannerContext), new 
RemoveRedundantIdentityProjections()));
+
+    this.planOptimizers =
+        ImmutableList.of(
+            simplifyExpressionOptimizer,
+            columnPruningOptimizer,
+            inlineProjectionsOptimizer,
+            pushPredicateIntoTableScanOptimizer,
+            // redo columnPrune and inlineProjections after 
pushPredicateIntoTableScan
+            columnPruningOptimizer,
+            inlineProjectionsOptimizer);
+  }
+
+  public List<PlanOptimizer> getPlanOptimizers() {
+    return planOptimizers;
+  }
+}
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/PlanOptimizer.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/PlanOptimizer.java
index a2a4de8ae95..003e7d12277 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/PlanOptimizer.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/PlanOptimizer.java
@@ -13,12 +13,15 @@
  */
 package org.apache.iotdb.db.queryengine.plan.relational.planner.optimizations;
 
+import org.apache.iotdb.db.queryengine.common.MPPQueryContext;
 import org.apache.iotdb.db.queryengine.common.QueryId;
 import org.apache.iotdb.db.queryengine.common.SessionInfo;
 import org.apache.iotdb.db.queryengine.execution.warnings.WarningCollector;
 import org.apache.iotdb.db.queryengine.plan.analyze.TypeProvider;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNode;
+import org.apache.iotdb.db.queryengine.plan.relational.analyzer.Analysis;
 import 
org.apache.iotdb.db.queryengine.plan.relational.execution.querystats.PlanOptimizersStatsCollector;
+import org.apache.iotdb.db.queryengine.plan.relational.metadata.Metadata;
 import org.apache.iotdb.db.queryengine.plan.relational.planner.SymbolAllocator;
 
 import static java.util.Objects.requireNonNull;
@@ -28,23 +31,32 @@ public interface PlanOptimizer {
 
   class Context {
     private final SessionInfo sessionInfo;
-    private final TypeProvider types;
+    private final Analysis analysis;
+    private final Metadata metadata;
+    private final MPPQueryContext queryContext;
+    private final TypeProvider typeProvider;
     private final SymbolAllocator symbolAllocator;
-    private final QueryId idAllocator;
+    private final QueryId queryIdAllocator;
     private final WarningCollector warningCollector;
     private final PlanOptimizersStatsCollector planOptimizersStatsCollector;
 
     public Context(
-        SessionInfo session,
-        TypeProvider types,
+        SessionInfo sessionInfo,
+        Analysis analysis,
+        Metadata metadata,
+        MPPQueryContext queryContext,
+        TypeProvider typeProvider,
         SymbolAllocator symbolAllocator,
-        QueryId idAllocator,
+        QueryId queryIdAllocator,
         WarningCollector warningCollector,
         PlanOptimizersStatsCollector planOptimizersStatsCollector) {
-      this.sessionInfo = requireNonNull(session, "session is null");
-      this.types = requireNonNull(types, "types is null");
+      this.sessionInfo = sessionInfo;
+      this.analysis = analysis;
+      this.metadata = metadata;
+      this.queryContext = queryContext;
+      this.typeProvider = requireNonNull(typeProvider, "types is null");
       this.symbolAllocator = requireNonNull(symbolAllocator, "symbolAllocator 
is null");
-      this.idAllocator = requireNonNull(idAllocator, "idAllocator is null");
+      this.queryIdAllocator = requireNonNull(queryIdAllocator, "idAllocator is 
null");
       this.warningCollector = requireNonNull(warningCollector, 
"warningCollector is null");
       this.planOptimizersStatsCollector =
           requireNonNull(planOptimizersStatsCollector, 
"planOptimizersStatsCollector is null");
@@ -54,8 +66,20 @@ public interface PlanOptimizer {
       return sessionInfo;
     }
 
+    public Analysis getAnalysis() {
+      return analysis;
+    }
+
+    public Metadata getMetadata() {
+      return metadata;
+    }
+
+    public MPPQueryContext getQueryContext() {
+      return queryContext;
+    }
+
     public TypeProvider types() {
-      return types;
+      return typeProvider;
     }
 
     public SymbolAllocator symbolAllocator() {
@@ -63,7 +87,7 @@ public interface PlanOptimizer {
     }
 
     public QueryId idAllocator() {
-      return idAllocator;
+      return queryIdAllocator;
     }
 
     public WarningCollector warningCollector() {
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/LimitOffsetPushDown.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/PushLimitOffsetIntoTableScan.java
similarity index 93%
rename from 
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/LimitOffsetPushDown.java
rename to 
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/PushLimitOffsetIntoTableScan.java
index 4bf01ac1f72..081ea33983e 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/LimitOffsetPushDown.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/PushLimitOffsetIntoTableScan.java
@@ -15,13 +15,10 @@
 package org.apache.iotdb.db.queryengine.plan.relational.planner.optimizations;
 
 import org.apache.iotdb.commons.schema.table.column.TsTableColumnCategory;
-import org.apache.iotdb.db.queryengine.common.MPPQueryContext;
-import org.apache.iotdb.db.queryengine.common.SessionInfo;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNode;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanVisitor;
 import org.apache.iotdb.db.queryengine.plan.relational.analyzer.Analysis;
 import org.apache.iotdb.db.queryengine.plan.relational.metadata.ColumnSchema;
-import org.apache.iotdb.db.queryengine.plan.relational.metadata.Metadata;
 import org.apache.iotdb.db.queryengine.plan.relational.planner.OrderingScheme;
 import org.apache.iotdb.db.queryengine.plan.relational.planner.Symbol;
 import 
org.apache.iotdb.db.queryengine.plan.relational.planner.node.CollectNode;
@@ -52,20 +49,15 @@ import static 
org.apache.iotdb.db.utils.constant.TestConstant.TIMESTAMP_STR;
  * <li>Order by all IDs, limit can be pushed down, set 
pushDownToEachDevice==false
  * <li>Order by some IDs or order by time, limit can be pushed down, set 
pushDownToEachDevice==true
  */
-public class LimitOffsetPushDown implements TablePlanOptimizer {
+public class PushLimitOffsetIntoTableScan implements PlanOptimizer {
 
   @Override
-  public PlanNode optimize(
-      PlanNode planNode,
-      Analysis analysis,
-      Metadata metadata,
-      SessionInfo sessionInfo,
-      MPPQueryContext context) {
-    if (!(analysis.getStatement() instanceof Query)) {
-      return planNode;
+  public PlanNode optimize(PlanNode plan, PlanOptimizer.Context context) {
+    if (!(context.getAnalysis().getStatement() instanceof Query)) {
+      return plan;
     }
 
-    return planNode.accept(new Rewriter(), new Context(analysis));
+    return plan.accept(new Rewriter(), new Context(context.getAnalysis()));
   }
 
   private static class Rewriter extends PlanVisitor<PlanNode, Context> {
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/PushPredicateIntoTableScan.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/PushPredicateIntoTableScan.java
index 63d55214779..74ff26c7dce 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/PushPredicateIntoTableScan.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/PushPredicateIntoTableScan.java
@@ -20,7 +20,6 @@ import 
org.apache.iotdb.commons.partition.DataPartitionQueryParam;
 import org.apache.iotdb.db.conf.IoTDBConfig;
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
 import org.apache.iotdb.db.queryengine.common.MPPQueryContext;
-import org.apache.iotdb.db.queryengine.common.SessionInfo;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNode;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanVisitor;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.MultiChildProcessNode;
@@ -45,6 +44,7 @@ import org.apache.tsfile.utils.Pair;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
+import java.util.Locale;
 import java.util.Set;
 import java.util.stream.Collectors;
 
@@ -52,6 +52,7 @@ import static java.util.Objects.requireNonNull;
 import static 
org.apache.iotdb.commons.schema.table.column.TsTableColumnCategory.ATTRIBUTE;
 import static 
org.apache.iotdb.commons.schema.table.column.TsTableColumnCategory.MEASUREMENT;
 import static 
org.apache.iotdb.db.queryengine.plan.analyze.AnalyzeVisitor.getTimePartitionSlotList;
+import static 
org.apache.iotdb.db.queryengine.plan.expression.leaf.TimestampOperand.TIMESTAMP_EXPRESSION_STRING;
 import static 
org.apache.iotdb.db.queryengine.plan.relational.planner.ir.GlobalTimePredicateExtractVisitor.extractGlobalTimeFilter;
 
 /**
@@ -75,18 +76,15 @@ import static 
org.apache.iotdb.db.queryengine.plan.relational.planner.ir.GlobalT
  * <p>Notice that, when aggregation, multi-table, join are introduced, this 
optimization rule need
  * to be adapted.
  */
-public class PushPredicateIntoTableScan implements TablePlanOptimizer {
+public class PushPredicateIntoTableScan implements PlanOptimizer {
 
   private static final IoTDBConfig CONFIG = 
IoTDBDescriptor.getInstance().getConfig();
 
   @Override
-  public PlanNode optimize(
-      PlanNode planNode,
-      Analysis analysis,
-      Metadata metadata,
-      SessionInfo sessionInfo,
-      MPPQueryContext queryContext) {
-    return planNode.accept(new Rewriter(queryContext, analysis, metadata), 
null);
+  public PlanNode optimize(PlanNode plan, Context context) {
+    return plan.accept(
+        new Rewriter(context.getQueryContext(), context.getAnalysis(), 
context.getMetadata()),
+        null);
   }
 
   private static class Rewriter extends PlanVisitor<PlanNode, Void> {
@@ -204,7 +202,7 @@ public class PushPredicateIntoTableScan implements 
TablePlanOptimizer {
               .filter(e -> 
MEASUREMENT.equals(e.getValue().getColumnCategory()))
               .map(e -> e.getKey().getName())
               .collect(Collectors.toSet());
-      measurementColumnNames.add("time");
+      
measurementColumnNames.add(TIMESTAMP_EXPRESSION_STRING.toLowerCase(Locale.ENGLISH));
 
       List<Expression> metadataExpressions = new ArrayList<>();
       List<Expression> expressionsCanPushDown = new ArrayList<>();
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/SimplifyExpressions.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/SimplifyExpressions.java
index 2b0256ee2d3..1c0d5f55599 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/SimplifyExpressions.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/SimplifyExpressions.java
@@ -14,12 +14,8 @@
 
 package org.apache.iotdb.db.queryengine.plan.relational.planner.optimizations;
 
-import org.apache.iotdb.db.queryengine.common.MPPQueryContext;
-import org.apache.iotdb.db.queryengine.common.SessionInfo;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNode;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanVisitor;
-import org.apache.iotdb.db.queryengine.plan.relational.analyzer.Analysis;
-import org.apache.iotdb.db.queryengine.plan.relational.metadata.Metadata;
 import org.apache.iotdb.db.queryengine.plan.relational.planner.node.FilterNode;
 import 
org.apache.iotdb.db.queryengine.plan.relational.planner.node.TableScanNode;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Expression;
@@ -28,17 +24,11 @@ import static 
org.apache.iotdb.db.queryengine.plan.relational.planner.ir.Extract
 import static 
org.apache.iotdb.db.queryengine.plan.relational.planner.ir.NormalizeOrExpressionRewriter.normalizeOrExpression;
 
 /** <b>Optimization phase:</b> Logical plan planning. */
-public class SimplifyExpressions implements TablePlanOptimizer {
+public class SimplifyExpressions implements PlanOptimizer {
 
   @Override
-  public PlanNode optimize(
-      PlanNode planNode,
-      Analysis analysis,
-      Metadata metadata,
-      SessionInfo sessionInfo,
-      MPPQueryContext context) {
-    // TODO add query statement pruning
-    return planNode.accept(new Rewriter(), new RewriterContext());
+  public PlanNode optimize(PlanNode plan, Context context) {
+    return plan.accept(new Rewriter(), new RewriterContext());
   }
 
   private static class Rewriter extends PlanVisitor<PlanNode, RewriterContext> 
{
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/TablePlanOptimizer.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/TablePlanOptimizer.java
deleted file mode 100644
index ce33f82adc3..00000000000
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/TablePlanOptimizer.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Licensed 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.iotdb.db.queryengine.plan.relational.planner.optimizations;
-
-import org.apache.iotdb.db.queryengine.common.MPPQueryContext;
-import org.apache.iotdb.db.queryengine.common.SessionInfo;
-import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNode;
-import org.apache.iotdb.db.queryengine.plan.relational.analyzer.Analysis;
-import org.apache.iotdb.db.queryengine.plan.relational.metadata.Metadata;
-
-public interface TablePlanOptimizer {
-  PlanNode optimize(
-      PlanNode planNode,
-      Analysis analysis,
-      Metadata metadata,
-      SessionInfo sessionInfo,
-      MPPQueryContext context);
-}
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/LimitOffsetPushDownTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/LimitOffsetPushDownTest.java
index da2368a0ab3..ba8b20794a3 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/LimitOffsetPushDownTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/LimitOffsetPushDownTest.java
@@ -30,15 +30,10 @@ import 
org.apache.iotdb.db.queryengine.plan.relational.planner.node.CollectNode;
 import 
org.apache.iotdb.db.queryengine.plan.relational.planner.node.MergeSortNode;
 import org.apache.iotdb.db.queryengine.plan.relational.planner.node.SortNode;
 import 
org.apache.iotdb.db.queryengine.plan.relational.planner.node.TableScanNode;
-import 
org.apache.iotdb.db.queryengine.plan.relational.planner.optimizations.PushPredicateIntoTableScan;
-import 
org.apache.iotdb.db.queryengine.plan.relational.planner.optimizations.SimplifyExpressions;
-import 
org.apache.iotdb.db.queryengine.plan.relational.planner.optimizations.TablePlanOptimizer;
 
 import org.junit.Test;
 
 import java.time.ZoneId;
-import java.util.Arrays;
-import java.util.List;
 
 import static 
org.apache.iotdb.db.queryengine.plan.relational.analyzer.AnalyzerTest.analyzeSQL;
 import static 
org.apache.iotdb.db.queryengine.plan.statement.component.Ordering.ASC;
@@ -67,8 +62,6 @@ public class LimitOffsetPushDownTest {
   TableDistributionPlanner distributionPlanner;
   DistributedQueryPlan distributedQueryPlan;
   TableScanNode tableScanNode;
-  List<TablePlanOptimizer> planOptimizerList =
-      Arrays.asList(new SimplifyExpressions(), new 
PushPredicateIntoTableScan());
 
   // without sort operation, limit can be pushed into TableScan, 
pushLimitToEachDevice==false
   // Output - Project - Limit - Offset - Collect - TableScan
@@ -78,7 +71,7 @@ public class LimitOffsetPushDownTest {
     context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
     actualAnalysis = analyzeSQL(sql, metadata);
     logicalQueryPlan =
-        new LogicalPlanner(context, metadata, sessionInfo, planOptimizerList, 
WarningCollector.NOOP)
+        new LogicalPlanner(context, metadata, sessionInfo, 
WarningCollector.NOOP)
             .plan(actualAnalysis);
     rootNode = logicalQueryPlan.getRootNode();
     assertTrue(getChildrenNode(rootNode, 4) instanceof TableScanNode);
@@ -116,7 +109,7 @@ public class LimitOffsetPushDownTest {
     context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
     actualAnalysis = analyzeSQL(sql, metadata);
     logicalQueryPlan =
-        new LogicalPlanner(context, metadata, sessionInfo, planOptimizerList, 
WarningCollector.NOOP)
+        new LogicalPlanner(context, metadata, sessionInfo, 
WarningCollector.NOOP)
             .plan(actualAnalysis);
     rootNode = logicalQueryPlan.getRootNode();
     assertTrue(getChildrenNode(rootNode, 6) instanceof TableScanNode);
@@ -154,7 +147,7 @@ public class LimitOffsetPushDownTest {
     context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
     actualAnalysis = analyzeSQL(sql, metadata);
     logicalQueryPlan =
-        new LogicalPlanner(context, metadata, sessionInfo, planOptimizerList, 
WarningCollector.NOOP)
+        new LogicalPlanner(context, metadata, sessionInfo, 
WarningCollector.NOOP)
             .plan(actualAnalysis);
     rootNode = logicalQueryPlan.getRootNode();
     assertTrue(getChildrenNode(rootNode, 6) instanceof TableScanNode);
@@ -192,7 +185,7 @@ public class LimitOffsetPushDownTest {
     context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
     actualAnalysis = analyzeSQL(sql, metadata);
     logicalQueryPlan =
-        new LogicalPlanner(context, metadata, sessionInfo, planOptimizerList, 
WarningCollector.NOOP)
+        new LogicalPlanner(context, metadata, sessionInfo, 
WarningCollector.NOOP)
             .plan(actualAnalysis);
     rootNode = logicalQueryPlan.getRootNode();
     assertTrue(getChildrenNode(rootNode, 6) instanceof TableScanNode);
@@ -230,7 +223,7 @@ public class LimitOffsetPushDownTest {
     context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
     actualAnalysis = analyzeSQL(sql, metadata);
     logicalQueryPlan =
-        new LogicalPlanner(context, metadata, sessionInfo, planOptimizerList, 
WarningCollector.NOOP)
+        new LogicalPlanner(context, metadata, sessionInfo, 
WarningCollector.NOOP)
             .plan(actualAnalysis);
     rootNode = logicalQueryPlan.getRootNode();
     assertTrue(getChildrenNode(rootNode, 6) instanceof TableScanNode);
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/SortTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/SortTest.java
index c36e40d2bb8..1fcbc31ed98 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/SortTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/SortTest.java
@@ -41,15 +41,11 @@ import 
org.apache.iotdb.db.queryengine.plan.relational.planner.node.OutputNode;
 import 
org.apache.iotdb.db.queryengine.plan.relational.planner.node.ProjectNode;
 import org.apache.iotdb.db.queryengine.plan.relational.planner.node.SortNode;
 import 
org.apache.iotdb.db.queryengine.plan.relational.planner.node.TableScanNode;
-import 
org.apache.iotdb.db.queryengine.plan.relational.planner.optimizations.PushPredicateIntoTableScan;
-import 
org.apache.iotdb.db.queryengine.plan.relational.planner.optimizations.SimplifyExpressions;
-import 
org.apache.iotdb.db.queryengine.plan.relational.planner.optimizations.TablePlanOptimizer;
 
 import org.junit.Test;
 
 import java.time.ZoneId;
 import java.util.Arrays;
-import java.util.List;
 import java.util.stream.Collectors;
 
 import static 
org.apache.iotdb.db.queryengine.plan.relational.analyzer.AnalyzerTest.analyzeSQL;
@@ -79,8 +75,6 @@ public class SortTest {
   TableDistributionPlanner distributionPlanner;
   DistributedQueryPlan distributedQueryPlan;
   TableScanNode tableScanNode;
-  List<TablePlanOptimizer> planOptimizerList =
-      Arrays.asList(new SimplifyExpressions(), new 
PushPredicateIntoTableScan());
 
   /*
    * order by time, others, some_ids
@@ -118,7 +112,7 @@ public class SortTest {
     context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
     actualAnalysis = analyzeSQL(sql, metadata);
     logicalQueryPlan =
-        new LogicalPlanner(context, metadata, sessionInfo, planOptimizerList, 
WarningCollector.NOOP)
+        new LogicalPlanner(context, metadata, sessionInfo, 
WarningCollector.NOOP)
             .plan(actualAnalysis);
     rootNode = logicalQueryPlan.getRootNode();
 
@@ -259,7 +253,7 @@ public class SortTest {
     context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
     actualAnalysis = analyzeSQL(sql, metadata);
     logicalQueryPlan =
-        new LogicalPlanner(context, metadata, sessionInfo, planOptimizerList, 
WarningCollector.NOOP)
+        new LogicalPlanner(context, metadata, sessionInfo, 
WarningCollector.NOOP)
             .plan(actualAnalysis);
     rootNode = logicalQueryPlan.getRootNode();
 
@@ -403,7 +397,7 @@ public class SortTest {
     context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
     actualAnalysis = analyzeSQL(sql, metadata);
     logicalQueryPlan =
-        new LogicalPlanner(context, metadata, sessionInfo, planOptimizerList, 
WarningCollector.NOOP)
+        new LogicalPlanner(context, metadata, sessionInfo, 
WarningCollector.NOOP)
             .plan(actualAnalysis);
     rootNode = logicalQueryPlan.getRootNode();
 
@@ -542,7 +536,7 @@ public class SortTest {
     context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
     actualAnalysis = analyzeSQL(sql, metadata);
     logicalQueryPlan =
-        new LogicalPlanner(context, metadata, sessionInfo, planOptimizerList, 
WarningCollector.NOOP)
+        new LogicalPlanner(context, metadata, sessionInfo, 
WarningCollector.NOOP)
             .plan(actualAnalysis);
     rootNode = logicalQueryPlan.getRootNode();
 
@@ -696,7 +690,7 @@ public class SortTest {
     context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
     actualAnalysis = analyzeSQL(sql, metadata);
     logicalQueryPlan =
-        new LogicalPlanner(context, metadata, sessionInfo, planOptimizerList, 
WarningCollector.NOOP)
+        new LogicalPlanner(context, metadata, sessionInfo, 
WarningCollector.NOOP)
             .plan(actualAnalysis);
     rootNode = logicalQueryPlan.getRootNode();
 
@@ -839,7 +833,7 @@ public class SortTest {
     context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
     actualAnalysis = analyzeSQL(sql, metadata);
     logicalQueryPlan =
-        new LogicalPlanner(context, metadata, sessionInfo, planOptimizerList, 
WarningCollector.NOOP)
+        new LogicalPlanner(context, metadata, sessionInfo, 
WarningCollector.NOOP)
             .plan(actualAnalysis);
     rootNode = logicalQueryPlan.getRootNode();
 
@@ -979,7 +973,7 @@ public class SortTest {
     context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
     actualAnalysis = analyzeSQL(sql, metadata);
     logicalQueryPlan =
-        new LogicalPlanner(context, metadata, sessionInfo, planOptimizerList, 
WarningCollector.NOOP)
+        new LogicalPlanner(context, metadata, sessionInfo, 
WarningCollector.NOOP)
             .plan(actualAnalysis);
     rootNode = logicalQueryPlan.getRootNode();
 
@@ -1122,7 +1116,7 @@ public class SortTest {
     context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
     actualAnalysis = analyzeSQL(sql, metadata);
     logicalQueryPlan =
-        new LogicalPlanner(context, metadata, sessionInfo, planOptimizerList, 
WarningCollector.NOOP)
+        new LogicalPlanner(context, metadata, sessionInfo, 
WarningCollector.NOOP)
             .plan(actualAnalysis);
     rootNode = logicalQueryPlan.getRootNode();
 
@@ -1262,7 +1256,7 @@ public class SortTest {
     context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
     actualAnalysis = analyzeSQL(sql, metadata);
     logicalQueryPlan =
-        new LogicalPlanner(context, metadata, sessionInfo, planOptimizerList, 
WarningCollector.NOOP)
+        new LogicalPlanner(context, metadata, sessionInfo, 
WarningCollector.NOOP)
             .plan(actualAnalysis);
     rootNode = logicalQueryPlan.getRootNode();
 
@@ -1408,7 +1402,7 @@ public class SortTest {
     context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
     actualAnalysis = analyzeSQL(sql, metadata);
     logicalQueryPlan =
-        new LogicalPlanner(context, metadata, sessionInfo, planOptimizerList, 
WarningCollector.NOOP)
+        new LogicalPlanner(context, metadata, sessionInfo, 
WarningCollector.NOOP)
             .plan(actualAnalysis);
     rootNode = logicalQueryPlan.getRootNode();
 
@@ -1565,7 +1559,7 @@ public class SortTest {
     context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
     actualAnalysis = analyzeSQL(sql, metadata);
     logicalQueryPlan =
-        new LogicalPlanner(context, metadata, sessionInfo, planOptimizerList, 
WarningCollector.NOOP)
+        new LogicalPlanner(context, metadata, sessionInfo, 
WarningCollector.NOOP)
             .plan(actualAnalysis);
     rootNode = logicalQueryPlan.getRootNode();
 
@@ -1705,7 +1699,7 @@ public class SortTest {
     context = new MPPQueryContext(sql, queryId, sessionInfo, null, null);
     actualAnalysis = analyzeSQL(sql, metadata);
     logicalQueryPlan =
-        new LogicalPlanner(context, metadata, sessionInfo, planOptimizerList, 
WarningCollector.NOOP)
+        new LogicalPlanner(context, metadata, sessionInfo, 
WarningCollector.NOOP)
             .plan(actualAnalysis);
     rootNode = logicalQueryPlan.getRootNode();
 


Reply via email to