This is an automated email from the ASF dual-hosted git repository.
liudw pushed a commit to branch reverse_reader
in repository https://gitbox.apache.org/repos/asf/incubator-iotdb.git
The following commit(s) were added to refs/heads/reverse_reader by this push:
new 213747b add g4 orderByTimeClause
213747b is described below
commit 213747ba42cd225e4556bc7a242c3d781b972900
Author: liudw <[email protected]>
AuthorDate: Fri Aug 21 15:34:48 2020 +0800
add g4 orderByTimeClause
---
.../org/apache/iotdb/db/qp/strategy/SqlBase.g4 | 16 +++++++
.../iotdb/db/qp/logical/crud/QueryOperator.java | 20 ++++++++
.../iotdb/db/qp/physical/crud/QueryPlan.java | 10 ++++
.../iotdb/db/qp/strategy/LogicalGenerator.java | 13 +++++
.../iotdb/db/qp/strategy/PhysicalGenerator.java | 1 +
.../groupby/GroupByWithoutValueFilterDataSet.java | 38 ++++++++-------
.../dataset/groupby/LocalGroupByExecutor.java | 4 +-
.../db/query/executor/AggregationExecutor.java | 55 ++++++++++++++--------
.../iotdb/db/query/executor/fill/LinearFill.java | 8 ++--
.../query/reader/series/SeriesAggregateReader.java | 6 +--
.../reader/series/SeriesAggregateReaderTest.java | 5 +-
11 files changed, 128 insertions(+), 48 deletions(-)
diff --git a/antlr/src/main/antlr4/org/apache/iotdb/db/qp/strategy/SqlBase.g4
b/antlr/src/main/antlr4/org/apache/iotdb/db/qp/strategy/SqlBase.g4
index 7a49244..68fc548 100644
--- a/antlr/src/main/antlr4/org/apache/iotdb/db/qp/strategy/SqlBase.g4
+++ b/antlr/src/main/antlr4/org/apache/iotdb/db/qp/strategy/SqlBase.g4
@@ -209,6 +209,7 @@ specialClause
: specialLimit
| groupByTimeClause specialLimit?
| groupByFillClause specialLimit?
+ | orderByTimeClause ?
| fillClause slimitClause? alignByDeviceClauseOrDisableAlign?
| alignByDeviceClauseOrDisableAlign
| groupByLevelClause specialLimit?
@@ -220,6 +221,11 @@ specialLimit
| alignByDeviceClauseOrDisableAlign
;
+orderByTimeClause
+ : ORDER BY TIME (DESC | ASC)
+ ;
+
+
limitClause
: LIMIT INT offsetClause?
| offsetClause? LIMIT INT
@@ -689,6 +695,10 @@ TO
: T O
;
+ORDER
+ : O R D E R
+ ;
+
BY
: B Y
;
@@ -1143,6 +1153,12 @@ SCHEMA
: S C H E M A
;
+DESC
+ : D E S C
+ ;
+ASC
+ : A S C
+ ;
//============================
// End of the keywords list
//============================
diff --git
a/server/src/main/java/org/apache/iotdb/db/qp/logical/crud/QueryOperator.java
b/server/src/main/java/org/apache/iotdb/db/qp/logical/crud/QueryOperator.java
index 1166592..c6bde39 100644
---
a/server/src/main/java/org/apache/iotdb/db/qp/logical/crud/QueryOperator.java
+++
b/server/src/main/java/org/apache/iotdb/db/qp/logical/crud/QueryOperator.java
@@ -53,6 +53,10 @@ public class QueryOperator extends SFWOperator {
private boolean isAlignByDevice = false;
private boolean isAlignByTime = true;
+ private String column;
+
+ private boolean ascending;
+
public QueryOperator(int tokenIntType) {
super(tokenIntType);
operatorType = Operator.OperatorType.QUERY;
@@ -193,4 +197,20 @@ public class QueryOperator extends SFWOperator {
public void setGroupByTime(boolean groupByTime) {
isGroupByTime = groupByTime;
}
+
+ public String getColumn() {
+ return column;
+ }
+
+ public void setColumn(String column) {
+ this.column = column;
+ }
+
+ public boolean isAscending() {
+ return ascending;
+ }
+
+ public void setAscending(boolean ascending) {
+ this.ascending = ascending;
+ }
}
diff --git
a/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/QueryPlan.java
b/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/QueryPlan.java
index 58b4c13..8aa9773 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/QueryPlan.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/QueryPlan.java
@@ -36,6 +36,8 @@ public abstract class QueryPlan extends PhysicalPlan {
private int rowLimit = 0;
private int rowOffset = 0;
+ private boolean ascending;
+
private Map<String, Integer> pathToIndex = new HashMap<>();
public QueryPlan() {
@@ -99,4 +101,12 @@ public abstract class QueryPlan extends PhysicalPlan {
public Map<String, Integer> getPathToIndex() {
return pathToIndex;
}
+
+ public boolean isAscending() {
+ return ascending;
+ }
+
+ public void setAscending(boolean ascending) {
+ this.ascending = ascending;
+ }
}
diff --git
a/server/src/main/java/org/apache/iotdb/db/qp/strategy/LogicalGenerator.java
b/server/src/main/java/org/apache/iotdb/db/qp/strategy/LogicalGenerator.java
index 6ad6202..ec09ffb 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/strategy/LogicalGenerator.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/strategy/LogicalGenerator.java
@@ -126,6 +126,7 @@ import
org.apache.iotdb.db.qp.strategy.SqlBaseParser.NodeNameContext;
import
org.apache.iotdb.db.qp.strategy.SqlBaseParser.NodeNameWithoutStarContext;
import org.apache.iotdb.db.qp.strategy.SqlBaseParser.OffsetClauseContext;
import org.apache.iotdb.db.qp.strategy.SqlBaseParser.OrExpressionContext;
+import org.apache.iotdb.db.qp.strategy.SqlBaseParser.OrderByTimeClauseContext;
import org.apache.iotdb.db.qp.strategy.SqlBaseParser.PredicateContext;
import org.apache.iotdb.db.qp.strategy.SqlBaseParser.PrefixPathContext;
import org.apache.iotdb.db.qp.strategy.SqlBaseParser.PrivilegesContext;
@@ -1043,6 +1044,18 @@ public class LogicalGenerator extends
SqlBaseBaseListener {
}
@Override
+ public void enterOrderByTimeClause(OrderByTimeClauseContext ctx) {
+ super.enterOrderByTimeClause(ctx);
+ queryOp.setColumn(ctx.TIME().getText());
+ if (ctx.ASC() == null) {
+ queryOp.setAscending(false);
+ }
+ if (ctx.DESC() == null) {
+ queryOp.setAscending(true);
+ }
+ }
+
+ @Override
public void enterSlimitClause(SlimitClauseContext ctx) {
super.enterSlimitClause(ctx);
int slimit;
diff --git
a/server/src/main/java/org/apache/iotdb/db/qp/strategy/PhysicalGenerator.java
b/server/src/main/java/org/apache/iotdb/db/qp/strategy/PhysicalGenerator.java
index 64990b7..1c86630 100644
---
a/server/src/main/java/org/apache/iotdb/db/qp/strategy/PhysicalGenerator.java
+++
b/server/src/main/java/org/apache/iotdb/db/qp/strategy/PhysicalGenerator.java
@@ -578,6 +578,7 @@ public class PhysicalGenerator {
queryPlan.setRowLimit(queryOperator.getRowLimit());
queryPlan.setRowOffset(queryOperator.getRowOffset());
+ queryPlan.setAscending(queryOperator.isAscending());
return queryPlan;
}
diff --git
a/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/GroupByWithoutValueFilterDataSet.java
b/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/GroupByWithoutValueFilterDataSet.java
index 25db91a..a2635f1 100644
---
a/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/GroupByWithoutValueFilterDataSet.java
+++
b/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/GroupByWithoutValueFilterDataSet.java
@@ -42,20 +42,18 @@ import java.util.Map.Entry;
public class GroupByWithoutValueFilterDataSet extends GroupByEngineDataSet {
private static final Logger logger = LoggerFactory
- .getLogger(GroupByWithoutValueFilterDataSet.class);
+ .getLogger(GroupByWithoutValueFilterDataSet.class);
private Map<Path, GroupByExecutor> pathExecutors = new HashMap<>();
/**
* path -> result index for each aggregation
- *
+ * <p>
* e.g.,
- *
- * deduplicated paths : s1, s2, s1
- * deduplicated aggregations : count, count, sum
- *
- * s1 -> 0, 2
- * s2 -> 1
+ * <p>
+ * deduplicated paths : s1, s2, s1 deduplicated aggregations : count, count,
sum
+ * <p>
+ * s1 -> 0, 2 s2 -> 1
*/
private Map<Path, List<Integer>> resultIndexes = new HashMap<>();
@@ -66,14 +64,14 @@ public class GroupByWithoutValueFilterDataSet extends
GroupByEngineDataSet {
* constructor.
*/
public GroupByWithoutValueFilterDataSet(QueryContext context,
GroupByTimePlan groupByTimePlan)
- throws StorageEngineException, QueryProcessException {
+ throws StorageEngineException, QueryProcessException {
super(context, groupByTimePlan);
initGroupBy(context, groupByTimePlan);
}
protected void initGroupBy(QueryContext context, GroupByTimePlan
groupByTimePlan)
- throws StorageEngineException, QueryProcessException {
+ throws StorageEngineException, QueryProcessException {
IExpression expression = groupByTimePlan.getExpression();
Filter timeFilter = null;
@@ -87,12 +85,14 @@ public class GroupByWithoutValueFilterDataSet extends
GroupByEngineDataSet {
if (!pathExecutors.containsKey(path)) {
//init GroupByExecutor
pathExecutors.put(path,
- getGroupByExecutor(path,
groupByTimePlan.getAllMeasurementsInDevice(path.getDevice()), dataTypes.get(i),
context, timeFilter, null));
+ getGroupByExecutor(path,
groupByTimePlan.getAllMeasurementsInDevice(path.getDevice()),
+ dataTypes.get(i), context, timeFilter, null,
groupByTimePlan.isAlignByTime()));
resultIndexes.put(path, new ArrayList<>());
}
resultIndexes.get(path).add(i);
AggregateResult aggrResult = AggregateResultFactory
-
.getAggrResultByName(groupByTimePlan.getDeduplicatedAggregations().get(i),
dataTypes.get(i));
+
.getAggrResultByName(groupByTimePlan.getDeduplicatedAggregations().get(i),
+ dataTypes.get(i));
pathExecutors.get(path).addAggregateResult(aggrResult);
}
}
@@ -101,14 +101,14 @@ public class GroupByWithoutValueFilterDataSet extends
GroupByEngineDataSet {
protected RowRecord nextWithoutConstraint() throws IOException {
if (!hasCachedTimeInterval) {
throw new IOException("need to call hasNext() before calling next() "
- + "in GroupByWithoutValueFilterDataSet.");
+ + "in GroupByWithoutValueFilterDataSet.");
}
hasCachedTimeInterval = false;
RowRecord record;
if (leftCRightO) {
record = new RowRecord(curStartTime);
} else {
- record = new RowRecord(curEndTime-1);
+ record = new RowRecord(curEndTime - 1);
}
AggregateResult[] fields = new AggregateResult[paths.size()];
@@ -137,9 +137,11 @@ public class GroupByWithoutValueFilterDataSet extends
GroupByEngineDataSet {
return record;
}
- protected GroupByExecutor getGroupByExecutor(Path path, Set<String>
allSensors, TSDataType dataType,
- QueryContext context, Filter
timeFilter, TsFileFilter fileFilter)
- throws StorageEngineException, QueryProcessException {
- return new LocalGroupByExecutor(path, allSensors, dataType, context,
timeFilter, fileFilter);
+ protected GroupByExecutor getGroupByExecutor(Path path, Set<String>
allSensors,
+ TSDataType dataType,
+ QueryContext context, Filter timeFilter, TsFileFilter fileFilter,
boolean ascending)
+ throws StorageEngineException, QueryProcessException {
+ return new LocalGroupByExecutor(path, allSensors, dataType, context,
timeFilter, fileFilter,
+ ascending);
}
}
\ No newline at end of file
diff --git
a/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/LocalGroupByExecutor.java
b/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/LocalGroupByExecutor.java
index 3ccd596..9571608 100644
---
a/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/LocalGroupByExecutor.java
+++
b/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/LocalGroupByExecutor.java
@@ -56,14 +56,14 @@ public class LocalGroupByExecutor implements
GroupByExecutor {
private QueryDataSource queryDataSource;
public LocalGroupByExecutor(Path path, Set<String> allSensors, TSDataType
dataType,
- QueryContext context, Filter timeFilter, TsFileFilter fileFilter)
+ QueryContext context, Filter timeFilter, TsFileFilter fileFilter,
boolean ascending)
throws StorageEngineException, QueryProcessException {
queryDataSource = QueryResourceManager.getInstance()
.getQueryDataSource(path, context, timeFilter);
// update filter by TTL
timeFilter = queryDataSource.updateFilterUsingTTL(timeFilter);
this.reader = new SeriesAggregateReader(path, allSensors, dataType,
context, queryDataSource,
- timeFilter, null, fileFilter);
+ timeFilter, null, fileFilter, ascending);
this.preCachedData = null;
timeRange = new TimeRange(Long.MIN_VALUE, Long.MAX_VALUE);
lastReadCurArrayIndex = 0;
diff --git
a/server/src/main/java/org/apache/iotdb/db/query/executor/AggregationExecutor.java
b/server/src/main/java/org/apache/iotdb/db/query/executor/AggregationExecutor.java
index e7f51cd..202607a 100644
---
a/server/src/main/java/org/apache/iotdb/db/query/executor/AggregationExecutor.java
+++
b/server/src/main/java/org/apache/iotdb/db/query/executor/AggregationExecutor.java
@@ -77,7 +77,8 @@ public class AggregationExecutor {
*
* @param context query context
*/
- public QueryDataSet executeWithoutValueFilter(QueryContext context,
AggregationPlan aggregationPlan)
+ public QueryDataSet executeWithoutValueFilter(QueryContext context,
+ AggregationPlan aggregationPlan)
throws StorageEngineException, IOException, QueryProcessException {
Filter timeFilter = null;
@@ -89,7 +90,9 @@ public class AggregationExecutor {
Map<Path, List<Integer>> pathToAggrIndexesMap =
groupAggregationsBySeries(selectedSeries);
AggregateResult[] aggregateResultList = new
AggregateResult[selectedSeries.size()];
for (Map.Entry<Path, List<Integer>> entry :
pathToAggrIndexesMap.entrySet()) {
- List<AggregateResult> aggregateResults = aggregateOneSeries(entry,
aggregationPlan.getAllMeasurementsInDevice(entry.getKey().getDevice()),
timeFilter, context);
+ List<AggregateResult> aggregateResults = aggregateOneSeries(entry,
+
aggregationPlan.getAllMeasurementsInDevice(entry.getKey().getDevice()),
timeFilter,
+ context, aggregationPlan.isAscending());
int index = 0;
for (int i : entry.getValue()) {
aggregateResultList[i] = aggregateResults.get(index);
@@ -104,14 +107,14 @@ public class AggregationExecutor {
* get aggregation result for one series
*
* @param pathToAggrIndexes entry of path to aggregation indexes map
- * @param timeFilter time filter
- * @param context query context
+ * @param timeFilter time filter
+ * @param context query context
* @return AggregateResult list
*/
protected List<AggregateResult> aggregateOneSeries(
Map.Entry<Path, List<Integer>> pathToAggrIndexes,
Set<String> measurements,
- Filter timeFilter, QueryContext context)
+ Filter timeFilter, QueryContext context, boolean ascending)
throws IOException, QueryProcessException, StorageEngineException {
List<AggregateResult> aggregateResultList = new ArrayList<>();
@@ -124,12 +127,15 @@ public class AggregationExecutor {
.getAggrResultByName(aggregations.get(i), tsDataType);
aggregateResultList.add(aggregateResult);
}
- aggregateOneSeries(seriesPath, measurements, context, timeFilter,
tsDataType, aggregateResultList, null);
+ aggregateOneSeries(seriesPath, measurements, context, timeFilter,
tsDataType,
+ aggregateResultList, null, ascending);
return aggregateResultList;
}
- public static void aggregateOneSeries(Path seriesPath, Set<String>
measurements, QueryContext context, Filter timeFilter,
- TSDataType tsDataType, List<AggregateResult> aggregateResultList,
TsFileFilter fileFilter)
+ public static void aggregateOneSeries(Path seriesPath, Set<String>
measurements,
+ QueryContext context, Filter timeFilter,
+ TSDataType tsDataType, List<AggregateResult> aggregateResultList,
TsFileFilter fileFilter,
+ boolean ascending)
throws StorageEngineException, IOException, QueryProcessException {
// construct series reader without value filter
@@ -142,7 +148,7 @@ public class AggregationExecutor {
timeFilter = queryDataSource.updateFilterUsingTTL(timeFilter);
IAggregateReader seriesReader = new SeriesAggregateReader(seriesPath,
measurements,
- tsDataType, context, queryDataSource, timeFilter, null, null);
+ tsDataType, context, queryDataSource, timeFilter, null, null,
ascending);
aggregateFromReader(seriesReader, aggregateResultList);
}
@@ -156,7 +162,7 @@ public class AggregationExecutor {
if (seriesReader.canUseCurrentFileStatistics()) {
Statistics fileStatistics = seriesReader.currentFileStatistics();
remainingToCalculate = aggregateStatistics(aggregateResultList,
isCalculatedArray,
- remainingToCalculate, fileStatistics);
+ remainingToCalculate, fileStatistics);
if (remainingToCalculate == 0) {
return;
}
@@ -169,7 +175,7 @@ public class AggregationExecutor {
if (seriesReader.canUseCurrentChunkStatistics()) {
Statistics chunkStatistics = seriesReader.currentChunkStatistics();
remainingToCalculate = aggregateStatistics(aggregateResultList,
isCalculatedArray,
- remainingToCalculate, chunkStatistics);
+ remainingToCalculate, chunkStatistics);
if (remainingToCalculate == 0) {
return;
}
@@ -178,7 +184,7 @@ public class AggregationExecutor {
}
remainingToCalculate = aggregatePages(seriesReader,
aggregateResultList,
- isCalculatedArray, remainingToCalculate);
+ isCalculatedArray, remainingToCalculate);
if (remainingToCalculate == 0) {
return;
}
@@ -189,6 +195,7 @@ public class AggregationExecutor {
/**
* Aggregate each result in the list with the statistics
+ *
* @param aggregateResultList
* @param isCalculatedArray
* @param remainingToCalculate
@@ -217,7 +224,8 @@ public class AggregationExecutor {
}
private static int aggregatePages(IAggregateReader seriesReader,
- List<AggregateResult> aggregateResultList, boolean[] isCalculatedArray,
int remainingToCalculate)
+ List<AggregateResult> aggregateResultList, boolean[] isCalculatedArray,
+ int remainingToCalculate)
throws IOException, QueryProcessException {
while (seriesReader.hasNextPage()) {
//cal by page statistics
@@ -270,20 +278,24 @@ public class AggregationExecutor {
List<AggregateResult> aggregateResults = new ArrayList<>();
for (int i = 0; i < selectedSeries.size(); i++) {
TSDataType type = dataTypes.get(i);
- AggregateResult result =
AggregateResultFactory.getAggrResultByName(aggregations.get(i), type);
+ AggregateResult result = AggregateResultFactory
+ .getAggrResultByName(aggregations.get(i), type);
aggregateResults.add(result);
}
aggregateWithValueFilter(aggregateResults, timestampGenerator,
readersOfSelectedSeries);
return constructDataSet(aggregateResults, queryPlan);
}
- protected TimeGenerator getTimeGenerator(QueryContext context,
RawDataQueryPlan queryPlan) throws StorageEngineException {
+ protected TimeGenerator getTimeGenerator(QueryContext context,
RawDataQueryPlan queryPlan)
+ throws StorageEngineException {
return new ServerTimeGenerator(expression, context, queryPlan);
}
- protected IReaderByTimestamp getReaderByTime(Path path, RawDataQueryPlan
queryPlan, TSDataType dataType,
+ protected IReaderByTimestamp getReaderByTime(Path path, RawDataQueryPlan
queryPlan,
+ TSDataType dataType,
QueryContext context) throws StorageEngineException,
QueryProcessException {
- return new SeriesReaderByTimestamp(path,
queryPlan.getAllMeasurementsInDevice(path.getDevice()), dataType, context,
+ return new SeriesReaderByTimestamp(path,
queryPlan.getAllMeasurementsInDevice(path.getDevice()),
+ dataType, context,
QueryResourceManager.getInstance().getQueryDataSource(path, context,
null), null);
}
@@ -319,7 +331,8 @@ public class AggregationExecutor {
*
* @param aggregateResultList aggregate result list
*/
- private QueryDataSet constructDataSet(List<AggregateResult>
aggregateResultList, RawDataQueryPlan plan) {
+ private QueryDataSet constructDataSet(List<AggregateResult>
aggregateResultList,
+ RawDataQueryPlan plan) {
RowRecord record = new RowRecord(0);
for (AggregateResult resultData : aggregateResultList) {
TSDataType dataType = resultData.getResultDataType();
@@ -327,10 +340,12 @@ public class AggregationExecutor {
}
SingleDataSet dataSet = null;
- if (((AggregationPlan)plan).getLevel() >= 0) {
+ if (((AggregationPlan) plan).getLevel() >= 0) {
// current only support count operation
Map<Integer, String> pathIndex = new HashMap<>();
- Map<String, Long> finalPaths =
FilePathUtils.getPathByLevel(plan.getDeduplicatedPaths(),
((AggregationPlan)plan).getLevel(), pathIndex);
+ Map<String, Long> finalPaths = FilePathUtils
+ .getPathByLevel(plan.getDeduplicatedPaths(), ((AggregationPlan)
plan).getLevel(),
+ pathIndex);
RowRecord curRecord = FilePathUtils.mergeRecordByPath(record,
finalPaths, pathIndex);
diff --git
a/server/src/main/java/org/apache/iotdb/db/query/executor/fill/LinearFill.java
b/server/src/main/java/org/apache/iotdb/db/query/executor/fill/LinearFill.java
index 4dbac70..697836c 100644
---
a/server/src/main/java/org/apache/iotdb/db/query/executor/fill/LinearFill.java
+++
b/server/src/main/java/org/apache/iotdb/db/query/executor/fill/LinearFill.java
@@ -138,7 +138,8 @@ public class LinearFill extends IFill {
QueryDataSource dataSource =
QueryResourceManager.getInstance().getQueryDataSource(seriesPath,
context, beforeFilter);
LastPointReader lastReader =
- new LastPointReader(seriesPath, dataType, deviceMeasurements, context,
dataSource, queryTime, beforeFilter);
+ new LastPointReader(seriesPath, dataType, deviceMeasurements, context,
dataSource,
+ queryTime, beforeFilter);
return lastReader.readLastPoint();
}
@@ -153,10 +154,11 @@ public class LinearFill extends IFill {
aggregateResultList.add(minTimeResult);
aggregateResultList.add(firstValueResult);
AggregationExecutor.aggregateOneSeries(
- seriesPath, deviceMeasurements, context, afterFilter, dataType,
aggregateResultList, null);
+ seriesPath, deviceMeasurements, context, afterFilter, dataType,
aggregateResultList, null,
+ true);
if (minTimeResult.getResult() != null) {
- long timestamp = (long)(minTimeResult.getResult());
+ long timestamp = (long) (minTimeResult.getResult());
result.setTimestamp(timestamp);
}
if (firstValueResult.getResult() != null) {
diff --git
a/server/src/main/java/org/apache/iotdb/db/query/reader/series/SeriesAggregateReader.java
b/server/src/main/java/org/apache/iotdb/db/query/reader/series/SeriesAggregateReader.java
index bc4c20f..d25539d 100644
---
a/server/src/main/java/org/apache/iotdb/db/query/reader/series/SeriesAggregateReader.java
+++
b/server/src/main/java/org/apache/iotdb/db/query/reader/series/SeriesAggregateReader.java
@@ -36,11 +36,11 @@ public class SeriesAggregateReader implements
IAggregateReader {
private final SeriesReader seriesReader;
- public SeriesAggregateReader(Path seriesPath, Set<String> allSensors,
TSDataType dataType,
+ public SeriesAggregateReader(Path seriesPath, Set<String> allSensors,
TSDataType dataType,
QueryContext context, QueryDataSource dataSource, Filter timeFilter,
Filter valueFilter,
- TsFileFilter fileFilter) {
+ TsFileFilter fileFilter, boolean ascending) {
this.seriesReader = new SeriesReader(seriesPath, allSensors, dataType,
context, dataSource,
- timeFilter, valueFilter, fileFilter, true);
+ timeFilter, valueFilter, fileFilter, ascending);
}
@Override
diff --git
a/server/src/test/java/org/apache/iotdb/db/query/reader/series/SeriesAggregateReaderTest.java
b/server/src/test/java/org/apache/iotdb/db/query/reader/series/SeriesAggregateReaderTest.java
index d2c4943..acad606 100644
---
a/server/src/test/java/org/apache/iotdb/db/query/reader/series/SeriesAggregateReaderTest.java
+++
b/server/src/test/java/org/apache/iotdb/db/query/reader/series/SeriesAggregateReaderTest.java
@@ -74,8 +74,9 @@ public class SeriesAggregateReaderTest {
Set<String> allSensors = new HashSet<>();
allSensors.add("sensor0");
QueryDataSource queryDataSource = new QueryDataSource(path,
seqResources, unseqResources);
- SeriesAggregateReader seriesReader = new SeriesAggregateReader(path,
allSensors, TSDataType.INT32,
- new QueryContext(), queryDataSource, null, null, null);
+ SeriesAggregateReader seriesReader = new SeriesAggregateReader(path,
allSensors,
+ TSDataType.INT32,
+ new QueryContext(), queryDataSource, null, null, null, true);
AggregateResult aggregateResult = AggregateResultFactory
.getAggrResultByName("count", TSDataType.INT32);
int loopTime = 0;