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

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


The following commit(s) were added to refs/heads/aggregate by this push:
     new 5636db0  fix sonarlint issues
     new 69b64c9  Merge branch 'aggregate' of 
https://github.com/apache/incubator-iotdb into aggregate
5636db0 is described below

commit 5636db0e47cae211f7ef8798fa57bb8bc95ca78f
Author: suyue <[email protected]>
AuthorDate: Thu Mar 28 20:43:50 2019 +0800

    fix sonarlint issues
---
 .../db/query/aggregation/AggreFuncFactory.java     |   3 +
 .../db/query/aggregation/impl/CountAggrFunc.java   |  44 ++---
 .../query/aggregation/impl/MaxValueAggrFunc.java   |  76 +++-----
 .../db/query/aggregation/impl/MeanAggrFunc.java    |  44 ++---
 .../query/aggregation/impl/MinValueAggrFunc.java   |  60 ++-----
 .../query/dataset/AggreResultDataPointReader.java  |   5 +-
 .../dataset/EngineDataSetWithoutTimeGenerator.java |   3 +
 .../db/query/executor/AggregateEngineExecutor.java |  16 +-
 .../iotdb/db/query/executor/EngineQueryRouter.java |   2 +-
 .../GroupByWithOnlyTimeFilterDataSetDataSet.java   | 192 ++++++++++++---------
 .../GroupByWithValueFilterDataSetDataSet.java      |  40 +++--
 .../java/org/apache/iotdb/db/query/fill/IFill.java |   4 +-
 .../org/apache/iotdb/db/query/fill/LinearFill.java |  18 +-
 .../apache/iotdb/db/query/fill/PreviousFill.java   |   2 +
 .../iotdb/db/query/reader/AllDataReader.java       | 108 ++++++------
 .../org/apache/iotdb/db/query/reader/IReader.java  |   5 +-
 .../query/reader/sequence/SealedTsFilesReader.java |   2 +-
 .../db/query/timegenerator/EngineLeafNode.java     |  10 --
 .../query/timegenerator/EngineTimeGenerator.java   |   4 +-
 .../apache/iotdb/db/integration/IOTDBFillIT.java   |  21 ++-
 20 files changed, 313 insertions(+), 346 deletions(-)

diff --git 
a/iotdb/src/main/java/org/apache/iotdb/db/query/aggregation/AggreFuncFactory.java
 
b/iotdb/src/main/java/org/apache/iotdb/db/query/aggregation/AggreFuncFactory.java
index 4906c49..c2d1883 100644
--- 
a/iotdb/src/main/java/org/apache/iotdb/db/query/aggregation/AggreFuncFactory.java
+++ 
b/iotdb/src/main/java/org/apache/iotdb/db/query/aggregation/AggreFuncFactory.java
@@ -37,6 +37,9 @@ import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
  */
 public class AggreFuncFactory {
 
+  private AggreFuncFactory() {
+  }
+
   /**
    * construct AggregateFunction using factory pattern.
    *
diff --git 
a/iotdb/src/main/java/org/apache/iotdb/db/query/aggregation/impl/CountAggrFunc.java
 
b/iotdb/src/main/java/org/apache/iotdb/db/query/aggregation/impl/CountAggrFunc.java
index af7ab04..e9ee8ff 100644
--- 
a/iotdb/src/main/java/org/apache/iotdb/db/query/aggregation/impl/CountAggrFunc.java
+++ 
b/iotdb/src/main/java/org/apache/iotdb/db/query/aggregation/impl/CountAggrFunc.java
@@ -66,53 +66,39 @@ public class CountAggrFunc extends AggregateFunction {
   @Override
   public void calculateValueFromPageData(BatchData dataInThisPage, 
IPointReader unsequenceReader)
       throws IOException {
-    while (dataInThisPage.hasNext() && unsequenceReader.hasNext()) {
-      if (dataInThisPage.currentTime() == 
unsequenceReader.current().getTimestamp()) {
-        dataInThisPage.next();
-        unsequenceReader.next();
-      } else if (dataInThisPage.currentTime() < 
unsequenceReader.current().getTimestamp()) {
-        dataInThisPage.next();
-      } else {
-        unsequenceReader.next();
-      }
-      long preValue = resultData.getLongRet();
-      preValue += 1;
-      resultData.setLongRet(preValue);
-    }
-
-    if (dataInThisPage.hasNext()) {
-      long preValue = resultData.getLongRet();
-      preValue += (dataInThisPage.length() - dataInThisPage.getCurIdx());
-      resultData.setLongRet(preValue);
-    }
+    calculateValueFromPageData(dataInThisPage, unsequenceReader, false, 0);
   }
 
   @Override
   public void calculateValueFromPageData(BatchData dataInThisPage, 
IPointReader unsequenceReader,
       long bound) throws IOException {
+    calculateValueFromPageData(dataInThisPage, unsequenceReader, true, bound);
+  }
+
+  private void calculateValueFromPageData(BatchData dataInThisPage, 
IPointReader unsequenceReader,
+      boolean hasBound, long bound) throws IOException {
     int cnt = 0;
     while (dataInThisPage.hasNext() && unsequenceReader.hasNext()) {
+      long minTimestamp = Math
+          .min(dataInThisPage.currentTime(), 
unsequenceReader.current().getTimestamp());
+      if (hasBound && minTimestamp >= bound) {
+        break;
+      }
       if (dataInThisPage.currentTime() == 
unsequenceReader.current().getTimestamp()) {
-        if (dataInThisPage.currentTime() >= bound) {
-          break;
-        }
         dataInThisPage.next();
         unsequenceReader.next();
       } else if (dataInThisPage.currentTime() < 
unsequenceReader.current().getTimestamp()) {
-        if (dataInThisPage.currentTime() >= bound) {
-          break;
-        }
         dataInThisPage.next();
       } else {
-        if (unsequenceReader.current().getTimestamp() >= bound) {
-          break;
-        }
         unsequenceReader.next();
       }
       cnt++;
     }
 
-    while (dataInThisPage.hasNext() && dataInThisPage.currentTime() < bound) {
+    while (dataInThisPage.hasNext()) {
+      if (hasBound && dataInThisPage.currentTime() >= bound) {
+        break;
+      }
       dataInThisPage.next();
       cnt++;
     }
diff --git 
a/iotdb/src/main/java/org/apache/iotdb/db/query/aggregation/impl/MaxValueAggrFunc.java
 
b/iotdb/src/main/java/org/apache/iotdb/db/query/aggregation/impl/MaxValueAggrFunc.java
index 6842649..73e287b 100644
--- 
a/iotdb/src/main/java/org/apache/iotdb/db/query/aggregation/impl/MaxValueAggrFunc.java
+++ 
b/iotdb/src/main/java/org/apache/iotdb/db/query/aggregation/impl/MaxValueAggrFunc.java
@@ -20,7 +20,6 @@
 package org.apache.iotdb.db.query.aggregation.impl;
 
 import java.io.IOException;
-import org.apache.iotdb.db.exception.ProcessorException;
 import org.apache.iotdb.db.query.aggregation.AggreResultData;
 import org.apache.iotdb.db.query.aggregation.AggregateFunction;
 import org.apache.iotdb.db.query.reader.IPointReader;
@@ -47,35 +46,32 @@ public class MaxValueAggrFunc extends AggregateFunction {
   }
 
   @Override
-  public void calculateValueFromPageHeader(PageHeader pageHeader) throws 
ProcessorException {
+  public void calculateValueFromPageHeader(PageHeader pageHeader) {
     Comparable<Object> maxVal = (Comparable<Object>) 
pageHeader.getStatistics().getMax();
     updateResult(maxVal);
   }
 
   @Override
   public void calculateValueFromPageData(BatchData dataInThisPage, 
IPointReader unsequenceReader)
-      throws IOException, ProcessorException {
+      throws IOException {
     Comparable<Object> maxVal = null;
+    Object tmpVal = null;
     while (dataInThisPage.hasNext() && unsequenceReader.hasNext()) {
       if (dataInThisPage.currentTime() < 
unsequenceReader.current().getTimestamp()) {
-        if (maxVal == null || maxVal.compareTo(dataInThisPage.currentValue()) 
< 0) {
-          maxVal = (Comparable<Object>) dataInThisPage.currentValue();
-        }
-        dataInThisPage.next();
-      } else if (dataInThisPage.currentTime() == 
unsequenceReader.current().getTimestamp()) {
-        if (maxVal == null
-            || 
maxVal.compareTo(unsequenceReader.current().getValue().getValue()) < 0) {
-          maxVal = (Comparable<Object>) 
unsequenceReader.current().getValue().getValue();
-        }
+        tmpVal = dataInThisPage.currentValue();
         dataInThisPage.next();
+      } else if (dataInThisPage.currentTime() > 
unsequenceReader.current().getTimestamp()) {
+        tmpVal = unsequenceReader.current().getValue().getValue();
         unsequenceReader.next();
       } else {
-        if (maxVal == null
-            || 
maxVal.compareTo(unsequenceReader.current().getValue().getValue()) < 0) {
-          maxVal = (Comparable<Object>) 
unsequenceReader.current().getValue().getValue();
-        }
+        tmpVal = unsequenceReader.current().getValue().getValue();
+        dataInThisPage.next();
         unsequenceReader.next();
       }
+
+      if (maxVal == null || maxVal.compareTo(tmpVal) < 0) {
+        maxVal = (Comparable<Object>) tmpVal;
+      }
     }
 
     while (dataInThisPage.hasNext()) {
@@ -89,51 +85,35 @@ public class MaxValueAggrFunc extends AggregateFunction {
 
   @Override
   public void calculateValueFromPageData(BatchData dataInThisPage, 
IPointReader unsequenceReader,
-      long bound) throws IOException, ProcessorException {
-    Comparable<Object> maxVal = null;
+      long bound) throws IOException {
+    Object tmpVal = null;
     while (dataInThisPage.hasNext() && unsequenceReader.hasNext()) {
-      if (dataInThisPage.currentTime() < 
unsequenceReader.current().getTimestamp()) {
-        if (dataInThisPage.currentTime() >= bound) {
-          break;
-        }
-        if (maxVal == null || maxVal.compareTo(dataInThisPage.currentValue()) 
< 0) {
-          maxVal = (Comparable<Object>) dataInThisPage.currentValue();
-        }
-        dataInThisPage.next();
-      } else if (dataInThisPage.currentTime() == 
unsequenceReader.current().getTimestamp()) {
-        if (dataInThisPage.currentTime() >= bound) {
-          break;
-        }
-        if (maxVal == null
-            || 
maxVal.compareTo(unsequenceReader.current().getValue().getValue()) < 0) {
-          maxVal = (Comparable<Object>) 
unsequenceReader.current().getValue().getValue();
-        }
+      long time = Math.min(dataInThisPage.currentTime(), 
unsequenceReader.current().getTimestamp());
+      if (time >= bound) {
+        break;
+      }
+
+      if (dataInThisPage.currentTime() == time) {
+        tmpVal = dataInThisPage.currentValue();
         dataInThisPage.next();
-        unsequenceReader.next();
-      } else {
-        if (unsequenceReader.current().getTimestamp() >= bound) {
-          break;
-        }
-        if (maxVal == null
-            || 
maxVal.compareTo(unsequenceReader.current().getValue().getValue()) < 0) {
-          maxVal = (Comparable<Object>) 
unsequenceReader.current().getValue().getValue();
-        }
+      }
+
+      if (unsequenceReader.current().getTimestamp() == time) {
+        tmpVal = unsequenceReader.current().getValue().getValue();
         unsequenceReader.next();
       }
+      updateResult((Comparable<Object>) tmpVal);
     }
 
     while (dataInThisPage.hasNext() && dataInThisPage.currentTime() < bound) {
-      if (maxVal == null || maxVal.compareTo(dataInThisPage.currentValue()) < 
0) {
-        maxVal = (Comparable<Object>) dataInThisPage.currentValue();
-      }
+      updateResult((Comparable<Object>) dataInThisPage.currentValue());
       dataInThisPage.next();
     }
-    updateResult(maxVal);
   }
 
   @Override
   public void calculateValueFromUnsequenceReader(IPointReader unsequenceReader)
-      throws IOException, ProcessorException {
+      throws IOException {
     Comparable<Object> maxVal = null;
     while (unsequenceReader.hasNext()) {
       if (maxVal == null
diff --git 
a/iotdb/src/main/java/org/apache/iotdb/db/query/aggregation/impl/MeanAggrFunc.java
 
b/iotdb/src/main/java/org/apache/iotdb/db/query/aggregation/impl/MeanAggrFunc.java
index 8de0404..60292b9 100644
--- 
a/iotdb/src/main/java/org/apache/iotdb/db/query/aggregation/impl/MeanAggrFunc.java
+++ 
b/iotdb/src/main/java/org/apache/iotdb/db/query/aggregation/impl/MeanAggrFunc.java
@@ -66,57 +66,41 @@ public class MeanAggrFunc extends AggregateFunction {
   @Override
   public void calculateValueFromPageData(BatchData dataInThisPage, 
IPointReader unsequenceReader)
       throws IOException {
-    while (dataInThisPage.hasNext() && unsequenceReader.hasNext()) {
-      Object sumVal = null;
-      if (dataInThisPage.currentTime() < 
unsequenceReader.current().getTimestamp()) {
-        sumVal = dataInThisPage.currentValue();
-        dataInThisPage.next();
-      } else if (dataInThisPage.currentTime() == 
unsequenceReader.current().getTimestamp()) {
-        sumVal = unsequenceReader.current().getValue().getValue();
-        dataInThisPage.next();
-        unsequenceReader.next();
-      } else {
-        sumVal = unsequenceReader.current().getValue().getValue();
-        unsequenceReader.next();
-      }
-      updateMean(seriesDataType, sumVal);
-    }
-
-    while (dataInThisPage.hasNext()) {
-      updateMean(seriesDataType, dataInThisPage.currentValue());
-      dataInThisPage.next();
-    }
+    calculateValueFromPageData(dataInThisPage, unsequenceReader, false, 0);
   }
 
   @Override
   public void calculateValueFromPageData(BatchData dataInThisPage, 
IPointReader unsequenceReader,
       long bound) throws IOException {
+    calculateValueFromPageData(dataInThisPage, unsequenceReader, true, bound);
+  }
+
+  private void calculateValueFromPageData(BatchData dataInThisPage, 
IPointReader unsequenceReader,
+      boolean hasBound, long bound) throws IOException {
     while (dataInThisPage.hasNext() && unsequenceReader.hasNext()) {
       Object sumVal = null;
+      long time = Math.min(dataInThisPage.currentTime(), 
unsequenceReader.current().getTimestamp());
+      if (hasBound && time >= bound) {
+        break;
+      }
       if (dataInThisPage.currentTime() < 
unsequenceReader.current().getTimestamp()) {
-        if (dataInThisPage.currentTime() >= bound) {
-          break;
-        }
         sumVal = dataInThisPage.currentValue();
         dataInThisPage.next();
       } else if (dataInThisPage.currentTime() == 
unsequenceReader.current().getTimestamp()) {
-        if (dataInThisPage.currentTime() >= bound) {
-          break;
-        }
         sumVal = unsequenceReader.current().getValue().getValue();
         dataInThisPage.next();
         unsequenceReader.next();
       } else {
-        if (unsequenceReader.current().getTimestamp() >= bound) {
-          break;
-        }
         sumVal = unsequenceReader.current().getValue().getValue();
         unsequenceReader.next();
       }
       updateMean(seriesDataType, sumVal);
     }
 
-    while (dataInThisPage.hasNext() && dataInThisPage.currentTime() < bound) {
+    while (dataInThisPage.hasNext()) {
+      if (hasBound && dataInThisPage.currentTime() >= bound) {
+        break;
+      }
       updateMean(seriesDataType, dataInThisPage.currentValue());
       dataInThisPage.next();
     }
diff --git 
a/iotdb/src/main/java/org/apache/iotdb/db/query/aggregation/impl/MinValueAggrFunc.java
 
b/iotdb/src/main/java/org/apache/iotdb/db/query/aggregation/impl/MinValueAggrFunc.java
index 179bf5f..04be1b0 100644
--- 
a/iotdb/src/main/java/org/apache/iotdb/db/query/aggregation/impl/MinValueAggrFunc.java
+++ 
b/iotdb/src/main/java/org/apache/iotdb/db/query/aggregation/impl/MinValueAggrFunc.java
@@ -54,29 +54,21 @@ public class MinValueAggrFunc extends AggregateFunction {
   @Override
   public void calculateValueFromPageData(BatchData dataInThisPage, 
IPointReader unsequenceReader)
       throws IOException {
-    Comparable<Object> minVal = null;
     while (dataInThisPage.hasNext() && unsequenceReader.hasNext()) {
       if (dataInThisPage.currentTime() < 
unsequenceReader.current().getTimestamp()) {
-        if (minVal == null || minVal.compareTo(dataInThisPage.currentValue()) 
> 0) {
-          minVal = (Comparable<Object>) dataInThisPage.currentValue();
-        }
+        updateResult((Comparable<Object>) dataInThisPage.currentValue());
         dataInThisPage.next();
       } else if (dataInThisPage.currentTime() == 
unsequenceReader.current().getTimestamp()) {
-        if (minVal == null
-            || 
minVal.compareTo(unsequenceReader.current().getValue().getValue()) > 0) {
-          minVal = (Comparable<Object>) 
unsequenceReader.current().getValue().getValue();
-        }
+        updateResult((Comparable<Object>) 
unsequenceReader.current().getValue().getValue());
         dataInThisPage.next();
         unsequenceReader.next();
       } else {
-        if (minVal == null
-            || 
minVal.compareTo(unsequenceReader.current().getValue().getValue()) > 0) {
-          minVal = (Comparable<Object>) 
unsequenceReader.current().getValue().getValue();
-        }
+        updateResult((Comparable<Object>) 
unsequenceReader.current().getValue().getValue());
         unsequenceReader.next();
       }
     }
 
+    Comparable<Object> minVal = null;
     while (dataInThisPage.hasNext()) {
       if (minVal == null
           || minVal.compareTo(dataInThisPage.currentValue()) > 0) {
@@ -90,46 +82,28 @@ public class MinValueAggrFunc extends AggregateFunction {
   @Override
   public void calculateValueFromPageData(BatchData dataInThisPage, 
IPointReader unsequenceReader,
       long bound) throws IOException {
-    Comparable<Object> minVal = null;
     while (dataInThisPage.hasNext() && unsequenceReader.hasNext()) {
-      if (dataInThisPage.currentTime() < 
unsequenceReader.current().getTimestamp()) {
-        if (dataInThisPage.currentTime() >= bound) {
-          break;
-        }
-        if (minVal == null || minVal.compareTo(dataInThisPage.currentValue()) 
> 0) {
-          minVal = (Comparable<Object>) dataInThisPage.currentValue();
-        }
-        dataInThisPage.next();
-      } else if (dataInThisPage.currentTime() == 
unsequenceReader.current().getTimestamp()) {
-        if (dataInThisPage.currentTime() >= bound) {
-          break;
-        }
-        if (minVal == null
-            || 
minVal.compareTo(unsequenceReader.current().getValue().getValue()) > 0) {
-          minVal = (Comparable<Object>) 
unsequenceReader.current().getValue().getValue();
-        }
+      long time = Math.min(dataInThisPage.currentTime(), 
unsequenceReader.current().getTimestamp());
+      if (time >= bound) {
+        break;
+      }
+
+      if (dataInThisPage.currentTime() == time) {
+        updateResult((Comparable<Object>) dataInThisPage.currentValue());
         dataInThisPage.next();
-        unsequenceReader.next();
-      } else {
-        if (unsequenceReader.current().getTimestamp() >= bound) {
-          break;
-        }
-        if (minVal == null
-            || 
minVal.compareTo(unsequenceReader.current().getValue().getValue()) > 0) {
-          minVal = (Comparable<Object>) 
unsequenceReader.current().getValue().getValue();
-        }
+      }
+
+      if (unsequenceReader.current().getTimestamp() == time) {
+        updateResult((Comparable<Object>) 
unsequenceReader.current().getValue().getValue());
         unsequenceReader.next();
       }
+
     }
 
     while (dataInThisPage.hasNext() && dataInThisPage.currentTime() < bound) {
-      if (minVal == null
-          || minVal.compareTo(dataInThisPage.currentValue()) > 0) {
-        minVal = (Comparable<Object>) dataInThisPage.currentValue();
-      }
+      updateResult((Comparable<Object>) dataInThisPage.currentValue());
       dataInThisPage.next();
     }
-    updateResult(minVal);
   }
 
   @Override
diff --git 
a/iotdb/src/main/java/org/apache/iotdb/db/query/dataset/AggreResultDataPointReader.java
 
b/iotdb/src/main/java/org/apache/iotdb/db/query/dataset/AggreResultDataPointReader.java
index ae04d86..c2edab0 100644
--- 
a/iotdb/src/main/java/org/apache/iotdb/db/query/dataset/AggreResultDataPointReader.java
+++ 
b/iotdb/src/main/java/org/apache/iotdb/db/query/dataset/AggreResultDataPointReader.java
@@ -42,12 +42,11 @@ public class AggreResultDataPointReader implements 
IPointReader {
 
   @Override
   public TimeValuePair current() {
-    TimeValuePair timeValuePair = 
TimeValuePairUtils.getCurrentTimeValuePair(aggreResultData);
-    return timeValuePair;
+    return TimeValuePairUtils.getCurrentTimeValuePair(aggreResultData);
   }
 
   @Override
   public void close() {
-    //batch data doesn't need to close.
+    // batch data doesn't need to close.
   }
 }
diff --git 
a/iotdb/src/main/java/org/apache/iotdb/db/query/dataset/EngineDataSetWithoutTimeGenerator.java
 
b/iotdb/src/main/java/org/apache/iotdb/db/query/dataset/EngineDataSetWithoutTimeGenerator.java
index 2ba993a..73fc71f 100644
--- 
a/iotdb/src/main/java/org/apache/iotdb/db/query/dataset/EngineDataSetWithoutTimeGenerator.java
+++ 
b/iotdb/src/main/java/org/apache/iotdb/db/query/dataset/EngineDataSetWithoutTimeGenerator.java
@@ -110,6 +110,9 @@ public class EngineDataSetWithoutTimeGenerator extends 
QueryDataSet {
   }
 
   private Field getField(TsPrimitiveType tsPrimitiveType, TSDataType dataType) 
{
+    if (tsPrimitiveType == null) {
+      return new Field(null);
+    }
     Field field = new Field(dataType);
     switch (dataType) {
       case INT32:
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 e15d86a..a21cc80 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
@@ -194,10 +194,8 @@ public class AggregateEngineExecutor {
     // cal unsequence data with timestamps between pages.
     function.calculateValueFromUnsequenceReader(unSequenceReader, minTime);
 
-    if (unSequenceReader.hasNext() && 
unSequenceReader.current().getTimestamp() <= maxTime) {
-      return false;
-    }
-    return true;
+    return !(unSequenceReader.hasNext() && 
unSequenceReader.current().getTimestamp() <= maxTime);
+
   }
 
   /**
@@ -212,7 +210,7 @@ public class AggregateEngineExecutor {
       SequenceDataReader sequenceReader, IPointReader unSequenceReader, Filter 
timeFilter)
       throws IOException, ProcessorException {
     long lastBatchTimeStamp = Long.MIN_VALUE;
-
+    boolean isChunkEnd = false;
     while (sequenceReader.hasNext()) {
       PageHeader pageHeader = sequenceReader.nextPageHeader();
       // judge if overlap with unsequence data
@@ -223,7 +221,7 @@ public class AggregateEngineExecutor {
 
         if (lastBatchTimeStamp > pageHeader.getMinTimestamp()) {
           // the chunk is end.
-          break;
+          isChunkEnd = true;
         } else {
           // current page and last page are in the same chunk.
           lastBatchTimeStamp = pageHeader.getMinTimestamp();
@@ -233,13 +231,15 @@ public class AggregateEngineExecutor {
         BatchData batchData = sequenceReader.nextBatch();
         if (lastBatchTimeStamp > batchData.currentTime()) {
           // the chunk is end.
-          break;
+          isChunkEnd = true;
         } else {
           // current page and last page are in the same chunk.
           lastBatchTimeStamp = batchData.currentTime();
         }
         function.calculateValueFromPageData(batchData, unSequenceReader);
-
+      }
+      if (isChunkEnd) {
+        break;
       }
     }
 
diff --git 
a/iotdb/src/main/java/org/apache/iotdb/db/query/executor/EngineQueryRouter.java 
b/iotdb/src/main/java/org/apache/iotdb/db/query/executor/EngineQueryRouter.java
index d41a690..2e3ce45 100644
--- 
a/iotdb/src/main/java/org/apache/iotdb/db/query/executor/EngineQueryRouter.java
+++ 
b/iotdb/src/main/java/org/apache/iotdb/db/query/executor/EngineQueryRouter.java
@@ -210,7 +210,7 @@ public class EngineQueryRouter {
    * @param fillType type IFill map
    */
   public QueryDataSet fill(List<Path> fillPaths, long queryTime, 
Map<TSDataType, IFill> fillType)
-      throws FileNodeManagerException, PathErrorException, IOException, 
ProcessorException {
+      throws FileNodeManagerException, PathErrorException, IOException {
     long nextJobId = getNextJobId();
     QueryTokenManager.getInstance().setJobIdForCurrentRequestThread(nextJobId);
     
OpenedFilePathsManager.getInstance().setJobIdForCurrentRequestThread(nextJobId);
diff --git 
a/iotdb/src/main/java/org/apache/iotdb/db/query/executor/groupby/GroupByWithOnlyTimeFilterDataSetDataSet.java
 
b/iotdb/src/main/java/org/apache/iotdb/db/query/executor/groupby/GroupByWithOnlyTimeFilterDataSetDataSet.java
index 963336f..d94aa0d 100644
--- 
a/iotdb/src/main/java/org/apache/iotdb/db/query/executor/groupby/GroupByWithOnlyTimeFilterDataSetDataSet.java
+++ 
b/iotdb/src/main/java/org/apache/iotdb/db/query/executor/groupby/GroupByWithOnlyTimeFilterDataSetDataSet.java
@@ -134,24 +134,12 @@ public class GroupByWithOnlyTimeFilterDataSetDataSet 
extends GroupByEngineDataSe
     IAggregateReader sequenceReader = sequenceReaderList.get(idx);
     AggregateFunction function = functions.get(idx);
     function.init();
-    boolean finishCheckSequenceData = false;
 
     // skip the points with timestamp less than startTime
     skipBeforeStartTimeData(idx, sequenceReader, unsequenceReader);
 
-    BatchData batchData = batchDataList.get(idx);
-    boolean hasCachedSequenceData = hasCachedSequenceDataList.get(idx);
-    // there was unprocessed data in last batch
-    if (hasCachedSequenceData && batchData.hasNext()) {
-      function.calculateValueFromPageData(batchData, unsequenceReader, 
endTime);
-    }
-
-    if (hasCachedSequenceData && batchData.hasNext()) {
-      finishCheckSequenceData = true;
-    } else {
-      hasCachedSequenceData = false;
-    }
-
+    // cal group by in batch data
+    boolean finishCheckSequenceData = calGroupByInBatchData(idx, function, 
unsequenceReader);
     if (finishCheckSequenceData) {
       // check unsequence data
       function.calculateValueFromUnsequenceReader(unsequenceReader, endTime);
@@ -164,45 +152,64 @@ public class GroupByWithOnlyTimeFilterDataSetDataSet 
extends GroupByEngineDataSe
 
       // memory data
       if (pageHeader == null) {
-        batchData = sequenceReader.nextBatch();
-        function.calculateValueFromPageData(batchData, unsequenceReader, 
endTime);
+        batchDataList.set(idx, sequenceReader.nextBatch());
+        hasCachedSequenceDataList.set(idx, true);
+        finishCheckSequenceData = calGroupByInBatchData(idx, function, 
unsequenceReader);
+      } else {
+        // page data
+        long minTime = pageHeader.getMinTimestamp();
+        long maxTime = pageHeader.getMaxTimestamp();
         // no point in sequence data with a timestamp less than endTime
-        if (batchData.hasNext()) {
-          hasCachedSequenceData = true;
-          break;
+        if (minTime >= endTime) {
+          finishCheckSequenceData = true;
+        } else if (canUseHeader(minTime, maxTime, unsequenceReader, function)) 
{
+          // cal using page header
+          function.calculateValueFromPageHeader(pageHeader);
+          sequenceReader.skipPageData();
+        } else {
+          // cal using page data
+          batchDataList.set(idx, sequenceReader.nextBatch());
+          hasCachedSequenceDataList.set(idx, true);
+          finishCheckSequenceData = calGroupByInBatchData(idx, function, 
unsequenceReader);
         }
-      }
-
-      // page data
-      long minTime = pageHeader.getMinTimestamp();
-      long maxTime = pageHeader.getMaxTimestamp();
-      // no point in sequence data with a timestamp less than endTime
-      if (minTime >= endTime) {
-        hasCachedSequenceData = true;
-        batchData = sequenceReader.nextBatch();
-        break;
-      }
 
-      if (canUseHeader(minTime, maxTime, unsequenceReader, function)) {
-        // cal using page header
-        function.calculateValueFromPageHeader(pageHeader);
-        sequenceReader.skipPageData();
-      } else {
-        // cal using page data
-        batchData = sequenceReader.nextBatch();
-        function.calculateValueFromPageData(batchData, unsequenceReader, 
endTime);
-        if (batchData.hasNext()) {
-          hasCachedSequenceData = true;
+        if (finishCheckSequenceData) {
           break;
         }
       }
+    }
+    // cal using unsequence data
+    function.calculateValueFromUnsequenceReader(unsequenceReader, endTime);
+    return function.getResult().deepCopy();
+  }
 
+  /**
+   * calculate groupBy's result in batch data.
+   *
+   * @param idx series index
+   * @param function aggregate function of the series
+   * @param unsequenceReader unsequence reader of the series
+   * @return if all sequential data been computed
+   */
+  private boolean calGroupByInBatchData(int idx, AggregateFunction function,
+      IPointReader unsequenceReader)
+      throws IOException, ProcessorException {
+    BatchData batchData = batchDataList.get(idx);
+    boolean hasCachedSequenceData = hasCachedSequenceDataList.get(idx);
+    boolean finishCheckSequenceData = false;
+    // there was unprocessed data in last batch
+    if (hasCachedSequenceData && batchData.hasNext()) {
+      function.calculateValueFromPageData(batchData, unsequenceReader, 
endTime);
     }
 
-    function.calculateValueFromUnsequenceReader(unsequenceReader, endTime);
-    hasCachedSequenceDataList.set(idx, hasCachedSequenceData);
+    if (hasCachedSequenceData && batchData.hasNext()) {
+      finishCheckSequenceData = true;
+    } else {
+      hasCachedSequenceData = false;
+    }
     batchDataList.set(idx, batchData);
-    return function.getResult().deepCopy();
+    hasCachedSequenceDataList.set(idx, hasCachedSequenceData);
+    return finishCheckSequenceData;
   }
 
   /**
@@ -216,23 +223,12 @@ public class GroupByWithOnlyTimeFilterDataSetDataSet 
extends GroupByEngineDataSe
   private void skipBeforeStartTimeData(int idx, IAggregateReader 
sequenceReader,
       IPointReader unsequenceReader)
       throws IOException {
-    BatchData batchData = batchDataList.get(idx);
-    boolean hasCachedSequenceData = hasCachedSequenceDataList.get(idx);
 
     // skip the unsequenceReader points with timestamp less than startTime
-    while (unsequenceReader.hasNext() && 
unsequenceReader.current().getTimestamp() < startTime) {
-      unsequenceReader.next();
-    }
+    skipPointInUnsequenceData(unsequenceReader);
 
     // skip the cached batch data points with timestamp less than startTime
-    if (hasCachedSequenceData) {
-      while (batchData.hasNext() && batchData.currentTime() < startTime) {
-        batchData.next();
-      }
-    }
-    if (hasCachedSequenceData && !batchData.hasNext()) {
-      hasCachedSequenceData = false;
-    } else {
+    if (skipPointInBatchData(idx)) {
       return;
     }
 
@@ -241,38 +237,67 @@ public class GroupByWithOnlyTimeFilterDataSetDataSet 
extends GroupByEngineDataSe
       PageHeader pageHeader = sequenceReader.nextPageHeader();
       // memory data
       if (pageHeader == null) {
-        batchData = sequenceReader.nextBatch();
-        hasCachedSequenceData = true;
-        while (batchData.hasNext() && batchData.currentTime() < startTime) {
-          batchData.next();
+        batchDataList.set(idx, sequenceReader.nextBatch());
+        hasCachedSequenceDataList.set(idx, true);
+        if (skipPointInBatchData(idx)) {
+          return;
         }
-        if (batchData.hasNext()) {
-          break;
-        } else {
-          hasCachedSequenceData = false;
+      } else {
+        // page data
+
+        // timestamps of all points in the page are less than startTime
+        if (pageHeader.getMaxTimestamp() < startTime) {
+          sequenceReader.skipPageData();
           continue;
+        } else if (pageHeader.getMinTimestamp() >= startTime) {
+          // timestamps of all points in the page are greater or equal to 
startTime, needn't to skip
+          return;
+        }
+        // the page has overlap with startTime
+        batchDataList.set(idx, sequenceReader.nextBatch());
+        hasCachedSequenceDataList.set(idx, true);
+        if (skipPointInBatchData(idx)) {
+          return;
         }
       }
-      // timestamps of all points in the page are less than startTime
-      if (pageHeader.getMaxTimestamp() < startTime) {
-        sequenceReader.skipPageData();
-        continue;
-      }
-      // timestamps of all points in the page are greater or equal to 
startTime, don't need to skip
-      if (pageHeader.getMinTimestamp() >= startTime) {
-        break;
-      }
-      // the page has overlap with startTime
-      batchData = sequenceReader.nextBatch();
-      hasCachedSequenceData = true;
-      while (batchData.hasNext() && batchData.currentTime() < startTime) {
-        batchData.next();
-      }
-      break;
     }
+  }
 
+  /**
+   * skip points in unsequence reader whose timestamp is less than startTime.
+   *
+   * @param unsequenceReader unsequence reader
+   */
+  private void skipPointInUnsequenceData(IPointReader unsequenceReader) throws 
IOException {
+    while (unsequenceReader.hasNext() && 
unsequenceReader.current().getTimestamp() < startTime) {
+      unsequenceReader.next();
+    }
+  }
+
+  /**
+   * skip points in batch data whose timestamp is less than startTime.
+   *
+   * @param idx series index
+   * @return whether has next in batch data
+   */
+  private boolean skipPointInBatchData(int idx) {
+    BatchData batchData = batchDataList.get(idx);
+    boolean hasCachedSequenceData = hasCachedSequenceDataList.get(idx);
+    if (!hasCachedSequenceData) {
+      return false;
+    }
+
+    // skip the cached batch data points with timestamp less than startTime
+    while (batchData.hasNext() && batchData.currentTime() < startTime) {
+      batchData.next();
+    }
     batchDataList.set(idx, batchData);
-    hasCachedSequenceDataList.set(idx, hasCachedSequenceData);
+    if (batchData.hasNext()) {
+      return true;
+    } else {
+      hasCachedSequenceDataList.set(idx, false);
+      return false;
+    }
   }
 
   private boolean canUseHeader(long minTime, long maxTime, IPointReader 
unSequenceReader,
@@ -285,9 +310,6 @@ public class GroupByWithOnlyTimeFilterDataSetDataSet 
extends GroupByEngineDataSe
     // cal unsequence data with timestamps between pages.
     function.calculateValueFromUnsequenceReader(unSequenceReader, minTime);
 
-    if (unSequenceReader.hasNext() && 
unSequenceReader.current().getTimestamp() <= maxTime) {
-      return false;
-    }
-    return true;
+    return !(unSequenceReader.hasNext() && 
unSequenceReader.current().getTimestamp() <= maxTime);
   }
 }
diff --git 
a/iotdb/src/main/java/org/apache/iotdb/db/query/executor/groupby/GroupByWithValueFilterDataSetDataSet.java
 
b/iotdb/src/main/java/org/apache/iotdb/db/query/executor/groupby/GroupByWithValueFilterDataSetDataSet.java
index 85fd8f8..d995737 100644
--- 
a/iotdb/src/main/java/org/apache/iotdb/db/query/executor/groupby/GroupByWithValueFilterDataSetDataSet.java
+++ 
b/iotdb/src/main/java/org/apache/iotdb/db/query/executor/groupby/GroupByWithValueFilterDataSetDataSet.java
@@ -103,21 +103,10 @@ public class GroupByWithValueFilterDataSetDataSet extends 
GroupByEngineDataSet {
     }
 
     while (timestampGenerator.hasNext()) {
-      // construct timestamp list
-      for (int cnt = 1; cnt < timeStampFetchSize; cnt++) {
-        if (!timestampGenerator.hasNext()) {
-          break;
-        }
-        timestamp = timestampGenerator.next();
-        if (timestamp < endTime) {
-          timestampArray[timeArrayLength++] = timestamp;
-        } else {
-          hasCachedTimestamp = true;
-          break;
-        }
-      }
+      // construct timestamp array
+      timeArrayLength = constructTimeArrayForOneCal(timestampArray, 
timeArrayLength);
 
-      // cal result using timestamp list
+      // cal result using timestamp array
       for (int i = 0; i < selectedSeries.size(); i++) {
         functions.get(i).calcAggregationUsingTimestamps(
             timestampArray, timeArrayLength, allDataReaderList.get(i));
@@ -132,7 +121,7 @@ public class GroupByWithValueFilterDataSetDataSet extends 
GroupByEngineDataSet {
     }
 
     if (timeArrayLength > 0) {
-      // cal result using timestamp list
+      // cal result using timestamp array
       for (int i = 0; i < selectedSeries.size(); i++) {
         functions.get(i).calcAggregationUsingTimestamps(
             timestampArray, timeArrayLength, allDataReaderList.get(i));
@@ -141,6 +130,27 @@ public class GroupByWithValueFilterDataSetDataSet extends 
GroupByEngineDataSet {
     return constructRowRecord();
   }
 
+  /**
+   * construct an array of timestamps for one batch of a group by partition 
calculating.
+   *
+   * @param timestampArray timestamp array
+   * @param timeArrayLength the current length of timestamp array
+   * @return time array length
+   */
+  private int constructTimeArrayForOneCal(long[] timestampArray, int 
timeArrayLength)
+      throws IOException {
+    for (int cnt = 1; cnt < timeStampFetchSize && 
timestampGenerator.hasNext(); cnt++) {
+      timestamp = timestampGenerator.next();
+      if (timestamp < endTime) {
+        timestampArray[timeArrayLength++] = timestamp;
+      } else {
+        hasCachedTimestamp = true;
+        break;
+      }
+    }
+    return timeArrayLength;
+  }
+
   private RowRecord constructRowRecord() {
     RowRecord record = new RowRecord(startTime);
     functions.forEach(function -> 
record.addField(getField(function.getResult())));
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 b74f6d0..d64b49a 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
@@ -82,7 +82,7 @@ public abstract class IFill {
   }
 
   private Filter constructFilter(long beforeRange) {
-    //If the fill time range is not set, beforeRange will be set to -1.
+    // if the fill time range is not set, beforeRange will be set to -1.
     if (beforeRange == -1) {
       return null;
     }
@@ -117,7 +117,7 @@ public abstract class IFill {
 
     @Override
     public void close() {
-
+      // no need to close
     }
   }
 }
\ No newline at end of file
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 b0f5ad3..dc46082 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
@@ -16,6 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
+
 package org.apache.iotdb.db.query.fill;
 
 import java.io.IOException;
@@ -92,28 +93,21 @@ public class LinearFill extends IFill {
       return new TimeValuePairPointReader(beforePair);
     }
 
-    if (afterPair == null && !allDataReader.hasNext()) {
-      return new TimeValuePairPointReader(null);
-    }
-    if (afterPair == null) {
-      afterPair = allDataReader.next();
-    }
-
     // if afterRange equals -1, this means that there is no time-bound filling.
     if (afterRange == -1) {
       return new TimeValuePairPointReader(average(beforePair, afterPair));
     }
 
-    if (afterPair.getTimestamp() > queryTime + afterRange) {
-      return new TimeValuePairPointReader(null);
+    if (afterPair.getTimestamp() > queryTime + afterRange || 
afterPair.getTimestamp() < queryTime) {
+      return new TimeValuePairPointReader(new TimeValuePair(queryTime, null));
     }
     return new TimeValuePairPointReader(average(beforePair, afterPair));
   }
 
   // returns the average of two points
   private TimeValuePair average(TimeValuePair beforePair, TimeValuePair 
afterPair) {
-    double totalTimeLength = afterPair.getTimestamp() - 
beforePair.getTimestamp();
-    double beforeTimeLength = queryTime - beforePair.getTimestamp();
+    double totalTimeLength = (double) afterPair.getTimestamp() - 
beforePair.getTimestamp();
+    double beforeTimeLength = (double) (queryTime - beforePair.getTimestamp());
     switch (dataType) {
       case INT32:
         int startIntValue = beforePair.getValue().getInt();
@@ -143,7 +137,7 @@ public class LinearFill extends IFill {
         double startDoubleValue = beforePair.getValue().getDouble();
         double endDoubleValue = afterPair.getValue().getDouble();
         double fillDoubleValue =
-            startDoubleValue + (double) ((endDoubleValue - startDoubleValue) / 
totalTimeLength
+            startDoubleValue + ((endDoubleValue - startDoubleValue) / 
totalTimeLength
                 * beforeTimeLength);
         beforePair.setValue(TsPrimitiveType.getByType(TSDataType.DOUBLE, 
fillDoubleValue));
         break;
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 19da79d..b75fb4f 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
@@ -69,6 +69,8 @@ public class PreviousFill extends IFill {
 
     if (beforePair != null) {
       beforePair.setTimestamp(queryTime);
+    } else {
+      beforePair = new TimeValuePair(queryTime, null);
     }
     return new TimeValuePairPointReader(beforePair);
   }
diff --git 
a/iotdb/src/main/java/org/apache/iotdb/db/query/reader/AllDataReader.java 
b/iotdb/src/main/java/org/apache/iotdb/db/query/reader/AllDataReader.java
index ff6cde3..6eaa4bb 100644
--- a/iotdb/src/main/java/org/apache/iotdb/db/query/reader/AllDataReader.java
+++ b/iotdb/src/main/java/org/apache/iotdb/db/query/reader/AllDataReader.java
@@ -44,72 +44,76 @@ public class AllDataReader implements IPointReader {
 
   @Override
   public boolean hasNext() throws IOException {
-    //has value in batchData
-    if (hasCachedBatchData && batchData.hasNext()) {
+    if (hasNextInBatchDataOrBatchReader()) {
       return true;
-    } else {
-      hasCachedBatchData = false;
     }
+    // has value in pointReader
+    return pointReader != null && pointReader.hasNext();
+  }
 
-    //has value in batchReader
-    while (batchReader.hasNext()) {
-      batchData = batchReader.nextBatch();
-      if (batchData.hasNext()) {
-        hasCachedBatchData = true;
-        return true;
+  @Override
+  public TimeValuePair next() throws IOException {
+
+    // has next in both batch reader and point reader
+    if (hasNextInBothReader()) {
+      long timeInPointReader = pointReader.current().getTimestamp();
+      long timeInBatchData = batchData.currentTime();
+      if (timeInPointReader > timeInBatchData) {
+        TimeValuePair timeValuePair = 
TimeValuePairUtils.getCurrentTimeValuePair(batchData);
+        batchData.next();
+        return timeValuePair;
+      } else if (timeInPointReader == timeInBatchData) {
+        batchData.next();
+        return pointReader.next();
+      } else {
+        return pointReader.next();
       }
     }
 
-    //has value in pointData
-    if (pointReader != null && pointReader.hasNext()) {
-      return true;
+    // only has next in batch reader
+    if (hasNextInBatchDataOrBatchReader()) {
+      TimeValuePair timeValuePair = 
TimeValuePairUtils.getCurrentTimeValuePair(batchData);
+      batchData.next();
+      return timeValuePair;
     }
 
-    return false;
+    // only has next in point reader
+    if (pointReader != null && pointReader.hasNext()) {
+      return pointReader.next();
+    }
+    return null;
   }
 
-  @Override
-  public TimeValuePair next() throws IOException {
-    //construct batchData, and compare with value in pointReader
-    while (hasCachedBatchData || batchReader.hasNext()) {
-      //if batchData isn't initialized, then initialize it
-      if (!hasCachedBatchData) {
-        if (batchReader.hasNext()) {
-          batchData = batchReader.nextBatch();
-          hasCachedBatchData = true;
-        } else {
-          hasCachedBatchData = false;
-          break;
-        }
-      }
+  /**
+   * judge if has next in both batch record and pointReader.
+   */
+  private boolean hasNextInBothReader() throws IOException {
+    if (!hasNextInBatchDataOrBatchReader()) {
+      return false;
+    }
+    return pointReader != null && pointReader.hasNext();
+  }
 
-      //if batchData is end, then jump to the entry of the while loop.
-      if (!batchData.hasNext()) {
-        hasCachedBatchData = false;
-        continue;
-      }
+  /**
+   * judge if has next in batch record, either in batch data or in batch 
reader.
+   */
+  private boolean hasNextInBatchDataOrBatchReader() throws IOException {
+    // has value in batchData
+    if (hasCachedBatchData && batchData.hasNext()) {
+      return true;
+    } else {
+      hasCachedBatchData = false;
+    }
 
-      //pointReader has next, compare value in pointReader with value in 
batchData.
-      if (pointReader != null && pointReader.hasNext()) {
-        long timeInPointReader = pointReader.current().getTimestamp();
-        long timeInBatchData = batchData.currentTime();
-        if (timeInPointReader > timeInBatchData) {
-          TimeValuePair timeValuePair = 
TimeValuePairUtils.getCurrentTimeValuePair(batchData);
-          batchData.next();
-          return timeValuePair;
-        }
-        if (timeInPointReader == timeInBatchData) {
-          batchData.next();
-        }
-        return pointReader.next();
-      } else {
-        // pointReader doesn't have next time-value pair, return pair in 
batchData.
-        TimeValuePair timeValuePair = 
TimeValuePairUtils.getCurrentTimeValuePair(batchData);
-        batchData.next();
-        return timeValuePair;
+    // has value in batchReader
+    while (batchReader.hasNext()) {
+      batchData = batchReader.nextBatch();
+      if (batchData.hasNext()) {
+        hasCachedBatchData = true;
+        return true;
       }
     }
-    return null;
+    return false;
   }
 
   @Override
diff --git a/iotdb/src/main/java/org/apache/iotdb/db/query/reader/IReader.java 
b/iotdb/src/main/java/org/apache/iotdb/db/query/reader/IReader.java
index bdb8d32..2982a97 100644
--- a/iotdb/src/main/java/org/apache/iotdb/db/query/reader/IReader.java
+++ b/iotdb/src/main/java/org/apache/iotdb/db/query/reader/IReader.java
@@ -21,11 +21,10 @@ package org.apache.iotdb.db.query.reader;
 
 import java.io.IOException;
 import org.apache.iotdb.db.utils.TimeValuePair;
-import org.apache.iotdb.tsfile.read.common.BatchData;
 
 /**
- * Vital read interface. Batch method is used to increase query speed. Getting 
a batch of data
- * a time is faster than getting one point a time.
+ * Vital read interface. Batch method is used to increase query speed. Getting 
a batch of data a
+ * time is faster than getting one point a time.
  */
 public interface IReader {
 
diff --git 
a/iotdb/src/main/java/org/apache/iotdb/db/query/reader/sequence/SealedTsFilesReader.java
 
b/iotdb/src/main/java/org/apache/iotdb/db/query/reader/sequence/SealedTsFilesReader.java
index 4a4af4a..9d60a76 100644
--- 
a/iotdb/src/main/java/org/apache/iotdb/db/query/reader/sequence/SealedTsFilesReader.java
+++ 
b/iotdb/src/main/java/org/apache/iotdb/db/query/reader/sequence/SealedTsFilesReader.java
@@ -142,7 +142,7 @@ public class SealedTsFilesReader implements IBatchReader, 
IAggregateReader {
 
     List<Modification> pathModifications = 
context.getPathModifications(fileNode.getModFile(),
         seriesPath.getFullPath());
-    if (pathModifications.size() > 0) {
+    if (!pathModifications.isEmpty()) {
       QueryUtils.modifyChunkMetaData(metaDataList, pathModifications);
     }
 
diff --git 
a/iotdb/src/main/java/org/apache/iotdb/db/query/timegenerator/EngineLeafNode.java
 
b/iotdb/src/main/java/org/apache/iotdb/db/query/timegenerator/EngineLeafNode.java
index 688e296..3d4b11c 100644
--- 
a/iotdb/src/main/java/org/apache/iotdb/db/query/timegenerator/EngineLeafNode.java
+++ 
b/iotdb/src/main/java/org/apache/iotdb/db/query/timegenerator/EngineLeafNode.java
@@ -45,16 +45,6 @@ public class EngineLeafNode implements Node {
     return reader.next().getTimestamp();
   }
 
-//  /**
-//   * check if current time of current batch is equals to input time.
-//   */
-//  public boolean currentTimeIs(long time) {
-//    if (!reader.currentBatch().hasNext()) {
-//      return false;
-//    }
-//    return reader.currentBatch().currentTime() == time;
-//  }
-
   /**
    * check if current value is equals to input value.
    */
diff --git 
a/iotdb/src/main/java/org/apache/iotdb/db/query/timegenerator/EngineTimeGenerator.java
 
b/iotdb/src/main/java/org/apache/iotdb/db/query/timegenerator/EngineTimeGenerator.java
index a151677..897a7d1 100644
--- 
a/iotdb/src/main/java/org/apache/iotdb/db/query/timegenerator/EngineTimeGenerator.java
+++ 
b/iotdb/src/main/java/org/apache/iotdb/db/query/timegenerator/EngineTimeGenerator.java
@@ -40,13 +40,13 @@ public class EngineTimeGenerator implements TimeGenerator {
    * Constructor of EngineTimeGenerator.
    */
   public EngineTimeGenerator(long jobId, IExpression expression, QueryContext 
context)
-      throws IOException, FileNodeManagerException {
+      throws FileNodeManagerException {
     this.jobId = jobId;
     this.expression = expression;
     initNode(context);
   }
 
-  private void initNode(QueryContext context) throws IOException, 
FileNodeManagerException {
+  private void initNode(QueryContext context) throws FileNodeManagerException {
     EngineNodeConstructor engineNodeConstructor = new 
EngineNodeConstructor(jobId);
     this.operatorNode = engineNodeConstructor.construct(expression, context);
   }
diff --git 
a/iotdb/src/test/java/org/apache/iotdb/db/integration/IOTDBFillIT.java 
b/iotdb/src/test/java/org/apache/iotdb/db/integration/IOTDBFillIT.java
index b4a76de..261cc17 100644
--- a/iotdb/src/test/java/org/apache/iotdb/db/integration/IOTDBFillIT.java
+++ b/iotdb/src/test/java/org/apache/iotdb/db/integration/IOTDBFillIT.java
@@ -125,7 +125,8 @@ public class IOTDBFillIT {
     String[] retArray1 = new String[]{
         "3,3.3,false,33",
         "70,70.34,false,374",
-        "70,null,null,null"
+        "70,null,null,null",
+        "625,null,false,null"
     };
     Connection connection = null;
     try {
@@ -142,6 +143,7 @@ public class IOTDBFillIT {
       while (resultSet.next()) {
         String ans = resultSet.getString(TIMESTAMP_STR) + "," + 
resultSet.getString(TEMPERATURE_STR)
             + "," + resultSet.getString(STATUS_STR) + "," + 
resultSet.getString(HARDWARE_STR);
+        System.out.println(ans);
         Assert.assertEquals(retArray1[cnt], ans);
         cnt++;
       }
@@ -179,6 +181,21 @@ public class IOTDBFillIT {
       }
       statement.close();
 
+      statement = connection.createStatement();
+      hasResultSet = statement.execute("select temperature,status, hardware "
+          + "from root.ln.wf01.wt01 where time = 625 "
+          + "Fill(int32[linear, 25ms, 25ms], double[linear, 25ms, 25ms], 
boolean[previous, 5ms])");
+
+      Assert.assertTrue(hasResultSet);
+      resultSet = statement.getResultSet();
+      while (resultSet.next()) {
+        String ans = resultSet.getString(TIMESTAMP_STR) + "," + 
resultSet.getString(TEMPERATURE_STR)
+            + "," + resultSet.getString(STATUS_STR) + "," + 
resultSet.getString(HARDWARE_STR);
+        System.out.println(cnt + " " + ans);
+        Assert.assertEquals(retArray1[cnt], ans);
+        cnt++;
+      }
+      statement.close();
     } catch (Exception e) {
       e.printStackTrace();
       fail(e.getMessage());
@@ -247,7 +264,7 @@ public class IOTDBFillIT {
         System.out.println(ans);
       }
       statement.close();
-
+      Assert.assertEquals(retArray1.length, cnt);
     } catch (Exception e) {
       e.printStackTrace();
       fail(e.getMessage());

Reply via email to