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

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


The following commit(s) were added to refs/heads/ty/InnerTimeJoin by this push:
     new 7ad7664be9a add outputColumnNames
7ad7664be9a is described below

commit 7ad7664be9a93ba753aa898f252efe3ed064e6dd
Author: JackieTien97 <[email protected]>
AuthorDate: Fri Jan 5 14:58:54 2024 +0800

    add outputColumnNames
---
 .../process/join/InnerTimeJoinOperator.java        |  26 +--
 .../plan/planner/OperatorTreeGenerator.java        |  31 +++-
 .../plan/planner/distribution/SourceRewriter.java  |  15 +-
 .../plan/node/process/join/InnerTimeJoinNode.java  |  66 ++++++-
 .../db/queryengine/execution/DataDriverTest.java   |   3 +-
 .../process/join/InnerTimeJoinOperatorTest.java    |  38 +++-
 .../plan/{plan => planner}/ExpressionTest.java     |   2 +-
 .../{plan => planner}/FragmentInstanceIdTest.java  |   2 +-
 .../FragmentInstanceSerdeTest.java                 |   2 +-
 .../plan/{plan => planner}/LogicalPlannerTest.java |   9 +-
 .../{plan => planner}/PipelineBuilderTest.java     |   4 +-
 .../{plan => planner}/QueryLogicalPlanUtil.java    |   2 +-
 .../plan/{plan => planner}/QueryPlannerTest.java   |   2 +-
 .../distribution/AggregationDistributionTest.java  |   3 +-
 .../AlignByDeviceOrderByLimitOffsetTest.java       |   3 +-
 .../distribution/AlignedByDeviceTest.java          |   3 +-
 .../distribution/DistributionPlannerBasicTest.java |   3 +-
 .../distribution/DistributionPlannerCycleTest.java |   3 +-
 .../distribution/LastQueryTest.java                |   3 +-
 .../distribution/NoDataRegionPlanningTest.java     |   3 +-
 .../distribution/SplitTimePartitionTest.java       | 205 +++++++++++++++++++++
 .../plan/{plan => planner}/distribution/Util.java  |   2 +-
 .../plan/{plan => planner}/distribution/Util2.java |   2 +-
 .../node/PlanGraphPrinterTest.java                 |   2 +-
 .../node/PlanNodeDeserializeHelper.java            |   2 +-
 .../node/load/LoadTsFileNodeTest.java              |   2 +-
 .../read/DeviceSchemaScanNodeSerdeTest.java        |   4 +-
 .../NodeManagementMemoryMergeNodeSerdeTest.java    |   4 +-
 .../read/PathsUsingTemplateScanNodeTest.java       |   2 +-
 .../metadata/read/SchemaCountNodeSerdeTest.java    |   4 +-
 .../metadata/read/SchemaFetchMergeNodeTest.java    |   2 +-
 .../metadata/read/SchemaFetchScanNodeTest.java     |   2 +-
 .../read/TimeSeriesSchemaScanNodeSerdeTest.java    |   4 +-
 .../metadata/write/MetadataWriteNodeSerDeTest.java |   2 +-
 .../node/process/AggregationNodeSerdeTest.java     |   4 +-
 .../node/process/DeviceViewNodeSerdeTest.java      |   4 +-
 .../node/process/ExchangeNodeSerdeTest.java        |   4 +-
 .../node/process/FillNodeSerdeTest.java            |   4 +-
 .../node/process/FilterNodeSerdeTest.java          |   4 +-
 .../node/process/GroupByLevelNodeSerdeTest.java    |   4 +-
 .../node/process/GroupByTagNodeSerdeTest.java      |   4 +-
 .../node/process/IntoNodeSerdeTest.java            |   4 +-
 .../node/process/LimitNodeSerdeTest.java           |   4 +-
 .../node/process/OffsetNodeSerdeTest.java          |   4 +-
 .../process/SingleDeviceViewNodeSerdeTest.java     |   4 +-
 .../node/process/SortNodeSerdeTest.java            |   4 +-
 .../node/process/TimeJoinNodeSerdeTest.java        |   4 +-
 .../node/sink/IdentitySinkNodeSerdeTest.java       |   4 +-
 .../node/sink/ShuffleSinkHandleNodeSerdeTest.java  |   4 +-
 .../source/SeriesAggregationScanNodeSerdeTest.java |   4 +-
 .../node/source/SeriesScanNodeSerdeTest.java       |   4 +-
 .../node/write/DeleteDataNodeSerdeTest.java        |   2 +-
 .../write/InsertMultiTabletsNodeSerdeTest.java     |   2 +-
 .../node/write/InsertRowNodeSerdeTest.java         |   2 +-
 .../node/write/InsertRowsNodeSerdeTest.java        |   2 +-
 .../write/InsertRowsOfOneDeviceNodeSerdeTest.java  |   2 +-
 .../node/write/InsertTabletNodeSerdeTest.java      |   2 +-
 .../node/write/WritePlanNodeSplitTest.java         |   2 +-
 .../statement/sys/pipe/PipeStatementTest.java      |   2 +-
 .../storageengine/dataregion/DataRegionTest.java   |  12 ++
 .../iotdb/db/storageengine/dataregion/TTLTest.java |   3 +
 61 files changed, 446 insertions(+), 115 deletions(-)

diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/join/InnerTimeJoinOperator.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/join/InnerTimeJoinOperator.java
index bb36e02726c..64a75493b18 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/join/InnerTimeJoinOperator.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/join/InnerTimeJoinOperator.java
@@ -23,6 +23,7 @@ import 
org.apache.iotdb.db.queryengine.execution.operator.Operator;
 import org.apache.iotdb.db.queryengine.execution.operator.OperatorContext;
 import 
org.apache.iotdb.db.queryengine.execution.operator.process.ProcessOperator;
 import 
org.apache.iotdb.db.queryengine.execution.operator.process.join.merge.TimeComparator;
+import 
org.apache.iotdb.db.queryengine.plan.planner.plan.parameter.InputLocation;
 import org.apache.iotdb.tsfile.common.conf.TSFileDescriptor;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.read.common.block.TsBlock;
@@ -35,6 +36,7 @@ import com.google.common.util.concurrent.ListenableFuture;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import java.util.concurrent.TimeUnit;
 
 import static com.google.common.base.Preconditions.checkArgument;
@@ -61,6 +63,8 @@ public class InnerTimeJoinOperator implements ProcessOperator 
{
 
   private final TimeComparator comparator;
 
+  private final Map<InputLocation, Integer> outputColumnMap;
+
   /** Index of the child that is currently fetching input */
   private int currentChildIndex = 0;
 
@@ -71,7 +75,8 @@ public class InnerTimeJoinOperator implements ProcessOperator 
{
       OperatorContext operatorContext,
       List<Operator> children,
       List<TSDataType> dataTypes,
-      TimeComparator comparator) {
+      TimeComparator comparator,
+      Map<InputLocation, Integer> outputColumnMap) {
     this.operatorContext = operatorContext;
     this.children = children;
     this.inputOperatorsCount = children.size();
@@ -82,6 +87,7 @@ public class InnerTimeJoinOperator implements ProcessOperator 
{
     this.inputIndex = new int[this.inputOperatorsCount];
     this.resultBuilder = new TsBlockBuilder(dataTypes);
     this.comparator = comparator;
+    this.outputColumnMap = outputColumnMap;
   }
 
   @Override
@@ -143,9 +149,8 @@ public class InnerTimeJoinOperator implements 
ProcessOperator {
 
       // build value columns for each child
       if (selectedRowIndexArray[0].length > 0) {
-        int columnIndex = 0;
         for (int i = 0; i < inputOperatorsCount; i++) {
-          columnIndex += buildValueColumns(columnIndex, i, 
selectedRowIndexArray[i]);
+          buildValueColumns(i, selectedRowIndexArray[i]);
         }
       }
     }
@@ -251,11 +256,12 @@ public class InnerTimeJoinOperator implements 
ProcessOperator {
     return res;
   }
 
-  private int buildValueColumns(int startColumnIndex, int childIndex, int[] 
selectedRowIndex) {
+  private void buildValueColumns(int childIndex, int[] selectedRowIndex) {
     TsBlock tsBlock = inputTsBlocks[childIndex];
     for (int i = 0, size = inputTsBlocks[childIndex].getValueColumnCount(); i 
< size; i++) {
-      ColumnBuilder columnBuilder = 
resultBuilder.getColumnBuilder(startColumnIndex + i);
-      Column column = inputTsBlocks[childIndex].getColumn(i);
+      ColumnBuilder columnBuilder =
+          resultBuilder.getColumnBuilder(outputColumnMap.get(new 
InputLocation(childIndex, i)));
+      Column column = tsBlock.getColumn(i);
       if (column.mayHaveNull()) {
         for (int rowIndex : selectedRowIndex) {
           if (column.isNull(rowIndex)) {
@@ -270,8 +276,6 @@ public class InnerTimeJoinOperator implements 
ProcessOperator {
         }
       }
     }
-
-    return startColumnIndex + tsBlock.getValueColumnCount();
   }
 
   /**
@@ -384,9 +388,9 @@ public class InnerTimeJoinOperator implements 
ProcessOperator {
     long currentRetainedSize = 0;
     long minChildReturnSize = Long.MAX_VALUE;
     for (Operator child : children) {
-      long maxReturnSize = child.calculateMaxReturnSize();
-      currentRetainedSize += (maxReturnSize + 
child.calculateRetainedSizeAfterCallingNext());
-      minChildReturnSize = Math.min(minChildReturnSize, maxReturnSize);
+      long tmpMaxReturnSize = child.calculateMaxReturnSize();
+      currentRetainedSize += (tmpMaxReturnSize + 
child.calculateRetainedSizeAfterCallingNext());
+      minChildReturnSize = Math.min(minChildReturnSize, tmpMaxReturnSize);
     }
     // max cached TsBlock
     return currentRetainedSize - minChildReturnSize;
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/OperatorTreeGenerator.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/OperatorTreeGenerator.java
index d4b80556d52..094a543a916 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/OperatorTreeGenerator.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/OperatorTreeGenerator.java
@@ -2082,7 +2082,36 @@ public class OperatorTreeGenerator extends 
PlanVisitor<Operator, LocalExecutionP
             ? getOutputColumnTypesOfTimeJoinNode(node)
             : getOutputColumnTypes(node, context.getTypeProvider());
 
-    return new InnerTimeJoinOperator(operatorContext, children, 
outputColumnTypes, timeComparator);
+    return new InnerTimeJoinOperator(
+        operatorContext, children, outputColumnTypes, timeComparator, 
getOutputColumnMap(node));
+  }
+
+  private Map<InputLocation, Integer> getOutputColumnMap(InnerTimeJoinNode 
innerTimeJoinNode) {
+    Map<InputLocation, Integer> result = new HashMap<>();
+    if (innerTimeJoinNode.outputColumnNamesIsNull()) {
+      int outputIndex = 0;
+      for (int i = 0, size = innerTimeJoinNode.getChildren().size(); i < size; 
i++) {
+        PlanNode child = innerTimeJoinNode.getChildren().get(i);
+        List<String> childOutputColumns = child.getOutputColumnNames();
+        for (int j = 0, childSize = childOutputColumns.size(); j < childSize; 
j++) {
+          result.put(new InputLocation(i, j), outputIndex++);
+        }
+      }
+    } else {
+      List<String> outputColumns = innerTimeJoinNode.getOutputColumnNames();
+      Map<String, Integer> outputColumnIndexMap = new HashMap<>();
+      for (int i = 0; i < outputColumns.size(); i++) {
+        outputColumnIndexMap.put(outputColumns.get(i), i);
+      }
+      for (int i = 0, size = innerTimeJoinNode.getChildren().size(); i < size; 
i++) {
+        PlanNode child = innerTimeJoinNode.getChildren().get(i);
+        List<String> childOutputColumns = child.getOutputColumnNames();
+        for (int j = 0, childSize = childOutputColumns.size(); j < childSize; 
j++) {
+          result.put(new InputLocation(i, j), 
outputColumnIndexMap.get(childOutputColumns.get(j)));
+        }
+      }
+    }
+    return result;
   }
 
   @Override
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/SourceRewriter.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/SourceRewriter.java
index 6950ff95df4..fe724605a88 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/SourceRewriter.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/SourceRewriter.java
@@ -724,18 +724,25 @@ public class SourceRewriter extends 
SimplePlanNodeRewriter<DistributionPlanConte
     } else {
       // add merge sort node for InnerTimeJoinNodes
       // TODO add new type of Node, just traverse all child nodes sequentially 
in the future
+      List<String> outputColumnNames = node.getOutputColumnNames();
       MergeSortNode mergeSortNode =
           new MergeSortNode(
               context.queryContext.getQueryId().genPlanNodeId(),
               node.getMergeOrder() == Ordering.ASC ? TIME_ASC : TIME_DESC,
-              node.getOutputColumnNames());
+              outputColumnNames);
+      // set unified outputColumnNames for each child InnerTimeJoinNode
+      children.forEach(
+          child -> {
+            ((InnerTimeJoinNode) 
child).setOutputColumnNames(outputColumnNames);
+          });
 
       mergeSortNode.setChildren(children);
       return Collections.singletonList(mergeSortNode);
     }
   }
 
-  private List<List<TTimePartitionSlot>> splitTimePartition(
+  // make it as protected just for UT usage
+  protected static List<List<TTimePartitionSlot>> splitTimePartition(
       List<List<List<TTimePartitionSlot>>> childTimePartitionList) {
     if (childTimePartitionList.isEmpty()) {
       return Collections.emptyList();
@@ -747,7 +754,7 @@ public class SourceRewriter extends 
SimplePlanNodeRewriter<DistributionPlanConte
     return res;
   }
 
-  private List<List<TTimePartitionSlot>> combineTwoTimePartitionList(
+  private static List<List<TTimePartitionSlot>> combineTwoTimePartitionList(
       List<List<TTimePartitionSlot>> left, List<List<TTimePartitionSlot>> 
right) {
     int leftIndex = 0;
     int leftSize = left.size();
@@ -762,7 +769,7 @@ public class SourceRewriter extends 
SimplePlanNodeRewriter<DistributionPlanConte
     int rightCurrentListIndex = 0;
     while (leftIndex < leftSize && rightIndex < rightSize) {
       List<TTimePartitionSlot> leftCurrentList = left.get(leftIndex);
-      List<TTimePartitionSlot> rightCurrentList = left.get(rightIndex);
+      List<TTimePartitionSlot> rightCurrentList = right.get(rightIndex);
       int leftCurrentListSize = leftCurrentList.size();
       int rightCurrentListSize = rightCurrentList.size();
       while (leftCurrentListIndex < leftCurrentListSize
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/process/join/InnerTimeJoinNode.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/process/join/InnerTimeJoinNode.java
index 6b885d87b37..ea54024b3cb 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/process/join/InnerTimeJoinNode.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/process/join/InnerTimeJoinNode.java
@@ -61,19 +61,31 @@ public class InnerTimeJoinNode extends 
MultiChildProcessNode {
   // empty for zero time partitions
   private List<Long> timePartitions;
 
+  // in most cases, it will be null, if we've got more than one root 
InnerTimeJoinNode, and these
+  // InnerTimeJoinNodes' result will be merged by MergeSortNode
+  // we will make sure that all these InnerTimeJoinNodes output same column 
names;
+  // for logical planner, it will also be null
+  private List<String> outputColumnNames;
+
   public InnerTimeJoinNode(PlanNodeId id, Ordering mergeOrder) {
     this(id, new ArrayList<>(), mergeOrder, null);
   }
 
-  public InnerTimeJoinNode(PlanNodeId id, Ordering mergeOrder, List<PlanNode> 
children) {
-    this(id, children, mergeOrder, null);
+  public InnerTimeJoinNode(
+      PlanNodeId id, List<PlanNode> children, Ordering mergeOrder, List<Long> 
timePartitions) {
+    this(id, children, mergeOrder, timePartitions, null);
   }
 
   public InnerTimeJoinNode(
-      PlanNodeId id, List<PlanNode> children, Ordering mergeOrder, List<Long> 
timePartitions) {
+      PlanNodeId id,
+      List<PlanNode> children,
+      Ordering mergeOrder,
+      List<Long> timePartitions,
+      List<String> outputColumnNames) {
     super(id, children);
     this.mergeOrder = mergeOrder;
     this.timePartitions = timePartitions;
+    this.outputColumnNames = outputColumnNames;
   }
 
   public Ordering getMergeOrder() {
@@ -96,10 +108,12 @@ public class InnerTimeJoinNode extends 
MultiChildProcessNode {
 
   @Override
   public List<String> getOutputColumnNames() {
-    return children.stream()
-        .map(PlanNode::getOutputColumnNames)
-        .flatMap(List::stream)
-        .collect(Collectors.toList());
+    return outputColumnNames != null
+        ? outputColumnNames
+        : children.stream()
+            .map(PlanNode::getOutputColumnNames)
+            .flatMap(List::stream)
+            .collect(Collectors.toList());
   }
 
   @Override
@@ -120,6 +134,15 @@ public class InnerTimeJoinNode extends 
MultiChildProcessNode {
         ReadWriteIOUtils.write(timePartitionId, byteBuffer);
       }
     }
+    if (outputColumnNames == null) {
+      ReadWriteIOUtils.write(false, byteBuffer);
+    } else {
+      ReadWriteIOUtils.write(true, byteBuffer);
+      ReadWriteIOUtils.write(outputColumnNames.size(), byteBuffer);
+      for (String outputColumnName : outputColumnNames) {
+        ReadWriteIOUtils.write(outputColumnName, byteBuffer);
+      }
+    }
   }
 
   @Override
@@ -135,6 +158,15 @@ public class InnerTimeJoinNode extends 
MultiChildProcessNode {
         ReadWriteIOUtils.write(timePartitionId, stream);
       }
     }
+    if (outputColumnNames == null) {
+      ReadWriteIOUtils.write(false, stream);
+    } else {
+      ReadWriteIOUtils.write(true, stream);
+      ReadWriteIOUtils.write(outputColumnNames.size(), stream);
+      for (String outputColumnName : outputColumnNames) {
+        ReadWriteIOUtils.write(outputColumnName, stream);
+      }
+    }
   }
 
   public static InnerTimeJoinNode deserialize(ByteBuffer byteBuffer) {
@@ -148,8 +180,18 @@ public class InnerTimeJoinNode extends 
MultiChildProcessNode {
         timePartitionIds.add(ReadWriteIOUtils.readLong(byteBuffer));
       }
     }
+    List<String> outputColumnNames = null;
+    boolean hasOutputColumnNames = ReadWriteIOUtils.readBool(byteBuffer);
+    if (hasOutputColumnNames) {
+      int size = ReadWriteIOUtils.read(byteBuffer);
+      outputColumnNames = new ArrayList<>(size);
+      for (int i = 0; i < size; i++) {
+        outputColumnNames.add(ReadWriteIOUtils.readString(byteBuffer));
+      }
+    }
     PlanNodeId planNodeId = PlanNodeId.deserialize(byteBuffer);
-    return new InnerTimeJoinNode(planNodeId, new ArrayList<>(), mergeOrder, 
timePartitionIds);
+    return new InnerTimeJoinNode(
+        planNodeId, new ArrayList<>(), mergeOrder, timePartitionIds, 
outputColumnNames);
   }
 
   @Override
@@ -186,4 +228,12 @@ public class InnerTimeJoinNode extends 
MultiChildProcessNode {
   public Optional<List<Long>> getTimePartitions() {
     return Optional.ofNullable(timePartitions);
   }
+
+  public void setOutputColumnNames(List<String> outputColumnNames) {
+    this.outputColumnNames = outputColumnNames;
+  }
+
+  public boolean outputColumnNamesIsNull() {
+    return outputColumnNames == null;
+  }
 }
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/DataDriverTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/DataDriverTest.java
index bbd450cdaf8..568aa9d3fc7 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/DataDriverTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/DataDriverTest.java
@@ -176,7 +176,8 @@ public class DataDriverTest {
 
       String deviceId = DATA_DRIVER_TEST_SG + ".device0";
       Mockito.when(
-              dataRegion.query(driverContext.getPaths(), deviceId, 
fragmentInstanceContext, null))
+              dataRegion.query(
+                  driverContext.getPaths(), deviceId, fragmentInstanceContext, 
null, null))
           .thenReturn(new QueryDataSource(seqResources, unSeqResources));
       fragmentInstanceContext.initQueryDataSource(driverContext.getPaths());
       fragmentInstanceContext.initializeNumOfDrivers(1);
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/process/join/InnerTimeJoinOperatorTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/process/join/InnerTimeJoinOperatorTest.java
index 7d05e0f23bc..bccff9bdb56 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/process/join/InnerTimeJoinOperatorTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/process/join/InnerTimeJoinOperatorTest.java
@@ -23,6 +23,7 @@ import 
org.apache.iotdb.db.queryengine.execution.operator.Operator;
 import org.apache.iotdb.db.queryengine.execution.operator.OperatorContext;
 import 
org.apache.iotdb.db.queryengine.execution.operator.process.join.merge.AscTimeComparator;
 import 
org.apache.iotdb.db.queryengine.execution.operator.process.join.merge.DescTimeComparator;
+import 
org.apache.iotdb.db.queryengine.plan.planner.plan.parameter.InputLocation;
 import org.apache.iotdb.tsfile.common.conf.TSFileDescriptor;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.read.common.block.TsBlock;
@@ -37,6 +38,8 @@ import org.mockito.Mockito;
 import java.nio.charset.StandardCharsets;
 import java.util.Arrays;
 import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
 import java.util.concurrent.TimeUnit;
 
 import static org.junit.Assert.assertEquals;
@@ -245,12 +248,17 @@ public class InnerTimeJoinOperatorTest {
           }
         };
 
+    Map<InputLocation, Integer> outputColumnMap = new HashMap<>();
+    outputColumnMap.put(new InputLocation(0, 0), 0);
+    outputColumnMap.put(new InputLocation(1, 0), 1);
+
     InnerTimeJoinOperator innerTimeJoinOperator =
         new InnerTimeJoinOperator(
             operatorContext,
             Arrays.asList(leftChild, rightChild),
             Arrays.asList(TSDataType.INT32, TSDataType.INT64),
-            new AscTimeComparator());
+            new AscTimeComparator(),
+            outputColumnMap);
 
     assertEquals(
         TSFileDescriptor.getInstance().getConfig().getMaxTsBlockSizeInBytes() 
+ 64 * 1024 * 2,
@@ -559,12 +567,19 @@ public class InnerTimeJoinOperatorTest {
           }
         };
 
+    Map<InputLocation, Integer> outputColumnMap = new HashMap<>();
+    outputColumnMap.put(new InputLocation(0, 0), 0);
+    outputColumnMap.put(new InputLocation(0, 1), 1);
+    outputColumnMap.put(new InputLocation(1, 0), 2);
+    outputColumnMap.put(new InputLocation(1, 1), 3);
+
     InnerTimeJoinOperator innerTimeJoinOperator =
         new InnerTimeJoinOperator(
             operatorContext,
             Arrays.asList(leftChild, rightChild),
             Arrays.asList(TSDataType.INT32, TSDataType.INT64, 
TSDataType.FLOAT, TSDataType.BOOLEAN),
-            new DescTimeComparator());
+            new DescTimeComparator(),
+            outputColumnMap);
 
     long[] timeArray = new long[] {19L, 18L, 15L, 7L, 3L};
     int[] column1Array = new int[] {19, 18, 0, 7, 3};
@@ -833,12 +848,19 @@ public class InnerTimeJoinOperatorTest {
           }
         };
 
+    Map<InputLocation, Integer> outputColumnMap = new HashMap<>();
+    outputColumnMap.put(new InputLocation(0, 0), 0);
+    outputColumnMap.put(new InputLocation(0, 1), 1);
+    outputColumnMap.put(new InputLocation(1, 0), 2);
+    outputColumnMap.put(new InputLocation(1, 1), 3);
+
     InnerTimeJoinOperator innerTimeJoinOperator =
         new InnerTimeJoinOperator(
             operatorContext,
             Arrays.asList(child1, child2),
             Arrays.asList(TSDataType.INT32, TSDataType.INT64, 
TSDataType.FLOAT, TSDataType.BOOLEAN),
-            new DescTimeComparator());
+            new DescTimeComparator(),
+            outputColumnMap);
 
     long[] timeArray = new long[] {100L, 90L, 50L, 20L, 10L};
     int[] column1Array = new int[] {100, 90, 50, 20, 10};
@@ -1212,6 +1234,13 @@ public class InnerTimeJoinOperatorTest {
           }
         };
 
+    Map<InputLocation, Integer> outputColumnMap = new HashMap<>();
+    outputColumnMap.put(new InputLocation(0, 0), 0);
+    outputColumnMap.put(new InputLocation(0, 1), 1);
+    outputColumnMap.put(new InputLocation(1, 0), 2);
+    outputColumnMap.put(new InputLocation(1, 1), 3);
+    outputColumnMap.put(new InputLocation(2, 0), 4);
+
     InnerTimeJoinOperator innerTimeJoinOperator =
         new InnerTimeJoinOperator(
             operatorContext,
@@ -1222,7 +1251,8 @@ public class InnerTimeJoinOperatorTest {
                 TSDataType.FLOAT,
                 TSDataType.BOOLEAN,
                 TSDataType.TEXT),
-            new DescTimeComparator());
+            new DescTimeComparator(),
+            outputColumnMap);
 
     try {
       int count = 0;
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/ExpressionTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/ExpressionTest.java
similarity index 98%
rename from 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/ExpressionTest.java
rename to 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/ExpressionTest.java
index a69a9f462e7..79512877c68 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/ExpressionTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/ExpressionTest.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.queryengine.plan.plan;
+package org.apache.iotdb.db.queryengine.plan.planner;
 
 import org.apache.iotdb.commons.path.PartialPath;
 import org.apache.iotdb.db.queryengine.common.NodeRef;
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/FragmentInstanceIdTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/FragmentInstanceIdTest.java
similarity index 96%
rename from 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/FragmentInstanceIdTest.java
rename to 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/FragmentInstanceIdTest.java
index 6c9dd1a6907..3ad5a6e1403 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/FragmentInstanceIdTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/FragmentInstanceIdTest.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.queryengine.plan.plan;
+package org.apache.iotdb.db.queryengine.plan.planner;
 
 import org.apache.iotdb.db.queryengine.common.FragmentInstanceId;
 import org.apache.iotdb.mpp.rpc.thrift.TFragmentInstanceId;
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/FragmentInstanceSerdeTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/FragmentInstanceSerdeTest.java
similarity index 99%
rename from 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/FragmentInstanceSerdeTest.java
rename to 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/FragmentInstanceSerdeTest.java
index 6cb45788dff..8d91a72988f 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/FragmentInstanceSerdeTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/FragmentInstanceSerdeTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.iotdb.db.queryengine.plan.plan;
+package org.apache.iotdb.db.queryengine.plan.planner;
 
 import org.apache.iotdb.common.rpc.thrift.TConsensusGroupId;
 import org.apache.iotdb.common.rpc.thrift.TConsensusGroupType;
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/LogicalPlannerTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/LogicalPlannerTest.java
similarity index 98%
rename from 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/LogicalPlannerTest.java
rename to 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/LogicalPlannerTest.java
index 9eec3553629..ca227932c71 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/LogicalPlannerTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/LogicalPlannerTest.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.queryengine.plan.plan;
+package org.apache.iotdb.db.queryengine.plan.planner;
 
 import org.apache.iotdb.common.rpc.thrift.TAggregationType;
 import org.apache.iotdb.commons.exception.IllegalPathException;
@@ -34,8 +34,7 @@ import 
org.apache.iotdb.db.queryengine.plan.analyze.FakeSchemaFetcherImpl;
 import org.apache.iotdb.db.queryengine.plan.expression.Expression;
 import org.apache.iotdb.db.queryengine.plan.expression.leaf.TimeSeriesOperand;
 import org.apache.iotdb.db.queryengine.plan.parser.StatementGenerator;
-import 
org.apache.iotdb.db.queryengine.plan.plan.node.PlanNodeDeserializeHelper;
-import org.apache.iotdb.db.queryengine.plan.planner.LogicalPlanner;
+import 
org.apache.iotdb.db.queryengine.plan.planner.node.PlanNodeDeserializeHelper;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNode;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNodeType;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.metedata.read.DevicesSchemaScanNode;
@@ -79,8 +78,8 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
-import static 
org.apache.iotdb.db.queryengine.plan.plan.QueryLogicalPlanUtil.querySQLs;
-import static 
org.apache.iotdb.db.queryengine.plan.plan.QueryLogicalPlanUtil.sqlToPlanMap;
+import static 
org.apache.iotdb.db.queryengine.plan.planner.QueryLogicalPlanUtil.querySQLs;
+import static 
org.apache.iotdb.db.queryengine.plan.planner.QueryLogicalPlanUtil.sqlToPlanMap;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.fail;
 
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/PipelineBuilderTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/PipelineBuilderTest.java
similarity index 99%
rename from 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/PipelineBuilderTest.java
rename to 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/PipelineBuilderTest.java
index 02bc0443287..3841da6405f 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/PipelineBuilderTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/PipelineBuilderTest.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.queryengine.plan.plan;
+package org.apache.iotdb.db.queryengine.plan.planner;
 
 import org.apache.iotdb.common.rpc.thrift.TAggregationType;
 import org.apache.iotdb.common.rpc.thrift.TEndPoint;
@@ -39,8 +39,6 @@ import 
org.apache.iotdb.db.queryengine.execution.operator.source.ExchangeOperato
 import 
org.apache.iotdb.db.queryengine.execution.operator.source.SeriesScanOperator;
 import org.apache.iotdb.db.queryengine.plan.analyze.TypeProvider;
 import org.apache.iotdb.db.queryengine.plan.expression.leaf.TimeSeriesOperand;
-import org.apache.iotdb.db.queryengine.plan.planner.LocalExecutionPlanContext;
-import org.apache.iotdb.db.queryengine.plan.planner.OperatorTreeGenerator;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNode;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNodeId;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.AggregationNode;
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/QueryLogicalPlanUtil.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/QueryLogicalPlanUtil.java
similarity index 99%
rename from 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/QueryLogicalPlanUtil.java
rename to 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/QueryLogicalPlanUtil.java
index 65a46edc357..07d89735810 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/QueryLogicalPlanUtil.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/QueryLogicalPlanUtil.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.queryengine.plan.plan;
+package org.apache.iotdb.db.queryengine.plan.planner;
 
 import org.apache.iotdb.common.rpc.thrift.TAggregationType;
 import org.apache.iotdb.commons.exception.IllegalPathException;
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/QueryPlannerTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/QueryPlannerTest.java
similarity index 98%
rename from 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/QueryPlannerTest.java
rename to 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/QueryPlannerTest.java
index 6ae8c0cf845..0a750518bcf 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/QueryPlannerTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/QueryPlannerTest.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.queryengine.plan.plan;
+package org.apache.iotdb.db.queryengine.plan.planner;
 
 import org.apache.iotdb.common.rpc.thrift.TEndPoint;
 import org.apache.iotdb.commons.client.ClientPoolFactory;
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/distribution/AggregationDistributionTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/AggregationDistributionTest.java
similarity index 99%
rename from 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/distribution/AggregationDistributionTest.java
rename to 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/AggregationDistributionTest.java
index 0562010e9c9..04f3830f796 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/distribution/AggregationDistributionTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/AggregationDistributionTest.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.queryengine.plan.plan.distribution;
+package org.apache.iotdb.db.queryengine.plan.planner.distribution;
 
 import org.apache.iotdb.common.rpc.thrift.TAggregationType;
 import org.apache.iotdb.common.rpc.thrift.TEndPoint;
@@ -29,7 +29,6 @@ import org.apache.iotdb.db.queryengine.common.QueryId;
 import org.apache.iotdb.db.queryengine.plan.analyze.Analysis;
 import org.apache.iotdb.db.queryengine.plan.expression.Expression;
 import org.apache.iotdb.db.queryengine.plan.expression.leaf.TimeSeriesOperand;
-import 
org.apache.iotdb.db.queryengine.plan.planner.distribution.DistributionPlanner;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.DistributedQueryPlan;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.FragmentInstance;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.LogicalQueryPlan;
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/distribution/AlignByDeviceOrderByLimitOffsetTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/AlignByDeviceOrderByLimitOffsetTest.java
similarity index 98%
rename from 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/distribution/AlignByDeviceOrderByLimitOffsetTest.java
rename to 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/AlignByDeviceOrderByLimitOffsetTest.java
index 8691debcb15..88206dc97d2 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/distribution/AlignByDeviceOrderByLimitOffsetTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/AlignByDeviceOrderByLimitOffsetTest.java
@@ -17,13 +17,12 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.queryengine.plan.plan.distribution;
+package org.apache.iotdb.db.queryengine.plan.planner.distribution;
 
 import org.apache.iotdb.common.rpc.thrift.TEndPoint;
 import org.apache.iotdb.db.queryengine.common.MPPQueryContext;
 import org.apache.iotdb.db.queryengine.common.QueryId;
 import org.apache.iotdb.db.queryengine.plan.analyze.Analysis;
-import 
org.apache.iotdb.db.queryengine.plan.planner.distribution.DistributionPlanner;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.DistributedQueryPlan;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.LogicalQueryPlan;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNode;
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/distribution/AlignedByDeviceTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/AlignedByDeviceTest.java
similarity index 99%
rename from 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/distribution/AlignedByDeviceTest.java
rename to 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/AlignedByDeviceTest.java
index 3ae90a9f970..f56a685a048 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/distribution/AlignedByDeviceTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/AlignedByDeviceTest.java
@@ -17,13 +17,12 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.queryengine.plan.plan.distribution;
+package org.apache.iotdb.db.queryengine.plan.planner.distribution;
 
 import org.apache.iotdb.common.rpc.thrift.TEndPoint;
 import org.apache.iotdb.db.queryengine.common.MPPQueryContext;
 import org.apache.iotdb.db.queryengine.common.QueryId;
 import org.apache.iotdb.db.queryengine.plan.analyze.Analysis;
-import 
org.apache.iotdb.db.queryengine.plan.planner.distribution.DistributionPlanner;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.DistributedQueryPlan;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.LogicalQueryPlan;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNode;
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/distribution/DistributionPlannerBasicTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/DistributionPlannerBasicTest.java
similarity index 98%
rename from 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/distribution/DistributionPlannerBasicTest.java
rename to 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/DistributionPlannerBasicTest.java
index f9fb9ff3be8..6d6c7a17ac9 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/distribution/DistributionPlannerBasicTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/DistributionPlannerBasicTest.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.queryengine.plan.plan.distribution;
+package org.apache.iotdb.db.queryengine.plan.planner.distribution;
 
 import org.apache.iotdb.common.rpc.thrift.TEndPoint;
 import org.apache.iotdb.commons.exception.IllegalPathException;
@@ -28,7 +28,6 @@ import org.apache.iotdb.db.queryengine.common.MPPQueryContext;
 import org.apache.iotdb.db.queryengine.common.QueryId;
 import org.apache.iotdb.db.queryengine.plan.analyze.Analysis;
 import org.apache.iotdb.db.queryengine.plan.analyze.QueryType;
-import 
org.apache.iotdb.db.queryengine.plan.planner.distribution.DistributionPlanner;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.DistributedQueryPlan;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.LogicalQueryPlan;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.SubPlan;
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/distribution/DistributionPlannerCycleTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/DistributionPlannerCycleTest.java
similarity index 96%
rename from 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/distribution/DistributionPlannerCycleTest.java
rename to 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/DistributionPlannerCycleTest.java
index 8af58bb3c5a..df2f3d16339 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/distribution/DistributionPlannerCycleTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/DistributionPlannerCycleTest.java
@@ -17,13 +17,12 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.queryengine.plan.plan.distribution;
+package org.apache.iotdb.db.queryengine.plan.planner.distribution;
 
 import org.apache.iotdb.common.rpc.thrift.TEndPoint;
 import org.apache.iotdb.db.queryengine.common.MPPQueryContext;
 import org.apache.iotdb.db.queryengine.common.QueryId;
 import org.apache.iotdb.db.queryengine.plan.analyze.Analysis;
-import 
org.apache.iotdb.db.queryengine.plan.planner.distribution.DistributionPlanner;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.DistributedQueryPlan;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.LogicalQueryPlan;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNode;
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/distribution/LastQueryTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/LastQueryTest.java
similarity index 98%
rename from 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/distribution/LastQueryTest.java
rename to 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/LastQueryTest.java
index 5f675e41f43..f0c930d0d00 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/distribution/LastQueryTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/LastQueryTest.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.queryengine.plan.plan.distribution;
+package org.apache.iotdb.db.queryengine.plan.planner.distribution;
 
 import org.apache.iotdb.common.rpc.thrift.TEndPoint;
 import org.apache.iotdb.commons.exception.IllegalPathException;
@@ -25,7 +25,6 @@ import org.apache.iotdb.commons.path.AlignedPath;
 import org.apache.iotdb.commons.path.MeasurementPath;
 import org.apache.iotdb.db.queryengine.common.MPPQueryContext;
 import org.apache.iotdb.db.queryengine.common.QueryId;
-import 
org.apache.iotdb.db.queryengine.plan.planner.distribution.DistributionPlanner;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.DistributedQueryPlan;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.LogicalQueryPlan;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNode;
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/distribution/NoDataRegionPlanningTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/NoDataRegionPlanningTest.java
similarity index 93%
rename from 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/distribution/NoDataRegionPlanningTest.java
rename to 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/NoDataRegionPlanningTest.java
index 48b750fcdb8..28fd1a922c6 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/distribution/NoDataRegionPlanningTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/NoDataRegionPlanningTest.java
@@ -17,13 +17,12 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.queryengine.plan.plan.distribution;
+package org.apache.iotdb.db.queryengine.plan.planner.distribution;
 
 import org.apache.iotdb.common.rpc.thrift.TEndPoint;
 import org.apache.iotdb.db.queryengine.common.MPPQueryContext;
 import org.apache.iotdb.db.queryengine.common.QueryId;
 import org.apache.iotdb.db.queryengine.plan.analyze.Analysis;
-import 
org.apache.iotdb.db.queryengine.plan.planner.distribution.DistributionPlanner;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.DistributedQueryPlan;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.LogicalQueryPlan;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNode;
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/SplitTimePartitionTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/SplitTimePartitionTest.java
new file mode 100644
index 00000000000..5f63df62ece
--- /dev/null
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/SplitTimePartitionTest.java
@@ -0,0 +1,205 @@
+/*
+ * 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.iotdb.db.queryengine.plan.planner.distribution;
+
+import org.apache.iotdb.common.rpc.thrift.TTimePartitionSlot;
+
+import org.junit.Test;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import static 
org.apache.iotdb.db.queryengine.plan.planner.distribution.SourceRewriter.splitTimePartition;
+import static org.junit.Assert.assertEquals;
+
+public class SplitTimePartitionTest {
+
+  @Test
+  public void testSplitTimePartition1() {
+    //                timepartition-1   timepartition-2   timepartition-3   
timepartition-4
+    // SeriesSlot-1   region-1          region-1          region-1          
region-1
+    // SeriesSlot-2   region-2          region-2          region-2          
region-2
+    // SeriesSlot-3   region-1          region-1          region-1          
region-1
+    // SeriesSlot-4   region-2          region-2          region-2          
region-2
+    List<List<List<TTimePartitionSlot>>> sourceTimeRangeList = new 
ArrayList<>();
+    sourceTimeRangeList.add(new ArrayList<>());
+    sourceTimeRangeList
+        .get(0)
+        .add(
+            Arrays.asList(
+                new TTimePartitionSlot(1),
+                new TTimePartitionSlot(11),
+                new TTimePartitionSlot(21),
+                new TTimePartitionSlot(31)));
+    sourceTimeRangeList.add(new ArrayList<>());
+    sourceTimeRangeList
+        .get(1)
+        .add(
+            Arrays.asList(
+                new TTimePartitionSlot(1),
+                new TTimePartitionSlot(11),
+                new TTimePartitionSlot(21),
+                new TTimePartitionSlot(31)));
+    sourceTimeRangeList.add(new ArrayList<>());
+    sourceTimeRangeList
+        .get(2)
+        .add(
+            Arrays.asList(
+                new TTimePartitionSlot(1),
+                new TTimePartitionSlot(11),
+                new TTimePartitionSlot(21),
+                new TTimePartitionSlot(31)));
+    sourceTimeRangeList.add(new ArrayList<>());
+    sourceTimeRangeList
+        .get(3)
+        .add(
+            Arrays.asList(
+                new TTimePartitionSlot(1),
+                new TTimePartitionSlot(11),
+                new TTimePartitionSlot(21),
+                new TTimePartitionSlot(31)));
+
+    List<List<TTimePartitionSlot>> res = 
splitTimePartition(sourceTimeRangeList);
+    assertEquals(1, res.size());
+    assertEquals(4, res.get(0).size());
+    assertEquals(1, res.get(0).get(0).startTime);
+    assertEquals(11, res.get(0).get(1).startTime);
+    assertEquals(21, res.get(0).get(2).startTime);
+    assertEquals(31, res.get(0).get(3).startTime);
+  }
+
+  @Test
+  public void testSplitTimePartition2() {
+    //                timepartition-1   timepartition-2   timepartition-3   
timepartition-4
+    // timepartition-5
+    // SeriesSlot-1   region-1          region-1          region-1          
region-1
+    // region-1
+    // SeriesSlot-2   region-2          region-2          region-2          
region-2
+    // region-2
+    // SeriesSlot-3   region-1          region-1          region-1          
region-1
+    // region-3
+    // SeriesSlot-4   region-2          region-2          region-2          
region-2
+    // region-4
+
+    List<List<List<TTimePartitionSlot>>> sourceTimeRangeList = new 
ArrayList<>();
+    sourceTimeRangeList.add(new ArrayList<>());
+    sourceTimeRangeList
+        .get(0)
+        .add(
+            Arrays.asList(
+                new TTimePartitionSlot(1),
+                new TTimePartitionSlot(11),
+                new TTimePartitionSlot(21),
+                new TTimePartitionSlot(31),
+                new TTimePartitionSlot(41)));
+    sourceTimeRangeList.add(new ArrayList<>());
+    sourceTimeRangeList
+        .get(1)
+        .add(
+            Arrays.asList(
+                new TTimePartitionSlot(1),
+                new TTimePartitionSlot(11),
+                new TTimePartitionSlot(21),
+                new TTimePartitionSlot(31),
+                new TTimePartitionSlot(41)));
+    sourceTimeRangeList.add(new ArrayList<>());
+    sourceTimeRangeList
+        .get(2)
+        .add(
+            Arrays.asList(
+                new TTimePartitionSlot(1),
+                new TTimePartitionSlot(11),
+                new TTimePartitionSlot(21),
+                new TTimePartitionSlot(31)));
+    sourceTimeRangeList.get(2).add(Collections.singletonList(new 
TTimePartitionSlot(41)));
+    sourceTimeRangeList.add(new ArrayList<>());
+    sourceTimeRangeList
+        .get(3)
+        .add(
+            Arrays.asList(
+                new TTimePartitionSlot(1),
+                new TTimePartitionSlot(11),
+                new TTimePartitionSlot(21),
+                new TTimePartitionSlot(31)));
+    sourceTimeRangeList.get(3).add(Collections.singletonList(new 
TTimePartitionSlot(41)));
+
+    List<List<TTimePartitionSlot>> res = 
splitTimePartition(sourceTimeRangeList);
+    assertEquals(2, res.size());
+    assertEquals(4, res.get(0).size());
+    assertEquals(1, res.get(0).get(0).startTime);
+    assertEquals(11, res.get(0).get(1).startTime);
+    assertEquals(21, res.get(0).get(2).startTime);
+    assertEquals(31, res.get(0).get(3).startTime);
+    assertEquals(1, res.get(1).size());
+    assertEquals(41, res.get(1).get(0).startTime);
+  }
+
+  @Test
+  public void testSplitTimePartition3() {
+    //                timepartition-1   timepartition-2   timepartition-3   
timepartition-4
+    // SeriesSlot-1   region-1          region-2          region-2          
region-4
+    // SeriesSlot-2   region-1          region-3          region-3          
region-3
+    // SeriesSlot-3   region-1          region-1          region-4          
region-3
+    // SeriesSlot-4   region-4          region-2          region-4          
region-4
+    List<List<List<TTimePartitionSlot>>> sourceTimeRangeList = new 
ArrayList<>();
+    sourceTimeRangeList.add(new ArrayList<>());
+    sourceTimeRangeList.get(0).add(Collections.singletonList(new 
TTimePartitionSlot(1)));
+    sourceTimeRangeList
+        .get(0)
+        .add(Arrays.asList(new TTimePartitionSlot(11), new 
TTimePartitionSlot(21)));
+    sourceTimeRangeList.get(0).add(Collections.singletonList(new 
TTimePartitionSlot(31)));
+
+    sourceTimeRangeList.add(new ArrayList<>());
+    sourceTimeRangeList.get(1).add(Collections.singletonList(new 
TTimePartitionSlot(1)));
+    sourceTimeRangeList
+        .get(1)
+        .add(
+            Arrays.asList(
+                new TTimePartitionSlot(11),
+                new TTimePartitionSlot(21),
+                new TTimePartitionSlot(31)));
+    sourceTimeRangeList.add(new ArrayList<>());
+    sourceTimeRangeList
+        .get(2)
+        .add(Arrays.asList(new TTimePartitionSlot(1), new 
TTimePartitionSlot(11)));
+    sourceTimeRangeList.get(2).add(Collections.singletonList(new 
TTimePartitionSlot(21)));
+    sourceTimeRangeList.get(2).add(Collections.singletonList(new 
TTimePartitionSlot(31)));
+
+    sourceTimeRangeList.add(new ArrayList<>());
+    sourceTimeRangeList.get(3).add(Collections.singletonList(new 
TTimePartitionSlot(1)));
+    sourceTimeRangeList.get(3).add(Collections.singletonList(new 
TTimePartitionSlot(11)));
+    sourceTimeRangeList
+        .get(3)
+        .add(Arrays.asList(new TTimePartitionSlot(21), new 
TTimePartitionSlot(31)));
+
+    List<List<TTimePartitionSlot>> res = 
splitTimePartition(sourceTimeRangeList);
+    assertEquals(4, res.size());
+    assertEquals(1, res.get(0).size());
+    assertEquals(1, res.get(0).get(0).startTime);
+    assertEquals(1, res.get(1).size());
+    assertEquals(11, res.get(1).get(0).startTime);
+    assertEquals(1, res.get(2).size());
+    assertEquals(21, res.get(2).get(0).startTime);
+    assertEquals(1, res.get(3).size());
+    assertEquals(31, res.get(3).get(0).startTime);
+  }
+}
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/distribution/Util.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/Util.java
similarity index 99%
rename from 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/distribution/Util.java
rename to 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/Util.java
index b462480a0ef..0c77e598edc 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/distribution/Util.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/Util.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.queryengine.plan.plan.distribution;
+package org.apache.iotdb.db.queryengine.plan.planner.distribution;
 
 import org.apache.iotdb.common.rpc.thrift.TConsensusGroupId;
 import org.apache.iotdb.common.rpc.thrift.TConsensusGroupType;
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/distribution/Util2.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/Util2.java
similarity index 99%
rename from 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/distribution/Util2.java
rename to 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/Util2.java
index 1ae2aad4a6c..cae77a3491d 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/distribution/Util2.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/Util2.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.queryengine.plan.plan.distribution;
+package org.apache.iotdb.db.queryengine.plan.planner.distribution;
 
 import org.apache.iotdb.common.rpc.thrift.TConsensusGroupId;
 import org.apache.iotdb.common.rpc.thrift.TConsensusGroupType;
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/PlanGraphPrinterTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/PlanGraphPrinterTest.java
similarity index 98%
rename from 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/PlanGraphPrinterTest.java
rename to 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/PlanGraphPrinterTest.java
index 0be66fbbe99..dd0e664d38a 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/PlanGraphPrinterTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/PlanGraphPrinterTest.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.queryengine.plan.plan.node;
+package org.apache.iotdb.db.queryengine.plan.planner.node;
 
 import org.apache.iotdb.commons.exception.IllegalPathException;
 import org.apache.iotdb.commons.path.MeasurementPath;
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/PlanNodeDeserializeHelper.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/PlanNodeDeserializeHelper.java
similarity index 95%
rename from 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/PlanNodeDeserializeHelper.java
rename to 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/PlanNodeDeserializeHelper.java
index e0b644ef425..dd58ec38edb 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/PlanNodeDeserializeHelper.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/PlanNodeDeserializeHelper.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.iotdb.db.queryengine.plan.plan.node;
+package org.apache.iotdb.db.queryengine.plan.planner.node;
 
 import org.apache.iotdb.commons.exception.IllegalPathException;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNode;
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/load/LoadTsFileNodeTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/load/LoadTsFileNodeTest.java
similarity index 98%
rename from 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/load/LoadTsFileNodeTest.java
rename to 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/load/LoadTsFileNodeTest.java
index 2291a6a3543..7ef1ecf238c 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/load/LoadTsFileNodeTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/load/LoadTsFileNodeTest.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.queryengine.plan.plan.node.load;
+package org.apache.iotdb.db.queryengine.plan.planner.node.load;
 
 import org.apache.iotdb.db.queryengine.plan.analyze.Analysis;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNodeId;
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/metadata/read/DeviceSchemaScanNodeSerdeTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/metadata/read/DeviceSchemaScanNodeSerdeTest.java
similarity index 96%
rename from 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/metadata/read/DeviceSchemaScanNodeSerdeTest.java
rename to 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/metadata/read/DeviceSchemaScanNodeSerdeTest.java
index 163224079a9..0b48e158f31 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/metadata/read/DeviceSchemaScanNodeSerdeTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/metadata/read/DeviceSchemaScanNodeSerdeTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.iotdb.db.queryengine.plan.plan.node.metadata.read;
+package org.apache.iotdb.db.queryengine.plan.planner.node.metadata.read;
 
 import org.apache.iotdb.common.rpc.thrift.TEndPoint;
 import org.apache.iotdb.commons.exception.IllegalPathException;
@@ -25,7 +25,7 @@ import org.apache.iotdb.commons.schema.SchemaConstant;
 import org.apache.iotdb.db.queryengine.common.FragmentInstanceId;
 import org.apache.iotdb.db.queryengine.common.PlanFragmentId;
 import 
org.apache.iotdb.db.queryengine.execution.exchange.sink.DownStreamChannelLocation;
-import 
org.apache.iotdb.db.queryengine.plan.plan.node.PlanNodeDeserializeHelper;
+import 
org.apache.iotdb.db.queryengine.plan.planner.node.PlanNodeDeserializeHelper;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNodeId;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.metedata.read.DevicesSchemaScanNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.metedata.read.SchemaQueryMergeNode;
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/metadata/read/NodeManagementMemoryMergeNodeSerdeTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/metadata/read/NodeManagementMemoryMergeNodeSerdeTest.java
similarity index 97%
rename from 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/metadata/read/NodeManagementMemoryMergeNodeSerdeTest.java
rename to 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/metadata/read/NodeManagementMemoryMergeNodeSerdeTest.java
index bf1aaaef0ae..3e6eb483f23 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/metadata/read/NodeManagementMemoryMergeNodeSerdeTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/metadata/read/NodeManagementMemoryMergeNodeSerdeTest.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.queryengine.plan.plan.node.metadata.read;
+package org.apache.iotdb.db.queryengine.plan.planner.node.metadata.read;
 
 import org.apache.iotdb.common.rpc.thrift.TEndPoint;
 import org.apache.iotdb.common.rpc.thrift.TSchemaNode;
@@ -28,7 +28,7 @@ import org.apache.iotdb.commons.schema.node.MNodeType;
 import org.apache.iotdb.db.queryengine.common.FragmentInstanceId;
 import org.apache.iotdb.db.queryengine.common.PlanFragmentId;
 import 
org.apache.iotdb.db.queryengine.execution.exchange.sink.DownStreamChannelLocation;
-import 
org.apache.iotdb.db.queryengine.plan.plan.node.PlanNodeDeserializeHelper;
+import 
org.apache.iotdb.db.queryengine.plan.planner.node.PlanNodeDeserializeHelper;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNodeId;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.metedata.read.NodeManagementMemoryMergeNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.metedata.read.NodePathsConvertNode;
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/metadata/read/PathsUsingTemplateScanNodeTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/metadata/read/PathsUsingTemplateScanNodeTest.java
similarity index 96%
rename from 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/metadata/read/PathsUsingTemplateScanNodeTest.java
rename to 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/metadata/read/PathsUsingTemplateScanNodeTest.java
index 1dd2572231f..8a65a02a107 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/metadata/read/PathsUsingTemplateScanNodeTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/metadata/read/PathsUsingTemplateScanNodeTest.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.queryengine.plan.plan.node.metadata.read;
+package org.apache.iotdb.db.queryengine.plan.planner.node.metadata.read;
 
 import org.apache.iotdb.commons.exception.IllegalPathException;
 import org.apache.iotdb.commons.path.PartialPath;
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/metadata/read/SchemaCountNodeSerdeTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/metadata/read/SchemaCountNodeSerdeTest.java
similarity index 97%
rename from 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/metadata/read/SchemaCountNodeSerdeTest.java
rename to 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/metadata/read/SchemaCountNodeSerdeTest.java
index 524e1daa8fc..0139371e26b 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/metadata/read/SchemaCountNodeSerdeTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/metadata/read/SchemaCountNodeSerdeTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.iotdb.db.queryengine.plan.plan.node.metadata.read;
+package org.apache.iotdb.db.queryengine.plan.planner.node.metadata.read;
 
 import org.apache.iotdb.common.rpc.thrift.TEndPoint;
 import org.apache.iotdb.commons.exception.IllegalPathException;
@@ -25,7 +25,7 @@ import org.apache.iotdb.commons.schema.SchemaConstant;
 import org.apache.iotdb.db.queryengine.common.FragmentInstanceId;
 import org.apache.iotdb.db.queryengine.common.PlanFragmentId;
 import 
org.apache.iotdb.db.queryengine.execution.exchange.sink.DownStreamChannelLocation;
-import 
org.apache.iotdb.db.queryengine.plan.plan.node.PlanNodeDeserializeHelper;
+import 
org.apache.iotdb.db.queryengine.plan.planner.node.PlanNodeDeserializeHelper;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNodeId;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.metedata.read.CountSchemaMergeNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.metedata.read.DevicesCountNode;
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/metadata/read/SchemaFetchMergeNodeTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/metadata/read/SchemaFetchMergeNodeTest.java
similarity index 97%
rename from 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/metadata/read/SchemaFetchMergeNodeTest.java
rename to 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/metadata/read/SchemaFetchMergeNodeTest.java
index 139ccc7dcee..c242778efab 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/metadata/read/SchemaFetchMergeNodeTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/metadata/read/SchemaFetchMergeNodeTest.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.queryengine.plan.plan.node.metadata.read;
+package org.apache.iotdb.db.queryengine.plan.planner.node.metadata.read;
 
 import org.apache.iotdb.commons.exception.IllegalPathException;
 import org.apache.iotdb.commons.path.PartialPath;
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/metadata/read/SchemaFetchScanNodeTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/metadata/read/SchemaFetchScanNodeTest.java
similarity index 97%
rename from 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/metadata/read/SchemaFetchScanNodeTest.java
rename to 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/metadata/read/SchemaFetchScanNodeTest.java
index 26a1b54ad31..0d45a127f17 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/metadata/read/SchemaFetchScanNodeTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/metadata/read/SchemaFetchScanNodeTest.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.queryengine.plan.plan.node.metadata.read;
+package org.apache.iotdb.db.queryengine.plan.planner.node.metadata.read;
 
 import org.apache.iotdb.commons.exception.IllegalPathException;
 import org.apache.iotdb.commons.path.PartialPath;
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/metadata/read/TimeSeriesSchemaScanNodeSerdeTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/metadata/read/TimeSeriesSchemaScanNodeSerdeTest.java
similarity index 96%
rename from 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/metadata/read/TimeSeriesSchemaScanNodeSerdeTest.java
rename to 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/metadata/read/TimeSeriesSchemaScanNodeSerdeTest.java
index 20e02eb2a00..34b437fde31 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/metadata/read/TimeSeriesSchemaScanNodeSerdeTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/metadata/read/TimeSeriesSchemaScanNodeSerdeTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.iotdb.db.queryengine.plan.plan.node.metadata.read;
+package org.apache.iotdb.db.queryengine.plan.planner.node.metadata.read;
 
 import org.apache.iotdb.common.rpc.thrift.TEndPoint;
 import org.apache.iotdb.commons.exception.IllegalPathException;
@@ -25,7 +25,7 @@ import org.apache.iotdb.commons.schema.SchemaConstant;
 import org.apache.iotdb.db.queryengine.common.FragmentInstanceId;
 import org.apache.iotdb.db.queryengine.common.PlanFragmentId;
 import 
org.apache.iotdb.db.queryengine.execution.exchange.sink.DownStreamChannelLocation;
-import 
org.apache.iotdb.db.queryengine.plan.plan.node.PlanNodeDeserializeHelper;
+import 
org.apache.iotdb.db.queryengine.plan.planner.node.PlanNodeDeserializeHelper;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNodeId;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.metedata.read.SchemaQueryMergeNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.metedata.read.TimeSeriesSchemaScanNode;
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/metadata/write/MetadataWriteNodeSerDeTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/metadata/write/MetadataWriteNodeSerDeTest.java
similarity index 99%
rename from 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/metadata/write/MetadataWriteNodeSerDeTest.java
rename to 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/metadata/write/MetadataWriteNodeSerDeTest.java
index 1c7b22f8242..294e0c86221 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/metadata/write/MetadataWriteNodeSerDeTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/metadata/write/MetadataWriteNodeSerDeTest.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.queryengine.plan.plan.node.metadata.write;
+package org.apache.iotdb.db.queryengine.plan.planner.node.metadata.write;
 
 import org.apache.iotdb.commons.exception.IllegalPathException;
 import org.apache.iotdb.commons.path.PartialPath;
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/process/AggregationNodeSerdeTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/process/AggregationNodeSerdeTest.java
similarity index 99%
rename from 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/process/AggregationNodeSerdeTest.java
rename to 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/process/AggregationNodeSerdeTest.java
index 2cdb8bda556..196ea033193 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/process/AggregationNodeSerdeTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/process/AggregationNodeSerdeTest.java
@@ -16,14 +16,14 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.iotdb.db.queryengine.plan.plan.node.process;
+package org.apache.iotdb.db.queryengine.plan.planner.node.process;
 
 import org.apache.iotdb.common.rpc.thrift.TAggregationType;
 import org.apache.iotdb.commons.exception.IllegalPathException;
 import org.apache.iotdb.commons.path.MeasurementPath;
 import org.apache.iotdb.commons.path.PartialPath;
 import org.apache.iotdb.db.queryengine.plan.expression.leaf.TimeSeriesOperand;
-import 
org.apache.iotdb.db.queryengine.plan.plan.node.PlanNodeDeserializeHelper;
+import 
org.apache.iotdb.db.queryengine.plan.planner.node.PlanNodeDeserializeHelper;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNodeId;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.AggregationNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.source.SeriesAggregationScanNode;
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/process/DeviceViewNodeSerdeTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/process/DeviceViewNodeSerdeTest.java
similarity index 94%
rename from 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/process/DeviceViewNodeSerdeTest.java
rename to 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/process/DeviceViewNodeSerdeTest.java
index 0aabd98acd7..ea3e9b8a7dd 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/process/DeviceViewNodeSerdeTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/process/DeviceViewNodeSerdeTest.java
@@ -16,10 +16,10 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.iotdb.db.queryengine.plan.plan.node.process;
+package org.apache.iotdb.db.queryengine.plan.planner.node.process;
 
 import org.apache.iotdb.commons.exception.IllegalPathException;
-import 
org.apache.iotdb.db.queryengine.plan.plan.node.PlanNodeDeserializeHelper;
+import 
org.apache.iotdb.db.queryengine.plan.planner.node.PlanNodeDeserializeHelper;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNodeId;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.DeviceViewNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.join.FullOuterTimeJoinNode;
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/process/ExchangeNodeSerdeTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/process/ExchangeNodeSerdeTest.java
similarity index 95%
rename from 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/process/ExchangeNodeSerdeTest.java
rename to 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/process/ExchangeNodeSerdeTest.java
index d7cdc60cc52..a66fe4be15f 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/process/ExchangeNodeSerdeTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/process/ExchangeNodeSerdeTest.java
@@ -16,14 +16,14 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.iotdb.db.queryengine.plan.plan.node.process;
+package org.apache.iotdb.db.queryengine.plan.planner.node.process;
 
 import org.apache.iotdb.common.rpc.thrift.TEndPoint;
 import org.apache.iotdb.commons.exception.IllegalPathException;
 import org.apache.iotdb.db.queryengine.common.FragmentInstanceId;
 import org.apache.iotdb.db.queryengine.common.PlanFragmentId;
 import 
org.apache.iotdb.db.queryengine.execution.exchange.sink.DownStreamChannelLocation;
-import 
org.apache.iotdb.db.queryengine.plan.plan.node.PlanNodeDeserializeHelper;
+import 
org.apache.iotdb.db.queryengine.plan.planner.node.PlanNodeDeserializeHelper;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNodeId;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.ExchangeNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.join.FullOuterTimeJoinNode;
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/process/FillNodeSerdeTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/process/FillNodeSerdeTest.java
similarity index 93%
rename from 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/process/FillNodeSerdeTest.java
rename to 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/process/FillNodeSerdeTest.java
index 79261afe368..4e3b9953ef0 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/process/FillNodeSerdeTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/process/FillNodeSerdeTest.java
@@ -16,10 +16,10 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.iotdb.db.queryengine.plan.plan.node.process;
+package org.apache.iotdb.db.queryengine.plan.planner.node.process;
 
 import org.apache.iotdb.commons.exception.IllegalPathException;
-import 
org.apache.iotdb.db.queryengine.plan.plan.node.PlanNodeDeserializeHelper;
+import 
org.apache.iotdb.db.queryengine.plan.planner.node.PlanNodeDeserializeHelper;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNodeId;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.FillNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.join.FullOuterTimeJoinNode;
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/process/FilterNodeSerdeTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/process/FilterNodeSerdeTest.java
similarity index 94%
rename from 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/process/FilterNodeSerdeTest.java
rename to 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/process/FilterNodeSerdeTest.java
index 770e35d4e00..d1f29873c49 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/process/FilterNodeSerdeTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/process/FilterNodeSerdeTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.iotdb.db.queryengine.plan.plan.node.process;
+package org.apache.iotdb.db.queryengine.plan.planner.node.process;
 
 import org.apache.iotdb.commons.exception.IllegalPathException;
 import org.apache.iotdb.commons.path.PartialPath;
@@ -24,7 +24,7 @@ import 
org.apache.iotdb.db.queryengine.plan.expression.Expression;
 import 
org.apache.iotdb.db.queryengine.plan.expression.binary.GreaterThanExpression;
 import org.apache.iotdb.db.queryengine.plan.expression.leaf.ConstantOperand;
 import org.apache.iotdb.db.queryengine.plan.expression.leaf.TimeSeriesOperand;
-import 
org.apache.iotdb.db.queryengine.plan.plan.node.PlanNodeDeserializeHelper;
+import 
org.apache.iotdb.db.queryengine.plan.planner.node.PlanNodeDeserializeHelper;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNodeId;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.FilterNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.join.FullOuterTimeJoinNode;
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/process/GroupByLevelNodeSerdeTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/process/GroupByLevelNodeSerdeTest.java
similarity index 97%
rename from 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/process/GroupByLevelNodeSerdeTest.java
rename to 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/process/GroupByLevelNodeSerdeTest.java
index ae21f684de9..6d379d72f17 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/process/GroupByLevelNodeSerdeTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/process/GroupByLevelNodeSerdeTest.java
@@ -16,14 +16,14 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.iotdb.db.queryengine.plan.plan.node.process;
+package org.apache.iotdb.db.queryengine.plan.planner.node.process;
 
 import org.apache.iotdb.common.rpc.thrift.TAggregationType;
 import org.apache.iotdb.commons.exception.IllegalPathException;
 import org.apache.iotdb.commons.path.MeasurementPath;
 import org.apache.iotdb.commons.path.PartialPath;
 import org.apache.iotdb.db.queryengine.plan.expression.leaf.TimeSeriesOperand;
-import 
org.apache.iotdb.db.queryengine.plan.plan.node.PlanNodeDeserializeHelper;
+import 
org.apache.iotdb.db.queryengine.plan.planner.node.PlanNodeDeserializeHelper;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNodeId;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.GroupByLevelNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.source.SeriesAggregationScanNode;
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/process/GroupByTagNodeSerdeTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/process/GroupByTagNodeSerdeTest.java
similarity index 97%
rename from 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/process/GroupByTagNodeSerdeTest.java
rename to 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/process/GroupByTagNodeSerdeTest.java
index 01ccf8749c9..b7e879681b2 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/process/GroupByTagNodeSerdeTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/process/GroupByTagNodeSerdeTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.iotdb.db.queryengine.plan.plan.node.process;
+package org.apache.iotdb.db.queryengine.plan.planner.node.process;
 
 import org.apache.iotdb.common.rpc.thrift.TAggregationType;
 import org.apache.iotdb.commons.exception.IllegalPathException;
@@ -24,7 +24,7 @@ import org.apache.iotdb.commons.path.MeasurementPath;
 import org.apache.iotdb.commons.path.PartialPath;
 import org.apache.iotdb.db.queryengine.plan.expression.leaf.TimeSeriesOperand;
 import 
org.apache.iotdb.db.queryengine.plan.expression.multi.FunctionExpression;
-import 
org.apache.iotdb.db.queryengine.plan.plan.node.PlanNodeDeserializeHelper;
+import 
org.apache.iotdb.db.queryengine.plan.planner.node.PlanNodeDeserializeHelper;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNodeId;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.GroupByTagNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.source.SeriesAggregationScanNode;
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/process/IntoNodeSerdeTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/process/IntoNodeSerdeTest.java
similarity index 96%
rename from 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/process/IntoNodeSerdeTest.java
rename to 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/process/IntoNodeSerdeTest.java
index 6569d4f764d..18e40adeb57 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/process/IntoNodeSerdeTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/process/IntoNodeSerdeTest.java
@@ -17,11 +17,11 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.queryengine.plan.plan.node.process;
+package org.apache.iotdb.db.queryengine.plan.planner.node.process;
 
 import org.apache.iotdb.commons.exception.IllegalPathException;
 import org.apache.iotdb.commons.path.PartialPath;
-import 
org.apache.iotdb.db.queryengine.plan.plan.node.PlanNodeDeserializeHelper;
+import 
org.apache.iotdb.db.queryengine.plan.planner.node.PlanNodeDeserializeHelper;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNodeId;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.DeviceViewIntoNode;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.IntoNode;
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/process/LimitNodeSerdeTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/process/LimitNodeSerdeTest.java
similarity index 93%
rename from 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/process/LimitNodeSerdeTest.java
rename to 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/process/LimitNodeSerdeTest.java
index 538c7b4df45..427ae18caed 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/process/LimitNodeSerdeTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/process/LimitNodeSerdeTest.java
@@ -16,11 +16,11 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.iotdb.db.queryengine.plan.plan.node.process;
+package org.apache.iotdb.db.queryengine.plan.planner.node.process;
 
 import org.apache.iotdb.commons.exception.IllegalPathException;
 import org.apache.iotdb.commons.path.MeasurementPath;
-import 
org.apache.iotdb.db.queryengine.plan.plan.node.PlanNodeDeserializeHelper;
+import 
org.apache.iotdb.db.queryengine.plan.planner.node.PlanNodeDeserializeHelper;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNodeId;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.LimitNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.OffsetNode;
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/process/OffsetNodeSerdeTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/process/OffsetNodeSerdeTest.java
similarity index 93%
rename from 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/process/OffsetNodeSerdeTest.java
rename to 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/process/OffsetNodeSerdeTest.java
index f48dd74a8f1..da11d3e7f9a 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/process/OffsetNodeSerdeTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/process/OffsetNodeSerdeTest.java
@@ -16,11 +16,11 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.iotdb.db.queryengine.plan.plan.node.process;
+package org.apache.iotdb.db.queryengine.plan.planner.node.process;
 
 import org.apache.iotdb.commons.exception.IllegalPathException;
 import org.apache.iotdb.commons.path.MeasurementPath;
-import 
org.apache.iotdb.db.queryengine.plan.plan.node.PlanNodeDeserializeHelper;
+import 
org.apache.iotdb.db.queryengine.plan.planner.node.PlanNodeDeserializeHelper;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNodeId;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.OffsetNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.source.SeriesScanNode;
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/process/SingleDeviceViewNodeSerdeTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/process/SingleDeviceViewNodeSerdeTest.java
similarity index 93%
rename from 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/process/SingleDeviceViewNodeSerdeTest.java
rename to 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/process/SingleDeviceViewNodeSerdeTest.java
index 0fbaa4824fc..d1904a4c301 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/process/SingleDeviceViewNodeSerdeTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/process/SingleDeviceViewNodeSerdeTest.java
@@ -16,10 +16,10 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.iotdb.db.queryengine.plan.plan.node.process;
+package org.apache.iotdb.db.queryengine.plan.planner.node.process;
 
 import org.apache.iotdb.commons.exception.IllegalPathException;
-import 
org.apache.iotdb.db.queryengine.plan.plan.node.PlanNodeDeserializeHelper;
+import 
org.apache.iotdb.db.queryengine.plan.planner.node.PlanNodeDeserializeHelper;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNodeId;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.SingleDeviceViewNode;
 
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/process/SortNodeSerdeTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/process/SortNodeSerdeTest.java
similarity index 94%
rename from 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/process/SortNodeSerdeTest.java
rename to 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/process/SortNodeSerdeTest.java
index a4b911d7338..b2151e92f08 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/process/SortNodeSerdeTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/process/SortNodeSerdeTest.java
@@ -16,11 +16,11 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.iotdb.db.queryengine.plan.plan.node.process;
+package org.apache.iotdb.db.queryengine.plan.planner.node.process;
 
 import org.apache.iotdb.commons.exception.IllegalPathException;
 import org.apache.iotdb.commons.path.MeasurementPath;
-import 
org.apache.iotdb.db.queryengine.plan.plan.node.PlanNodeDeserializeHelper;
+import 
org.apache.iotdb.db.queryengine.plan.planner.node.PlanNodeDeserializeHelper;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNodeId;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.SortNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.source.SeriesScanNode;
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/process/TimeJoinNodeSerdeTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/process/TimeJoinNodeSerdeTest.java
similarity index 96%
rename from 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/process/TimeJoinNodeSerdeTest.java
rename to 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/process/TimeJoinNodeSerdeTest.java
index 0918cbe664b..247cd1274d9 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/process/TimeJoinNodeSerdeTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/process/TimeJoinNodeSerdeTest.java
@@ -16,11 +16,11 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.iotdb.db.queryengine.plan.plan.node.process;
+package org.apache.iotdb.db.queryengine.plan.planner.node.process;
 
 import org.apache.iotdb.commons.exception.IllegalPathException;
 import org.apache.iotdb.commons.path.MeasurementPath;
-import 
org.apache.iotdb.db.queryengine.plan.plan.node.PlanNodeDeserializeHelper;
+import 
org.apache.iotdb.db.queryengine.plan.planner.node.PlanNodeDeserializeHelper;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNode;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNodeId;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.join.FullOuterTimeJoinNode;
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/sink/IdentitySinkNodeSerdeTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/sink/IdentitySinkNodeSerdeTest.java
similarity index 94%
rename from 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/sink/IdentitySinkNodeSerdeTest.java
rename to 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/sink/IdentitySinkNodeSerdeTest.java
index aaba888f2d1..5d2cdd8d798 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/sink/IdentitySinkNodeSerdeTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/sink/IdentitySinkNodeSerdeTest.java
@@ -17,12 +17,12 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.queryengine.plan.plan.node.sink;
+package org.apache.iotdb.db.queryengine.plan.planner.node.sink;
 
 import org.apache.iotdb.common.rpc.thrift.TEndPoint;
 import org.apache.iotdb.commons.exception.IllegalPathException;
 import 
org.apache.iotdb.db.queryengine.execution.exchange.sink.DownStreamChannelLocation;
-import 
org.apache.iotdb.db.queryengine.plan.plan.node.PlanNodeDeserializeHelper;
+import 
org.apache.iotdb.db.queryengine.plan.planner.node.PlanNodeDeserializeHelper;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNodeId;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.sink.IdentitySinkNode;
 import org.apache.iotdb.mpp.rpc.thrift.TFragmentInstanceId;
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/sink/ShuffleSinkHandleNodeSerdeTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/sink/ShuffleSinkHandleNodeSerdeTest.java
similarity index 94%
rename from 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/sink/ShuffleSinkHandleNodeSerdeTest.java
rename to 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/sink/ShuffleSinkHandleNodeSerdeTest.java
index b857949082c..9963572729b 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/sink/ShuffleSinkHandleNodeSerdeTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/sink/ShuffleSinkHandleNodeSerdeTest.java
@@ -17,12 +17,12 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.queryengine.plan.plan.node.sink;
+package org.apache.iotdb.db.queryengine.plan.planner.node.sink;
 
 import org.apache.iotdb.common.rpc.thrift.TEndPoint;
 import org.apache.iotdb.commons.exception.IllegalPathException;
 import 
org.apache.iotdb.db.queryengine.execution.exchange.sink.DownStreamChannelLocation;
-import 
org.apache.iotdb.db.queryengine.plan.plan.node.PlanNodeDeserializeHelper;
+import 
org.apache.iotdb.db.queryengine.plan.planner.node.PlanNodeDeserializeHelper;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNodeId;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.sink.ShuffleSinkNode;
 import org.apache.iotdb.mpp.rpc.thrift.TFragmentInstanceId;
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/source/SeriesAggregationScanNodeSerdeTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/source/SeriesAggregationScanNodeSerdeTest.java
similarity index 95%
rename from 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/source/SeriesAggregationScanNodeSerdeTest.java
rename to 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/source/SeriesAggregationScanNodeSerdeTest.java
index 0d894f30e51..b23c849bfec 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/source/SeriesAggregationScanNodeSerdeTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/source/SeriesAggregationScanNodeSerdeTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.iotdb.db.queryengine.plan.plan.node.source;
+package org.apache.iotdb.db.queryengine.plan.planner.node.source;
 
 import org.apache.iotdb.common.rpc.thrift.TAggregationType;
 import org.apache.iotdb.commons.exception.IllegalPathException;
@@ -24,7 +24,7 @@ import org.apache.iotdb.commons.path.MeasurementPath;
 import org.apache.iotdb.commons.path.PartialPath;
 import org.apache.iotdb.db.exception.query.QueryProcessException;
 import org.apache.iotdb.db.queryengine.plan.expression.leaf.TimeSeriesOperand;
-import 
org.apache.iotdb.db.queryengine.plan.plan.node.PlanNodeDeserializeHelper;
+import 
org.apache.iotdb.db.queryengine.plan.planner.node.PlanNodeDeserializeHelper;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNodeId;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.source.SeriesAggregationScanNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.parameter.AggregationDescriptor;
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/source/SeriesScanNodeSerdeTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/source/SeriesScanNodeSerdeTest.java
similarity index 93%
rename from 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/source/SeriesScanNodeSerdeTest.java
rename to 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/source/SeriesScanNodeSerdeTest.java
index 68a158ebbdd..f95dbacde00 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/source/SeriesScanNodeSerdeTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/source/SeriesScanNodeSerdeTest.java
@@ -16,12 +16,12 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.iotdb.db.queryengine.plan.plan.node.source;
+package org.apache.iotdb.db.queryengine.plan.planner.node.source;
 
 import org.apache.iotdb.commons.exception.IllegalPathException;
 import org.apache.iotdb.commons.path.MeasurementPath;
 import org.apache.iotdb.db.exception.query.QueryProcessException;
-import 
org.apache.iotdb.db.queryengine.plan.plan.node.PlanNodeDeserializeHelper;
+import 
org.apache.iotdb.db.queryengine.plan.planner.node.PlanNodeDeserializeHelper;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNodeId;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.source.SeriesScanNode;
 import org.apache.iotdb.db.queryengine.plan.statement.component.Ordering;
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/write/DeleteDataNodeSerdeTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/write/DeleteDataNodeSerdeTest.java
similarity index 97%
rename from 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/write/DeleteDataNodeSerdeTest.java
rename to 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/write/DeleteDataNodeSerdeTest.java
index 51898eab277..cbfba2a6879 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/write/DeleteDataNodeSerdeTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/write/DeleteDataNodeSerdeTest.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.queryengine.plan.plan.node.write;
+package org.apache.iotdb.db.queryengine.plan.planner.node.write;
 
 import org.apache.iotdb.commons.exception.IllegalPathException;
 import org.apache.iotdb.commons.path.PartialPath;
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/write/InsertMultiTabletsNodeSerdeTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/write/InsertMultiTabletsNodeSerdeTest.java
similarity index 98%
rename from 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/write/InsertMultiTabletsNodeSerdeTest.java
rename to 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/write/InsertMultiTabletsNodeSerdeTest.java
index 7c2883f3b38..550c19c4a7c 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/write/InsertMultiTabletsNodeSerdeTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/write/InsertMultiTabletsNodeSerdeTest.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.queryengine.plan.plan.node.write;
+package org.apache.iotdb.db.queryengine.plan.planner.node.write;
 
 import org.apache.iotdb.commons.exception.MetadataException;
 import org.apache.iotdb.commons.path.PartialPath;
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/write/InsertRowNodeSerdeTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/write/InsertRowNodeSerdeTest.java
similarity index 99%
rename from 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/write/InsertRowNodeSerdeTest.java
rename to 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/write/InsertRowNodeSerdeTest.java
index 27774afc5cb..53e662e0a01 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/write/InsertRowNodeSerdeTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/write/InsertRowNodeSerdeTest.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.queryengine.plan.plan.node.write;
+package org.apache.iotdb.db.queryengine.plan.planner.node.write;
 
 import org.apache.iotdb.commons.exception.IllegalPathException;
 import org.apache.iotdb.commons.path.PartialPath;
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/write/InsertRowsNodeSerdeTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/write/InsertRowsNodeSerdeTest.java
similarity index 97%
rename from 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/write/InsertRowsNodeSerdeTest.java
rename to 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/write/InsertRowsNodeSerdeTest.java
index a887e0f37ce..38067f375b7 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/write/InsertRowsNodeSerdeTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/write/InsertRowsNodeSerdeTest.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.queryengine.plan.plan.node.write;
+package org.apache.iotdb.db.queryengine.plan.planner.node.write;
 
 import org.apache.iotdb.commons.exception.IllegalPathException;
 import org.apache.iotdb.commons.path.PartialPath;
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/write/InsertRowsOfOneDeviceNodeSerdeTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/write/InsertRowsOfOneDeviceNodeSerdeTest.java
similarity index 97%
rename from 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/write/InsertRowsOfOneDeviceNodeSerdeTest.java
rename to 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/write/InsertRowsOfOneDeviceNodeSerdeTest.java
index b1cd5bc91e4..8709069dcd8 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/write/InsertRowsOfOneDeviceNodeSerdeTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/write/InsertRowsOfOneDeviceNodeSerdeTest.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.queryengine.plan.plan.node.write;
+package org.apache.iotdb.db.queryengine.plan.planner.node.write;
 
 import org.apache.iotdb.commons.exception.IllegalPathException;
 import org.apache.iotdb.commons.path.PartialPath;
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/write/InsertTabletNodeSerdeTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/write/InsertTabletNodeSerdeTest.java
similarity index 98%
rename from 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/write/InsertTabletNodeSerdeTest.java
rename to 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/write/InsertTabletNodeSerdeTest.java
index 09765636f1c..7aeb5eaeb33 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/write/InsertTabletNodeSerdeTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/write/InsertTabletNodeSerdeTest.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.queryengine.plan.plan.node.write;
+package org.apache.iotdb.db.queryengine.plan.planner.node.write;
 
 import org.apache.iotdb.commons.exception.IllegalPathException;
 import org.apache.iotdb.commons.path.PartialPath;
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/write/WritePlanNodeSplitTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/write/WritePlanNodeSplitTest.java
similarity index 99%
rename from 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/write/WritePlanNodeSplitTest.java
rename to 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/write/WritePlanNodeSplitTest.java
index 441348c1934..050dcf80160 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/node/write/WritePlanNodeSplitTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/write/WritePlanNodeSplitTest.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.queryengine.plan.plan.node.write;
+package org.apache.iotdb.db.queryengine.plan.planner.node.write;
 
 import org.apache.iotdb.common.rpc.thrift.TConsensusGroupId;
 import org.apache.iotdb.common.rpc.thrift.TConsensusGroupType;
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/statement/sys/pipe/PipeStatementTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/statement/sys/pipe/PipeStatementTest.java
similarity index 98%
rename from 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/statement/sys/pipe/PipeStatementTest.java
rename to 
iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/statement/sys/pipe/PipeStatementTest.java
index dd35996e37e..ab885ddb557 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/plan/statement/sys/pipe/PipeStatementTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/statement/sys/pipe/PipeStatementTest.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.iotdb.db.queryengine.plan.plan.statement.sys.pipe;
+package org.apache.iotdb.db.queryengine.plan.planner.statement.sys.pipe;
 
 import org.apache.iotdb.db.queryengine.plan.analyze.QueryType;
 import org.apache.iotdb.db.queryengine.plan.statement.StatementType;
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/DataRegionTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/DataRegionTest.java
index c6ec0ed78d9..18bfeba6838 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/DataRegionTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/DataRegionTest.java
@@ -218,6 +218,7 @@ public class DataRegionTest {
             Collections.singletonList(new PartialPath(deviceId, 
measurementId)),
             deviceId,
             context,
+            null,
             null);
     Assert.assertEquals(10, queryDataSource.getSeqResources().size());
     for (TsFileResource resource : queryDataSource.getSeqResources()) {
@@ -294,6 +295,7 @@ public class DataRegionTest {
             Collections.singletonList(new PartialPath(deviceId, 
measurementId)),
             deviceId,
             context,
+            null,
             null);
 
     Assert.assertEquals(2, queryDataSource.getSeqResources().size());
@@ -375,6 +377,7 @@ public class DataRegionTest {
             Collections.singletonList(new PartialPath(deviceId, 
measurementId)),
             deviceId,
             context,
+            null,
             null);
 
     Assert.assertEquals(0, queryDataSource.getSeqResources().size());
@@ -455,6 +458,7 @@ public class DataRegionTest {
             Collections.singletonList(new PartialPath(deviceId, 
measurementId)),
             deviceId,
             context,
+            null,
             null);
 
     Assert.assertEquals(0, queryDataSource.getSeqResources().size());
@@ -489,6 +493,7 @@ public class DataRegionTest {
             Collections.singletonList(new PartialPath(deviceId, 
measurementId)),
             deviceId,
             context,
+            null,
             null);
     Assert.assertEquals(10, queryDataSource.getSeqResources().size());
     Assert.assertEquals(10, queryDataSource.getUnseqResources().size());
@@ -529,6 +534,7 @@ public class DataRegionTest {
             Collections.singletonList(new PartialPath(deviceId, 
measurementId)),
             deviceId,
             context,
+            null,
             null);
     Assert.assertEquals(0, queryDataSource.getSeqResources().size());
     Assert.assertEquals(0, queryDataSource.getUnseqResources().size());
@@ -572,6 +578,7 @@ public class DataRegionTest {
             Collections.singletonList(new PartialPath(deviceId, 
measurementId)),
             deviceId,
             context,
+            null,
             null);
     Assert.assertEquals(0, queryDataSource.getSeqResources().size());
     Assert.assertEquals(20, queryDataSource.getUnseqResources().size());
@@ -661,6 +668,7 @@ public class DataRegionTest {
             Collections.singletonList(new PartialPath(deviceId, 
measurementId)),
             deviceId,
             context,
+            null,
             null);
 
     Assert.assertEquals(0, queryDataSource.getSeqResources().size());
@@ -749,6 +757,7 @@ public class DataRegionTest {
             Collections.singletonList(new PartialPath(deviceId, 
measurementId)),
             deviceId,
             context,
+            null,
             null);
 
     Assert.assertEquals(0, queryDataSource.getSeqResources().size());
@@ -837,6 +846,7 @@ public class DataRegionTest {
             Collections.singletonList(new PartialPath(deviceId, 
measurementId)),
             deviceId,
             context,
+            null,
             null);
 
     Assert.assertEquals(0, queryDataSource.getSeqResources().size());
@@ -874,6 +884,7 @@ public class DataRegionTest {
             Collections.singletonList(new PartialPath("root.ln22", 
measurementId)),
             "root.ln22",
             context,
+            null,
             null);
     Assert.assertEquals(10, queryDataSource.getSeqResources().size());
     Assert.assertEquals(0, queryDataSource.getUnseqResources().size());
@@ -949,6 +960,7 @@ public class DataRegionTest {
             Collections.singletonList(new PartialPath(deviceId, 
measurementId)),
             deviceId,
             context,
+            null,
             null);
     Assert.assertEquals(2, queryDataSource.getSeqResources().size());
     for (TsFileResource resource : queryDataSource.getSeqResources()) {
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/TTLTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/TTLTest.java
index f56ab0ddf71..4cbd484bb9d 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/TTLTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/TTLTest.java
@@ -180,6 +180,7 @@ public class TTLTest {
             Collections.singletonList(mockMeasurementPath()),
             sg1,
             EnvironmentUtils.TEST_QUERY_CONTEXT,
+            null,
             null);
     List<TsFileResource> seqResource = dataSource.getSeqResources();
     List<TsFileResource> unseqResource = dataSource.getUnseqResources();
@@ -194,6 +195,7 @@ public class TTLTest {
             Collections.singletonList(mockMeasurementPath()),
             sg1,
             EnvironmentUtils.TEST_QUERY_CONTEXT,
+            null,
             null);
     seqResource = dataSource.getSeqResources();
     unseqResource = dataSource.getUnseqResources();
@@ -224,6 +226,7 @@ public class TTLTest {
             Collections.singletonList(mockMeasurementPath()),
             sg1,
             EnvironmentUtils.TEST_QUERY_CONTEXT,
+            null,
             null);
     seqResource = dataSource.getSeqResources();
     unseqResource = dataSource.getUnseqResources();

Reply via email to