JackieTien97 commented on a change in pull request #1651:
URL: https://github.com/apache/incubator-iotdb/pull/1651#discussion_r477269148



##########
File path: 
server/src/main/java/org/apache/iotdb/db/query/timegenerator/ServerTimeGenerator.java
##########
@@ -65,19 +67,42 @@ public ServerTimeGenerator(IExpression expression, 
QueryContext context, RawData
   @Override
   protected IBatchReader generateNewBatchReader(SingleSeriesExpression 
expression)
       throws IOException {
-    Filter filter = expression.getFilter();
+    Filter valueFilter = expression.getFilter();
     Path path = expression.getSeriesPath();
     TSDataType dataType;
     QueryDataSource queryDataSource;
     try {
       dataType = IoTDB.metaManager.getSeriesType(path.getFullPath());
-      queryDataSource = 
QueryResourceManager.getInstance().getQueryDataSource(path, context, filter);
-      // update filter by TTL
-      filter = queryDataSource.updateFilterUsingTTL(filter);
+      queryDataSource = 
QueryResourceManager.getInstance().getQueryDataSource(path, context, 
valueFilter);
+      // update valueFilter by TTL
+      valueFilter = queryDataSource.updateFilterUsingTTL(valueFilter);
     } catch (Exception e) {
       throw new IOException(e);
     }
 
-    return new SeriesRawDataBatchReader(path, 
queryPlan.getAllMeasurementsInDevice(path.getDevice()), dataType, context, 
queryDataSource, null, filter, null);
+    // get the TimeFilter part in SingleSeriesExpression
+    Filter timeFilter = getTimeFilter(valueFilter);
+
+    return new SeriesRawDataBatchReader(path, 
queryPlan.getAllMeasurementsInDevice(path.getDevice()), dataType, context, 
queryDataSource, timeFilter, valueFilter, null);
+  }
+
+  /**
+   * extract time filter from a value filter
+   */
+  private Filter getTimeFilter(Filter filter) {
+    if (filter instanceof UnaryFilter && ((UnaryFilter) 
filter).getFilterType() == FilterType.TIME_FILTER) {
+      return filter;
+    }
+    if (filter instanceof AndFilter) {
+      Filter leftTimeFilter = getTimeFilter(((AndFilter) filter).getLeft());
+      Filter rightTimeFilter = getTimeFilter(((AndFilter) filter).getRight());
+      if (leftTimeFilter != null && rightTimeFilter != null) {
+        return filter;
+      } else if (leftTimeFilter != null) {
+        return leftTimeFilter;
+      } else

Review comment:
       fix




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


Reply via email to