You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by su...@apache.org on 2019/06/22 08:37:15 UTC

[incubator-iotdb] branch feature_async_close_tsfile updated: replace old query interface

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

suyue pushed a commit to branch feature_async_close_tsfile
in repository https://gitbox.apache.org/repos/asf/incubator-iotdb.git


The following commit(s) were added to refs/heads/feature_async_close_tsfile by this push:
     new 9095c0d  replace old query interface
     new 0e52c55  Merge branch 'feature_async_close_tsfile' of https://github.com/apache/incubator-iotdb into feature_async_close_tsfile
9095c0d is described below

commit 9095c0d88a6128570c9118f72ca91b761ec63e3e
Author: suyue <23...@qq.com>
AuthorDate: Sat Jun 22 16:36:24 2019 +0800

    replace old query interface
---
 .../apache/iotdb/db/query/dataset/AuthDataSet.java |  6 +-
 .../dataset/EngineDataSetWithTimeGenerator.java    |  2 -
 .../groupby/GroupByWithOnlyTimeFilterDataSet.java  | 29 ++++----
 .../groupby/GroupByWithValueFilterDataSet.java     |  8 +-
 .../AbstractExecutorWithoutTimeGenerator.java      | 84 ---------------------
 .../AbstractExecutorWithoutTimeGeneratorV2.java    | 85 ----------------------
 .../db/query/executor/AggregateEngineExecutor.java | 39 +++++-----
 .../executor/EngineExecutorWithTimeGenerator.java  | 16 ++--
 .../EngineExecutorWithoutTimeGenerator.java        | 29 +++++++-
 .../db/query/executor/FillEngineExecutor.java      |  7 +-
 .../db/query/factory/ISeriesReaderFactory.java     |  3 +-
 .../db/query/factory/SeriesReaderFactoryImpl.java  | 40 +++++++---
 .../java/org/apache/iotdb/db/query/fill/IFill.java | 26 ++-----
 .../org/apache/iotdb/db/query/fill/LinearFill.java |  8 +-
 .../apache/iotdb/db/query/fill/PreviousFill.java   |  8 +-
 .../reader/sequence/SequenceDataReaderV2.java      | 13 ++--
 .../timegenerator/AbstractNodeConstructor.java     | 34 ---------
 .../query/timegenerator/EngineNodeConstructor.java | 10 ++-
 18 files changed, 136 insertions(+), 311 deletions(-)

diff --git a/iotdb/src/main/java/org/apache/iotdb/db/query/dataset/AuthDataSet.java b/iotdb/src/main/java/org/apache/iotdb/db/query/dataset/AuthDataSet.java
index 1846f12..e283378 100644
--- a/iotdb/src/main/java/org/apache/iotdb/db/query/dataset/AuthDataSet.java
+++ b/iotdb/src/main/java/org/apache/iotdb/db/query/dataset/AuthDataSet.java
@@ -29,8 +29,8 @@ import org.apache.iotdb.tsfile.read.query.dataset.QueryDataSet;
 
 public class AuthDataSet extends QueryDataSet {
 
-  List<RowRecord> records = new ArrayList<>();
-  int index = 0;
+  private List<RowRecord> records = new ArrayList<>();
+  private int index = 0;
 
   public AuthDataSet(List<Path> paths,
       List<TSDataType> dataTypes) {
@@ -43,7 +43,7 @@ public class AuthDataSet extends QueryDataSet {
   }
 
   @Override
-  public RowRecord next() throws IOException {
+  public RowRecord next() {
     return records.get(index++);
   }
 
diff --git a/iotdb/src/main/java/org/apache/iotdb/db/query/dataset/EngineDataSetWithTimeGenerator.java b/iotdb/src/main/java/org/apache/iotdb/db/query/dataset/EngineDataSetWithTimeGenerator.java
index 04b46f1..2f86407 100644
--- a/iotdb/src/main/java/org/apache/iotdb/db/query/dataset/EngineDataSetWithTimeGenerator.java
+++ b/iotdb/src/main/java/org/apache/iotdb/db/query/dataset/EngineDataSetWithTimeGenerator.java
@@ -22,13 +22,11 @@ import java.io.IOException;
 import java.util.List;
 import org.apache.iotdb.db.query.reader.merge.EngineReaderByTimeStamp;
 import org.apache.iotdb.db.query.timegenerator.EngineTimeGenerator;
-import org.apache.iotdb.tsfile.exception.write.UnSupportedDataTypeException;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.read.common.Field;
 import org.apache.iotdb.tsfile.read.common.Path;
 import org.apache.iotdb.tsfile.read.common.RowRecord;
 import org.apache.iotdb.tsfile.read.query.dataset.QueryDataSet;
-import org.apache.iotdb.tsfile.utils.Binary;
 
 public class EngineDataSetWithTimeGenerator extends QueryDataSet {
 
diff --git a/iotdb/src/main/java/org/apache/iotdb/db/query/dataset/groupby/GroupByWithOnlyTimeFilterDataSet.java b/iotdb/src/main/java/org/apache/iotdb/db/query/dataset/groupby/GroupByWithOnlyTimeFilterDataSet.java
index e2688ba..873682b 100644
--- a/iotdb/src/main/java/org/apache/iotdb/db/query/dataset/groupby/GroupByWithOnlyTimeFilterDataSet.java
+++ b/iotdb/src/main/java/org/apache/iotdb/db/query/dataset/groupby/GroupByWithOnlyTimeFilterDataSet.java
@@ -22,7 +22,7 @@ package org.apache.iotdb.db.query.dataset.groupby;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
-import org.apache.iotdb.db.engine.querycontext.QueryDataSource;
+import org.apache.iotdb.db.engine.querycontext.QueryDataSourceV2;
 import org.apache.iotdb.db.exception.FileNodeManagerException;
 import org.apache.iotdb.db.exception.PathErrorException;
 import org.apache.iotdb.db.exception.ProcessorException;
@@ -30,11 +30,10 @@ import org.apache.iotdb.db.query.aggregation.AggreResultData;
 import org.apache.iotdb.db.query.aggregation.AggregateFunction;
 import org.apache.iotdb.db.query.context.QueryContext;
 import org.apache.iotdb.db.query.control.QueryResourceManager;
-import org.apache.iotdb.db.query.factory.SeriesReaderFactory;
+import org.apache.iotdb.db.query.factory.SeriesReaderFactoryImpl;
 import org.apache.iotdb.db.query.reader.IAggregateReader;
 import org.apache.iotdb.db.query.reader.IPointReader;
-import org.apache.iotdb.db.query.reader.merge.PriorityMergeReader;
-import org.apache.iotdb.db.query.reader.sequence.SequenceDataReader;
+import org.apache.iotdb.db.query.reader.sequence.SequenceDataReaderV2;
 import org.apache.iotdb.tsfile.file.header.PageHeader;
 import org.apache.iotdb.tsfile.read.common.BatchData;
 import org.apache.iotdb.tsfile.read.common.Field;
@@ -47,8 +46,8 @@ import org.apache.iotdb.tsfile.utils.Pair;
 
 public class GroupByWithOnlyTimeFilterDataSet extends GroupByEngineDataSet {
 
-  protected List<IPointReader> unSequenceReaderList;
-  protected List<IAggregateReader> sequenceReaderList;
+  private List<IPointReader> unSequenceReaderList;
+  private List<IAggregateReader> sequenceReaderList;
   private List<BatchData> batchDataList;
   private List<Boolean> hasCachedSequenceDataList;
   private Filter timeFilter;
@@ -81,17 +80,19 @@ public class GroupByWithOnlyTimeFilterDataSet extends GroupByEngineDataSet {
     if (expression != null) {
       timeFilter = ((GlobalTimeExpression) expression).getFilter();
     }
-    for (int i = 0; i < selectedSeries.size(); i++) {
-      QueryDataSource queryDataSource = QueryResourceManager.getInstance()
-          .getQueryDataSource(selectedSeries.get(i), context);
+    for (Path path : selectedSeries) {
+      QueryDataSourceV2 queryDataSource = QueryResourceManager.getInstance()
+          .getQueryDataSourceV2(path, context);
 
       // sequence reader for sealed tsfile, unsealed tsfile, memory
-      SequenceDataReader sequenceReader = new SequenceDataReader(queryDataSource.getSeqDataSource(),
-          timeFilter, context, false);
+      SequenceDataReaderV2 sequenceReader = new SequenceDataReaderV2(
+          queryDataSource.getSeriesPath(), queryDataSource.getSeqResources(), timeFilter, context,
+          false);
 
       // unseq reader for all chunk groups in unSeqFile, memory
-      PriorityMergeReader unSeqMergeReader = SeriesReaderFactory.getInstance()
-          .createUnSeqMergeReader(queryDataSource.getOverflowSeriesDataSource(), timeFilter);
+      IPointReader unSeqMergeReader = SeriesReaderFactoryImpl.getInstance()
+          .createUnSeqReader(queryDataSource.getSeriesPath(), queryDataSource.getUnseqResources(),
+              timeFilter);
 
       sequenceReaderList.add(sequenceReader);
       unSequenceReaderList.add(unSeqMergeReader);
@@ -108,7 +109,7 @@ public class GroupByWithOnlyTimeFilterDataSet extends GroupByEngineDataSet {
     hasCachedTimeInterval = false;
     RowRecord record = new RowRecord(startTime);
     for (int i = 0; i < functions.size(); i++) {
-      AggreResultData res = null;
+      AggreResultData res;
       try {
         res = nextSeries(i);
       } catch (ProcessorException e) {
diff --git a/iotdb/src/main/java/org/apache/iotdb/db/query/dataset/groupby/GroupByWithValueFilterDataSet.java b/iotdb/src/main/java/org/apache/iotdb/db/query/dataset/groupby/GroupByWithValueFilterDataSet.java
index f7ffa29..fc2a1b4 100644
--- a/iotdb/src/main/java/org/apache/iotdb/db/query/dataset/groupby/GroupByWithValueFilterDataSet.java
+++ b/iotdb/src/main/java/org/apache/iotdb/db/query/dataset/groupby/GroupByWithValueFilterDataSet.java
@@ -29,7 +29,7 @@ import org.apache.iotdb.db.exception.ProcessorException;
 import org.apache.iotdb.db.query.aggregation.AggregateFunction;
 import org.apache.iotdb.db.query.context.QueryContext;
 import org.apache.iotdb.db.query.control.QueryResourceManager;
-import org.apache.iotdb.db.query.factory.SeriesReaderFactory;
+import org.apache.iotdb.db.query.factory.SeriesReaderFactoryImpl;
 import org.apache.iotdb.db.query.reader.merge.EngineReaderByTimeStamp;
 import org.apache.iotdb.db.query.timegenerator.EngineTimeGenerator;
 import org.apache.iotdb.tsfile.read.common.Path;
@@ -70,15 +70,15 @@ public class GroupByWithValueFilterDataSet extends GroupByEngineDataSet {
    * init reader and aggregate function.
    */
   public void initGroupBy(QueryContext context, List<String> aggres, IExpression expression)
-      throws FileNodeManagerException, PathErrorException, ProcessorException, IOException {
+      throws FileNodeManagerException, PathErrorException, ProcessorException {
     initAggreFuction(aggres);
 
     QueryResourceManager.getInstance().beginQueryOfGivenExpression(context.getJobId(), expression);
     QueryResourceManager
         .getInstance().beginQueryOfGivenQueryPaths(context.getJobId(), selectedSeries);
     this.timestampGenerator = new EngineTimeGenerator(expression, context);
-    this.allDataReaderList = SeriesReaderFactory
-        .getByTimestampReadersOfSelectedPaths(selectedSeries, context);
+    this.allDataReaderList = SeriesReaderFactoryImpl.getInstance()
+        .createByTimestampReadersOfSelectedPaths(selectedSeries, context);
   }
 
   @Override
diff --git a/iotdb/src/main/java/org/apache/iotdb/db/query/executor/AbstractExecutorWithoutTimeGenerator.java b/iotdb/src/main/java/org/apache/iotdb/db/query/executor/AbstractExecutorWithoutTimeGenerator.java
deleted file mode 100644
index f5f07c8..0000000
--- a/iotdb/src/main/java/org/apache/iotdb/db/query/executor/AbstractExecutorWithoutTimeGenerator.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.iotdb.db.query.executor;
-
-import java.io.IOException;
-import java.util.List;
-import org.apache.iotdb.db.engine.querycontext.QueryDataSource;
-import org.apache.iotdb.db.exception.FileNodeManagerException;
-import org.apache.iotdb.db.exception.PathErrorException;
-import org.apache.iotdb.db.metadata.MManager;
-import org.apache.iotdb.db.query.context.QueryContext;
-import org.apache.iotdb.db.query.control.QueryResourceManager;
-import org.apache.iotdb.db.query.factory.SeriesReaderFactory;
-import org.apache.iotdb.db.query.reader.AllDataReader;
-import org.apache.iotdb.db.query.reader.IPointReader;
-import org.apache.iotdb.db.query.reader.merge.PriorityMergeReader;
-import org.apache.iotdb.db.query.reader.sequence.SequenceDataReader;
-import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
-import org.apache.iotdb.tsfile.read.common.Path;
-import org.apache.iotdb.tsfile.read.filter.basic.Filter;
-
-/**
- * Query executor with global time filter.
- */
-public abstract class AbstractExecutorWithoutTimeGenerator {
-
-  /**
-   * Create reader of a series
-   *
-   * @param context query context
-   * @param path series path
-   * @param dataTypes list of data type
-   * @param timeFilter time filter
-   * @return reader of the series
-   */
-  public static IPointReader createSeriesReader(QueryContext context, Path path,
-      List<TSDataType> dataTypes, Filter timeFilter)
-      throws FileNodeManagerException {
-    QueryDataSource queryDataSource = QueryResourceManager.getInstance().getQueryDataSource(path,
-        context);
-    // add data type
-    try {
-      dataTypes.add(MManager.getInstance().getSeriesType(path.getFullPath()));
-    } catch (PathErrorException e) {
-      throw new FileNodeManagerException(e);
-    }
-
-    // sequence reader for one sealed tsfile
-    SequenceDataReader tsFilesReader;
-    try {
-      tsFilesReader = new SequenceDataReader(queryDataSource.getSeqDataSource(),
-          timeFilter, context);
-    } catch (IOException e) {
-      throw new FileNodeManagerException(e);
-    }
-
-    // unseq reader for all chunk groups in unSeqFile
-    PriorityMergeReader unSeqMergeReader;
-    try {
-      unSeqMergeReader = SeriesReaderFactory.getInstance()
-          .createUnSeqMergeReader(queryDataSource.getOverflowSeriesDataSource(), timeFilter);
-    } catch (IOException e) {
-      throw new FileNodeManagerException(e);
-    }
-    // merge sequence data with unsequence data.
-    return new AllDataReader(tsFilesReader, unSeqMergeReader);
-  }
-}
diff --git a/iotdb/src/main/java/org/apache/iotdb/db/query/executor/AbstractExecutorWithoutTimeGeneratorV2.java b/iotdb/src/main/java/org/apache/iotdb/db/query/executor/AbstractExecutorWithoutTimeGeneratorV2.java
deleted file mode 100644
index b5fbb2e..0000000
--- a/iotdb/src/main/java/org/apache/iotdb/db/query/executor/AbstractExecutorWithoutTimeGeneratorV2.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.iotdb.db.query.executor;
-
-import java.io.IOException;
-import java.util.List;
-import org.apache.iotdb.db.engine.querycontext.QueryDataSourceV2;
-import org.apache.iotdb.db.exception.FileNodeManagerException;
-import org.apache.iotdb.db.exception.PathErrorException;
-import org.apache.iotdb.db.metadata.MManager;
-import org.apache.iotdb.db.query.context.QueryContext;
-import org.apache.iotdb.db.query.control.QueryResourceManager;
-import org.apache.iotdb.db.query.factory.SeriesReaderFactory;
-import org.apache.iotdb.db.query.reader.AllDataReader;
-import org.apache.iotdb.db.query.reader.IPointReader;
-import org.apache.iotdb.db.query.reader.merge.PriorityMergeReader;
-import org.apache.iotdb.db.query.reader.sequence.SequenceDataReaderV2;
-import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
-import org.apache.iotdb.tsfile.read.common.Path;
-import org.apache.iotdb.tsfile.read.filter.basic.Filter;
-
-/**
- * Query executor with global time filter.
- */
-public abstract class AbstractExecutorWithoutTimeGeneratorV2 {
-
-  /**
-   * Create reader of a series
-   *
-   * @param context query context
-   * @param path series path
-   * @param dataTypes list of data type
-   * @param timeFilter time filter
-   * @return reader of the series
-   */
-  public static IPointReader createSeriesReader(QueryContext context, Path path,
-      List<TSDataType> dataTypes, Filter timeFilter)
-      throws FileNodeManagerException {
-    QueryDataSourceV2 queryDataSource = QueryResourceManager.getInstance().getQueryDataSourceV2(path,
-        context);
-    // add data type
-    try {
-      dataTypes.add(MManager.getInstance().getSeriesType(path.getFullPath()));
-    } catch (PathErrorException e) {
-      throw new FileNodeManagerException(e);
-    }
-
-    // sequence reader for one sealed tsfile
-    SequenceDataReaderV2 tsFilesReader;
-    try {
-      tsFilesReader = new SequenceDataReaderV2(queryDataSource.getSeriesPath(), queryDataSource.getSeqResources(),
-          timeFilter, context);
-    } catch (IOException e) {
-      throw new FileNodeManagerException(e);
-    }
-
-    //TODO add refact overflow
-    // unseq reader for all chunk groups in unSeqFile
-    PriorityMergeReader unSeqMergeReader = null;
-//    try {
-//      unSeqMergeReader = SeriesReaderFactory.getInstance()
-//          .createUnSeqMergeReader(queryDataSource.getOverflowSeriesDataSource(), timeFilter);
-//    } catch (IOException e) {
-//      throw new FileNodeManagerException(e);
-//    }
-    // merge sequence data with unsequence data.
-    return new AllDataReader(tsFilesReader, unSeqMergeReader);
-  }
-}
diff --git a/iotdb/src/main/java/org/apache/iotdb/db/query/executor/AggregateEngineExecutor.java b/iotdb/src/main/java/org/apache/iotdb/db/query/executor/AggregateEngineExecutor.java
index f91a8ff..a608127 100644
--- a/iotdb/src/main/java/org/apache/iotdb/db/query/executor/AggregateEngineExecutor.java
+++ b/iotdb/src/main/java/org/apache/iotdb/db/query/executor/AggregateEngineExecutor.java
@@ -23,12 +23,11 @@ import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
-import org.apache.iotdb.db.engine.querycontext.QueryDataSource;
+import org.apache.iotdb.db.engine.querycontext.QueryDataSourceV2;
 import org.apache.iotdb.db.exception.FileNodeManagerException;
 import org.apache.iotdb.db.exception.PathErrorException;
 import org.apache.iotdb.db.exception.ProcessorException;
 import org.apache.iotdb.db.metadata.MManager;
-import org.apache.iotdb.db.query.factory.AggreFuncFactory;
 import org.apache.iotdb.db.query.aggregation.AggreResultData;
 import org.apache.iotdb.db.query.aggregation.AggregateFunction;
 import org.apache.iotdb.db.query.aggregation.impl.LastAggrFunc;
@@ -37,11 +36,12 @@ import org.apache.iotdb.db.query.context.QueryContext;
 import org.apache.iotdb.db.query.control.QueryResourceManager;
 import org.apache.iotdb.db.query.dataset.AggreResultDataPointReader;
 import org.apache.iotdb.db.query.dataset.EngineDataSetWithoutTimeGenerator;
-import org.apache.iotdb.db.query.factory.SeriesReaderFactory;
+import org.apache.iotdb.db.query.factory.AggreFuncFactory;
+import org.apache.iotdb.db.query.factory.SeriesReaderFactoryImpl;
+import org.apache.iotdb.db.query.reader.IAggregateReader;
 import org.apache.iotdb.db.query.reader.IPointReader;
 import org.apache.iotdb.db.query.reader.merge.EngineReaderByTimeStamp;
-import org.apache.iotdb.db.query.reader.merge.PriorityMergeReader;
-import org.apache.iotdb.db.query.reader.sequence.SequenceDataReader;
+import org.apache.iotdb.db.query.reader.sequence.SequenceDataReaderV2;
 import org.apache.iotdb.db.query.timegenerator.EngineTimeGenerator;
 import org.apache.iotdb.tsfile.file.header.PageHeader;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
@@ -88,7 +88,7 @@ public class AggregateEngineExecutor {
     QueryResourceManager
         .getInstance().beginQueryOfGivenQueryPaths(context.getJobId(), selectedSeries);
 
-    List<SequenceDataReader> readersOfSequenceData = new ArrayList<>();
+    List<IAggregateReader> readersOfSequenceData = new ArrayList<>();
     List<IPointReader> readersOfUnSequenceData = new ArrayList<>();
     List<AggregateFunction> aggregateFunctions = new ArrayList<>();
     for (int i = 0; i < selectedSeries.size(); i++) {
@@ -99,22 +99,23 @@ public class AggregateEngineExecutor {
       function.init();
       aggregateFunctions.add(function);
 
-      QueryDataSource queryDataSource = QueryResourceManager.getInstance()
-          .getQueryDataSource(selectedSeries.get(i), context);
+      QueryDataSourceV2 queryDataSource = QueryResourceManager.getInstance()
+          .getQueryDataSourceV2(selectedSeries.get(i), context);
 
       // sequence reader for sealed tsfile, unsealed tsfile, memory
-      SequenceDataReader sequenceReader;
+      SequenceDataReaderV2 sequenceReader;
       if (function instanceof MaxTimeAggrFunc || function instanceof LastAggrFunc) {
-        sequenceReader = new SequenceDataReader(queryDataSource.getSeqDataSource(), timeFilter,
-            context, true);
+        sequenceReader = new SequenceDataReaderV2(queryDataSource.getSeriesPath(),
+            queryDataSource.getSeqResources(), timeFilter, context, true);
       } else {
-        sequenceReader = new SequenceDataReader(queryDataSource.getSeqDataSource(), timeFilter,
-            context, false);
+        sequenceReader = new SequenceDataReaderV2(queryDataSource.getSeriesPath(),
+            queryDataSource.getSeqResources(), timeFilter, context, false);
       }
 
       // unseq reader for all chunk groups in unSeqFile, memory
-      PriorityMergeReader unSeqMergeReader = SeriesReaderFactory.getInstance()
-          .createUnSeqMergeReader(queryDataSource.getOverflowSeriesDataSource(), timeFilter);
+      IPointReader unSeqMergeReader = SeriesReaderFactoryImpl.getInstance()
+          .createUnSeqReader(queryDataSource.getSeriesPath(), queryDataSource.getUnseqResources(),
+              timeFilter);
 
       readersOfSequenceData.add(sequenceReader);
       readersOfUnSequenceData.add(unSeqMergeReader);
@@ -139,7 +140,7 @@ public class AggregateEngineExecutor {
    * @return one series aggregate result data
    */
   private AggreResultData aggregateWithOutTimeGenerator(AggregateFunction function,
-      SequenceDataReader sequenceReader, IPointReader unSequenceReader, Filter filter)
+      IAggregateReader sequenceReader, IPointReader unSequenceReader, Filter filter)
       throws IOException, ProcessorException {
     if (function instanceof MaxTimeAggrFunc || function instanceof LastAggrFunc) {
       return handleLastMaxTimeWithOutTimeGenerator(function, sequenceReader, unSequenceReader,
@@ -206,7 +207,7 @@ public class AggregateEngineExecutor {
    * @return BatchData-aggregate result
    */
   private AggreResultData handleLastMaxTimeWithOutTimeGenerator(AggregateFunction function,
-      SequenceDataReader sequenceReader, IPointReader unSequenceReader, Filter timeFilter)
+      IAggregateReader sequenceReader, IPointReader unSequenceReader, Filter timeFilter)
       throws IOException, ProcessorException {
     long lastBatchTimeStamp = Long.MIN_VALUE;
     boolean isChunkEnd = false;
@@ -262,8 +263,8 @@ public class AggregateEngineExecutor {
     QueryResourceManager.getInstance().beginQueryOfGivenExpression(context.getJobId(), expression);
 
     EngineTimeGenerator timestampGenerator = new EngineTimeGenerator(expression, context);
-    List<EngineReaderByTimeStamp> readersOfSelectedSeries = SeriesReaderFactory
-        .getByTimestampReadersOfSelectedPaths(selectedSeries, context);
+    List<EngineReaderByTimeStamp> readersOfSelectedSeries = SeriesReaderFactoryImpl.getInstance()
+        .createByTimestampReadersOfSelectedPaths(selectedSeries, context);
 
     List<AggregateFunction> aggregateFunctions = new ArrayList<>();
     for (int i = 0; i < selectedSeries.size(); i++) {
diff --git a/iotdb/src/main/java/org/apache/iotdb/db/query/executor/EngineExecutorWithTimeGenerator.java b/iotdb/src/main/java/org/apache/iotdb/db/query/executor/EngineExecutorWithTimeGenerator.java
index 9001ee0..3deb7c1 100644
--- a/iotdb/src/main/java/org/apache/iotdb/db/query/executor/EngineExecutorWithTimeGenerator.java
+++ b/iotdb/src/main/java/org/apache/iotdb/db/query/executor/EngineExecutorWithTimeGenerator.java
@@ -28,7 +28,7 @@ import org.apache.iotdb.db.metadata.MManager;
 import org.apache.iotdb.db.query.context.QueryContext;
 import org.apache.iotdb.db.query.control.QueryResourceManager;
 import org.apache.iotdb.db.query.dataset.EngineDataSetWithTimeGenerator;
-import org.apache.iotdb.db.query.factory.SeriesReaderFactory;
+import org.apache.iotdb.db.query.factory.SeriesReaderFactoryImpl;
 import org.apache.iotdb.db.query.reader.merge.EngineReaderByTimeStamp;
 import org.apache.iotdb.db.query.timegenerator.EngineTimeGenerator;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
@@ -37,7 +37,7 @@ import org.apache.iotdb.tsfile.read.expression.QueryExpression;
 import org.apache.iotdb.tsfile.read.query.dataset.QueryDataSet;
 
 /**
- * IoTDB query executor with filter.
+ * IoTDB query executor with value filter.
  */
 public class EngineExecutorWithTimeGenerator {
 
@@ -51,7 +51,6 @@ public class EngineExecutorWithTimeGenerator {
    * execute query.
    *
    * @return QueryDataSet object
-   * @throws IOException IOException
    * @throws FileNodeManagerException FileNodeManagerException
    */
   public QueryDataSet execute(QueryContext context) throws FileNodeManagerException {
@@ -63,13 +62,10 @@ public class EngineExecutorWithTimeGenerator {
 
     EngineTimeGenerator timestampGenerator;
     List<EngineReaderByTimeStamp> readersOfSelectedSeries;
-    try {
-      timestampGenerator = new EngineTimeGenerator(queryExpression.getExpression(), context);
-      readersOfSelectedSeries = SeriesReaderFactory
-          .getByTimestampReadersOfSelectedPathsV2(queryExpression.getSelectedSeries(), context);
-    } catch (IOException ex) {
-      throw new FileNodeManagerException(ex);
-    }
+
+    timestampGenerator = new EngineTimeGenerator(queryExpression.getExpression(), context);
+    readersOfSelectedSeries = SeriesReaderFactoryImpl.getInstance()
+        .createByTimestampReadersOfSelectedPaths(queryExpression.getSelectedSeries(), context);
 
     List<TSDataType> dataTypes = new ArrayList<>();
 
diff --git a/iotdb/src/main/java/org/apache/iotdb/db/query/executor/EngineExecutorWithoutTimeGenerator.java b/iotdb/src/main/java/org/apache/iotdb/db/query/executor/EngineExecutorWithoutTimeGenerator.java
index 0198c69..34d93cc 100644
--- a/iotdb/src/main/java/org/apache/iotdb/db/query/executor/EngineExecutorWithoutTimeGenerator.java
+++ b/iotdb/src/main/java/org/apache/iotdb/db/query/executor/EngineExecutorWithoutTimeGenerator.java
@@ -22,9 +22,12 @@ import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
 import org.apache.iotdb.db.exception.FileNodeManagerException;
+import org.apache.iotdb.db.exception.PathErrorException;
+import org.apache.iotdb.db.metadata.MManager;
 import org.apache.iotdb.db.query.context.QueryContext;
 import org.apache.iotdb.db.query.control.QueryResourceManager;
 import org.apache.iotdb.db.query.dataset.EngineDataSetWithoutTimeGenerator;
+import org.apache.iotdb.db.query.factory.SeriesReaderFactoryImpl;
 import org.apache.iotdb.db.query.reader.IPointReader;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.read.common.Path;
@@ -36,7 +39,7 @@ import org.apache.iotdb.tsfile.read.query.dataset.QueryDataSet;
 /**
  * IoTDB query executor of Stand-alone version with global time filter.
  */
-public class EngineExecutorWithoutTimeGenerator extends AbstractExecutorWithoutTimeGeneratorV2 {
+public class EngineExecutorWithoutTimeGenerator {
 
   private QueryExpression queryExpression;
 
@@ -48,7 +51,7 @@ public class EngineExecutorWithoutTimeGenerator extends AbstractExecutorWithoutT
    * without filter or with global time filter.
    */
   public QueryDataSet execute(QueryContext context)
-      throws FileNodeManagerException {
+      throws FileNodeManagerException, IOException {
 
     Filter timeFilter = null;
     if (queryExpression.hasQueryFilter()) {
@@ -74,4 +77,26 @@ public class EngineExecutorWithoutTimeGenerator extends AbstractExecutorWithoutT
       throw new FileNodeManagerException(e);
     }
   }
+
+  /**
+   * Create reader of a series
+   *
+   * @param context query context
+   * @param path series path
+   * @param dataTypes list of data type
+   * @param timeFilter time filter
+   * @return reader of the series
+   */
+  public static IPointReader createSeriesReader(QueryContext context, Path path,
+      List<TSDataType> dataTypes, Filter timeFilter)
+      throws FileNodeManagerException, IOException {
+    // add data type
+    try {
+      dataTypes.add(MManager.getInstance().getSeriesType(path.getFullPath()));
+    } catch (PathErrorException e) {
+      throw new FileNodeManagerException(e);
+    }
+
+    return SeriesReaderFactoryImpl.getInstance().createAllDataReader(path, timeFilter, context);
+  }
 }
diff --git a/iotdb/src/main/java/org/apache/iotdb/db/query/executor/FillEngineExecutor.java b/iotdb/src/main/java/org/apache/iotdb/db/query/executor/FillEngineExecutor.java
index 83c5fa9..2b3adeb 100644
--- a/iotdb/src/main/java/org/apache/iotdb/db/query/executor/FillEngineExecutor.java
+++ b/iotdb/src/main/java/org/apache/iotdb/db/query/executor/FillEngineExecutor.java
@@ -23,7 +23,6 @@ import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
-import org.apache.iotdb.db.engine.querycontext.QueryDataSource;
 import org.apache.iotdb.db.exception.FileNodeManagerException;
 import org.apache.iotdb.db.exception.PathErrorException;
 import org.apache.iotdb.db.metadata.MManager;
@@ -64,11 +63,9 @@ public class FillEngineExecutor {
     List<IFill> fillList = new ArrayList<>();
     List<TSDataType> dataTypeList = new ArrayList<>();
     for (Path path : selectedSeries) {
-      QueryDataSource queryDataSource = QueryResourceManager.getInstance()
-          .getQueryDataSource(path, context);
       TSDataType dataType = MManager.getInstance().getSeriesType(path.getFullPath());
       dataTypeList.add(dataType);
-      IFill fill = null;
+      IFill fill;
       if (!typeIFillMap.containsKey(dataType)) {
         fill = new PreviousFill(dataType, queryTime, 0);
       } else {
@@ -76,7 +73,7 @@ public class FillEngineExecutor {
       }
       fill.setDataType(dataType);
       fill.setQueryTime(queryTime);
-      fill.constructReaders(queryDataSource, context);
+      fill.constructReaders(path, context);
       fillList.add(fill);
     }
 
diff --git a/iotdb/src/main/java/org/apache/iotdb/db/query/factory/ISeriesReaderFactory.java b/iotdb/src/main/java/org/apache/iotdb/db/query/factory/ISeriesReaderFactory.java
index c1be4ce..ebbf7ff 100644
--- a/iotdb/src/main/java/org/apache/iotdb/db/query/factory/ISeriesReaderFactory.java
+++ b/iotdb/src/main/java/org/apache/iotdb/db/query/factory/ISeriesReaderFactory.java
@@ -26,7 +26,6 @@ import org.apache.iotdb.db.query.context.QueryContext;
 import org.apache.iotdb.db.query.reader.IPointReader;
 import org.apache.iotdb.db.query.reader.merge.EngineReaderByTimeStamp;
 import org.apache.iotdb.tsfile.read.common.Path;
-import org.apache.iotdb.tsfile.read.expression.impl.SingleSeriesExpression;
 import org.apache.iotdb.tsfile.read.filter.basic.Filter;
 
 /**
@@ -63,5 +62,5 @@ public interface ISeriesReaderFactory {
    * @return the list of EngineReaderByTimeStamp
    */
   IPointReader createAllDataReader(Path path, Filter timeFilter,
-      QueryContext context) throws FileNodeManagerException;
+      QueryContext context) throws FileNodeManagerException, IOException;
 }
diff --git a/iotdb/src/main/java/org/apache/iotdb/db/query/factory/SeriesReaderFactoryImpl.java b/iotdb/src/main/java/org/apache/iotdb/db/query/factory/SeriesReaderFactoryImpl.java
index 8fa8d19..79d63f8 100644
--- a/iotdb/src/main/java/org/apache/iotdb/db/query/factory/SeriesReaderFactoryImpl.java
+++ b/iotdb/src/main/java/org/apache/iotdb/db/query/factory/SeriesReaderFactoryImpl.java
@@ -34,9 +34,20 @@ import org.apache.iotdb.db.query.reader.sequence.SequenceDataReaderByTimestampV2
 import org.apache.iotdb.db.query.reader.sequence.SequenceDataReaderV2;
 import org.apache.iotdb.tsfile.read.common.Path;
 import org.apache.iotdb.tsfile.read.filter.basic.Filter;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public class SeriesReaderFactoryImpl implements ISeriesReaderFactory {
 
+  private static final Logger logger = LoggerFactory.getLogger(SeriesReaderFactory.class);
+
+  private SeriesReaderFactoryImpl() {
+  }
+
+  public static SeriesReaderFactoryImpl getInstance() {
+    return SeriesReaderFactoryHelper.INSTANCE;
+  }
+
   @Override
   public IPointReader createUnSeqReader(Path seriesPath, List<TsFileResourceV2> unSeqResources,
       Filter filter) throws IOException {
@@ -80,30 +91,35 @@ public class SeriesReaderFactoryImpl implements ISeriesReaderFactory {
 
   @Override
   public IPointReader createAllDataReader(Path path, Filter timeFilter, QueryContext context)
-      throws FileNodeManagerException {
+      throws FileNodeManagerException, IOException {
     QueryDataSourceV2 queryDataSource = QueryResourceManager.getInstance()
-        .getQueryDataSourceV2(path,
-            context);
+        .getQueryDataSourceV2(path, context);
 
     // sequence reader for one sealed tsfile
     SequenceDataReaderV2 tsFilesReader;
-    try {
+
       tsFilesReader = new SequenceDataReaderV2(queryDataSource.getSeriesPath(),
           queryDataSource.getSeqResources(),
           timeFilter, context);
-    } catch (IOException e) {
-      throw new FileNodeManagerException(e);
-    }
 
     // unseq reader for all chunk groups in unSeqFile
     IPointReader unSeqMergeReader = null;
-    try {
       unSeqMergeReader = createUnSeqReader(path, queryDataSource.getUnseqResources(), timeFilter);
-    } catch (IOException e) {
-      throw new FileNodeManagerException(e);
+
+    if (!tsFilesReader.hasNext()) {
+      //only have unsequence data.
+      return unSeqMergeReader;
+    } else {
+      //merge sequence data with unsequence data.
+      return new AllDataReader(tsFilesReader, unSeqMergeReader);
     }
-    // merge sequence data with unsequence data.
-    return new AllDataReader(tsFilesReader, unSeqMergeReader);
   }
 
+  private static class SeriesReaderFactoryHelper {
+
+    private static final SeriesReaderFactoryImpl INSTANCE = new SeriesReaderFactoryImpl();
+
+    private SeriesReaderFactoryHelper() {
+    }
+  }
 }
diff --git a/iotdb/src/main/java/org/apache/iotdb/db/query/fill/IFill.java b/iotdb/src/main/java/org/apache/iotdb/db/query/fill/IFill.java
index 83291b7..c720500 100644
--- a/iotdb/src/main/java/org/apache/iotdb/db/query/fill/IFill.java
+++ b/iotdb/src/main/java/org/apache/iotdb/db/query/fill/IFill.java
@@ -20,13 +20,10 @@
 package org.apache.iotdb.db.query.fill;
 
 import java.io.IOException;
-import org.apache.iotdb.db.engine.querycontext.QueryDataSource;
+import org.apache.iotdb.db.exception.FileNodeManagerException;
 import org.apache.iotdb.db.query.context.QueryContext;
-import org.apache.iotdb.db.query.factory.SeriesReaderFactory;
-import org.apache.iotdb.db.query.reader.AllDataReader;
+import org.apache.iotdb.db.query.factory.SeriesReaderFactoryImpl;
 import org.apache.iotdb.db.query.reader.IPointReader;
-import org.apache.iotdb.db.query.reader.merge.PriorityMergeReader;
-import org.apache.iotdb.db.query.reader.sequence.SequenceDataReader;
 import org.apache.iotdb.db.utils.TimeValuePair;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.read.common.Path;
@@ -50,21 +47,14 @@ public abstract class IFill {
 
   public abstract IFill copy(Path path);
 
-  public abstract void constructReaders(QueryDataSource queryDataSource, QueryContext context)
-      throws IOException;
+  public abstract void constructReaders(Path path, QueryContext context)
+      throws IOException, FileNodeManagerException;
 
-  void constructReaders(QueryDataSource queryDataSource, QueryContext context, long beforeRange)
-      throws IOException {
+  void constructReaders(Path path, QueryContext context, long beforeRange)
+      throws IOException, FileNodeManagerException {
     Filter timeFilter = constructFilter(beforeRange);
-    // sequence reader for sealed tsfile, unsealed tsfile, memory
-    SequenceDataReader sequenceReader = new SequenceDataReader(queryDataSource.getSeqDataSource(),
-        timeFilter, context, false);
-
-    // unseq reader for all chunk groups in unSeqFile, memory
-    PriorityMergeReader unSeqMergeReader = SeriesReaderFactory.getInstance()
-        .createUnSeqMergeReader(queryDataSource.getOverflowSeriesDataSource(), timeFilter);
-
-    allDataReader = new AllDataReader(sequenceReader, unSeqMergeReader);
+    allDataReader = SeriesReaderFactoryImpl.getInstance()
+        .createAllDataReader(path, timeFilter, context);
   }
 
   public abstract IPointReader getFillResult() throws IOException;
diff --git a/iotdb/src/main/java/org/apache/iotdb/db/query/fill/LinearFill.java b/iotdb/src/main/java/org/apache/iotdb/db/query/fill/LinearFill.java
index dc46082..2f8f6ac 100644
--- a/iotdb/src/main/java/org/apache/iotdb/db/query/fill/LinearFill.java
+++ b/iotdb/src/main/java/org/apache/iotdb/db/query/fill/LinearFill.java
@@ -20,7 +20,7 @@
 package org.apache.iotdb.db.query.fill;
 
 import java.io.IOException;
-import org.apache.iotdb.db.engine.querycontext.QueryDataSource;
+import org.apache.iotdb.db.exception.FileNodeManagerException;
 import org.apache.iotdb.db.exception.UnSupportedFillTypeException;
 import org.apache.iotdb.db.query.context.QueryContext;
 import org.apache.iotdb.db.query.reader.IPointReader;
@@ -71,9 +71,9 @@ public class LinearFill extends IFill {
   }
 
   @Override
-  public void constructReaders(QueryDataSource queryDataSource, QueryContext context)
-      throws IOException {
-    super.constructReaders(queryDataSource, context, beforeRange);
+  public void constructReaders(Path path, QueryContext context)
+      throws IOException, FileNodeManagerException {
+    super.constructReaders(path, context, beforeRange);
   }
 
   @Override
diff --git a/iotdb/src/main/java/org/apache/iotdb/db/query/fill/PreviousFill.java b/iotdb/src/main/java/org/apache/iotdb/db/query/fill/PreviousFill.java
index b75fb4f..1e0584f 100644
--- a/iotdb/src/main/java/org/apache/iotdb/db/query/fill/PreviousFill.java
+++ b/iotdb/src/main/java/org/apache/iotdb/db/query/fill/PreviousFill.java
@@ -19,7 +19,7 @@
 package org.apache.iotdb.db.query.fill;
 
 import java.io.IOException;
-import org.apache.iotdb.db.engine.querycontext.QueryDataSource;
+import org.apache.iotdb.db.exception.FileNodeManagerException;
 import org.apache.iotdb.db.query.context.QueryContext;
 import org.apache.iotdb.db.query.reader.IPointReader;
 import org.apache.iotdb.db.utils.TimeValuePair;
@@ -45,9 +45,9 @@ public class PreviousFill extends IFill {
   }
 
   @Override
-  public void constructReaders(QueryDataSource queryDataSource, QueryContext context)
-      throws IOException {
-    super.constructReaders(queryDataSource, context, beforeRange);
+  public void constructReaders(Path path, QueryContext context)
+      throws IOException, FileNodeManagerException {
+    super.constructReaders(path, context, beforeRange);
   }
 
   public long getBeforeRange() {
diff --git a/iotdb/src/main/java/org/apache/iotdb/db/query/reader/sequence/SequenceDataReaderV2.java b/iotdb/src/main/java/org/apache/iotdb/db/query/reader/sequence/SequenceDataReaderV2.java
index f785e30..51c7718 100644
--- a/iotdb/src/main/java/org/apache/iotdb/db/query/reader/sequence/SequenceDataReaderV2.java
+++ b/iotdb/src/main/java/org/apache/iotdb/db/query/reader/sequence/SequenceDataReaderV2.java
@@ -18,6 +18,9 @@
  */
 package org.apache.iotdb.db.query.reader.sequence;
 
+import java.io.IOException;
+import java.util.Collections;
+import java.util.List;
 import org.apache.iotdb.db.engine.filenodeV2.TsFileResourceV2;
 import org.apache.iotdb.db.engine.modification.Modification;
 import org.apache.iotdb.db.query.context.QueryContext;
@@ -36,10 +39,6 @@ import org.apache.iotdb.tsfile.read.reader.series.FileSeriesReader;
 import org.apache.iotdb.tsfile.read.reader.series.FileSeriesReaderWithFilter;
 import org.apache.iotdb.tsfile.read.reader.series.FileSeriesReaderWithoutFilter;
 
-import java.io.IOException;
-import java.util.Collections;
-import java.util.List;
-
 /**
  * batch reader of data in: 1) sealed tsfile. 2) unsealed tsfile, which include data in disk of
  * unsealed file and in memtables that will be flushing to unsealed tsfile.
@@ -62,7 +61,8 @@ public class SequenceDataReaderV2 extends IterateReader {
    * @param isReverse true-traverse chunks from behind forward, false-traverse chunks from front to
    * back.
    */
-  public SequenceDataReaderV2(Path seriesPath, List<TsFileResourceV2> seqResources, Filter timeFilter, QueryContext context, boolean isReverse) throws IOException {
+  public SequenceDataReaderV2(Path seriesPath, List<TsFileResourceV2> seqResources,
+      Filter timeFilter, QueryContext context, boolean isReverse) throws IOException {
     super();
     this.seriesPath = seriesPath;
     this.enableReverse = isReverse;
@@ -83,7 +83,8 @@ public class SequenceDataReaderV2 extends IterateReader {
   /**
    * traverse chunks from front to back.
    */
-  public SequenceDataReaderV2(Path seriesPath, List<TsFileResourceV2> seqResources, Filter timeFilter, QueryContext context) throws IOException {
+  public SequenceDataReaderV2(Path seriesPath, List<TsFileResourceV2> seqResources,
+      Filter timeFilter, QueryContext context) throws IOException {
     this(seriesPath, seqResources, timeFilter, context, false);
   }
 
diff --git a/iotdb/src/main/java/org/apache/iotdb/db/query/timegenerator/AbstractNodeConstructor.java b/iotdb/src/main/java/org/apache/iotdb/db/query/timegenerator/AbstractNodeConstructor.java
index 5d83314..a320df3 100644
--- a/iotdb/src/main/java/org/apache/iotdb/db/query/timegenerator/AbstractNodeConstructor.java
+++ b/iotdb/src/main/java/org/apache/iotdb/db/query/timegenerator/AbstractNodeConstructor.java
@@ -22,20 +22,11 @@ import static org.apache.iotdb.tsfile.read.expression.ExpressionType.AND;
 import static org.apache.iotdb.tsfile.read.expression.ExpressionType.OR;
 
 import java.io.IOException;
-import org.apache.iotdb.db.engine.querycontext.QueryDataSource;
 import org.apache.iotdb.db.exception.FileNodeManagerException;
 import org.apache.iotdb.db.query.context.QueryContext;
-import org.apache.iotdb.db.query.control.QueryResourceManager;
-import org.apache.iotdb.db.query.factory.SeriesReaderFactory;
-import org.apache.iotdb.db.query.reader.AllDataReader;
-import org.apache.iotdb.db.query.reader.IReader;
-import org.apache.iotdb.db.query.reader.merge.PriorityMergeReader;
-import org.apache.iotdb.db.query.reader.sequence.SequenceDataReader;
 import org.apache.iotdb.tsfile.exception.write.UnSupportedDataTypeException;
 import org.apache.iotdb.tsfile.read.expression.IBinaryExpression;
 import org.apache.iotdb.tsfile.read.expression.IExpression;
-import org.apache.iotdb.tsfile.read.expression.impl.SingleSeriesExpression;
-import org.apache.iotdb.tsfile.read.filter.basic.Filter;
 import org.apache.iotdb.tsfile.read.query.timegenerator.node.AndNode;
 import org.apache.iotdb.tsfile.read.query.timegenerator.node.Node;
 import org.apache.iotdb.tsfile.read.query.timegenerator.node.OrNode;
@@ -81,29 +72,4 @@ public abstract class AbstractNodeConstructor {
     }
   }
 
-  protected IReader generateSeriesReader(SingleSeriesExpression singleSeriesExpression,
-      QueryContext context)
-      throws IOException, FileNodeManagerException {
-
-    QueryDataSource queryDataSource = QueryResourceManager.getInstance().getQueryDataSource(
-        singleSeriesExpression.getSeriesPath(), context);
-
-    Filter filter = singleSeriesExpression.getFilter();
-
-    // reader for all sequence data
-    SequenceDataReader tsFilesReader = new SequenceDataReader(queryDataSource.getSeqDataSource(),
-        filter, context);
-
-    // reader for all unSequence data
-    PriorityMergeReader unSeqMergeReader = SeriesReaderFactory.getInstance()
-        .createUnSeqMergeReader(queryDataSource.getOverflowSeriesDataSource(), filter);
-
-    if (!tsFilesReader.hasNext()) {
-      //only have unsequence data.
-      return unSeqMergeReader;
-    } else {
-      //merge sequence data with unsequence data.
-      return new AllDataReader(tsFilesReader, unSeqMergeReader);
-    }
-  }
 }
diff --git a/iotdb/src/main/java/org/apache/iotdb/db/query/timegenerator/EngineNodeConstructor.java b/iotdb/src/main/java/org/apache/iotdb/db/query/timegenerator/EngineNodeConstructor.java
index 45e6ac6..cc68ec2 100644
--- a/iotdb/src/main/java/org/apache/iotdb/db/query/timegenerator/EngineNodeConstructor.java
+++ b/iotdb/src/main/java/org/apache/iotdb/db/query/timegenerator/EngineNodeConstructor.java
@@ -24,8 +24,11 @@ import static org.apache.iotdb.tsfile.read.expression.ExpressionType.SERIES;
 import java.io.IOException;
 import org.apache.iotdb.db.exception.FileNodeManagerException;
 import org.apache.iotdb.db.query.context.QueryContext;
+import org.apache.iotdb.db.query.factory.SeriesReaderFactoryImpl;
+import org.apache.iotdb.tsfile.read.common.Path;
 import org.apache.iotdb.tsfile.read.expression.IExpression;
 import org.apache.iotdb.tsfile.read.expression.impl.SingleSeriesExpression;
+import org.apache.iotdb.tsfile.read.filter.basic.Filter;
 import org.apache.iotdb.tsfile.read.query.timegenerator.node.Node;
 
 public class EngineNodeConstructor extends AbstractNodeConstructor {
@@ -38,7 +41,6 @@ public class EngineNodeConstructor extends AbstractNodeConstructor {
    *
    * @param expression expression
    * @return Node object
-   * @throws IOException IOException
    * @throws FileNodeManagerException FileNodeManagerException
    */
   @Override
@@ -46,8 +48,10 @@ public class EngineNodeConstructor extends AbstractNodeConstructor {
       throws FileNodeManagerException {
     if (expression.getType() == SERIES) {
       try {
-        return new EngineLeafNode(generateSeriesReader((SingleSeriesExpression) expression,
-            context));
+        Filter filter = ((SingleSeriesExpression) expression).getFilter();
+        Path path = ((SingleSeriesExpression) expression).getSeriesPath();
+        return new EngineLeafNode(
+            SeriesReaderFactoryImpl.getInstance().createAllDataReader(path, filter, context));
       } catch (IOException e) {
         throw new FileNodeManagerException(e);
       }