Skip to content

Commit 03dc388

Browse files
BeyyesMyXOF
authored andcommitted
fix a bug in aggregation without filter process (#377)
1 parent 25254be commit 03dc388

File tree

3 files changed

+26
-5
lines changed

3 files changed

+26
-5
lines changed

src/main/java/cn/edu/tsinghua/iotdb/query/engine/OverflowQueryEngine.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,8 @@ public QueryDataSet aggregate(List<Pair<Path, String>> aggres, List<FilterStruct
118118
if (aggregateFunction.resultData.timeLength == 0) {
119119
aggregateFunction.putDefaultValue();
120120
}
121+
LOGGER.debug(String.format("key %s, data length %s, empty data length %s", EngineUtils.aggregationKey(aggregateFunction, pair.left),
122+
aggregateFunction.resultData.timeLength, aggregateFunction.resultData.emptyTimeLength));
121123
ansQueryDataSet.mapRet.put(EngineUtils.aggregationKey(aggregateFunction, pair.left), aggregateFunction.resultData);
122124
}
123125
// aggregateThreadLocal.set(ansQueryDataSet);

src/main/java/cn/edu/tsinghua/iotdb/query/reader/AggregateRecordReader.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,8 @@ private void aggregate(ValueReader valueReader, AggregateFunction func) throws I
231231
valueReader.setDecoder(Decoder.getDecoderByType(pageHeader.getData_page_header().getEncoding(), dataType));
232232
result = ReaderUtils.readOnePage(dataType, timestamps, valueReader.decoder, page, result,
233233
queryTimeFilter, queryValueFilter, insertMemoryData, overflowOperationReaderCopy);
234-
func.calculateValueFromDataPage(result);
234+
if (result.valueLength > 0)
235+
func.calculateValueFromDataPage(result);
235236
result.clearData();
236237
}
237238
}

src/test/java/cn/edu/tsinghua/iotdb/service/LargeDataTest.java

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -66,9 +66,9 @@ public void setUp() throws Exception {
6666
pageSizeInByte = tsFileConfig.pageSizeInByte;
6767
groupSizeInByte = tsFileConfig.groupSizeInByte;
6868
// new value
69-
tsFileConfig.maxNumberOfPointsInPage = 100;
70-
tsFileConfig.pageSizeInByte = 1024 * 1024 * 15;
71-
tsFileConfig.groupSizeInByte = 1024 * 1024 * 100;
69+
tsFileConfig.maxNumberOfPointsInPage = 1000;
70+
tsFileConfig.pageSizeInByte = 1024 * 1024 * 150;
71+
tsFileConfig.groupSizeInByte = 1024 * 1024 * 1000;
7272

7373
deamon = IoTDB.getInstance();
7474
deamon.active();
@@ -425,6 +425,24 @@ private void allNullSeriesAggregationTest() throws ClassNotFoundException, SQLEx
425425
assertEquals(1, cnt);
426426
statement.close();
427427

428+
// (3). aggregation test : there is no value in series d1.s0 in the given time range
429+
sql = "select max_value(s0),min_value(s0)" +
430+
"from root.vehicle.d0 where time > 13601 and time < 13602";
431+
statement = connection.createStatement();
432+
hasResultSet = statement.execute(sql);
433+
Assert.assertTrue(hasResultSet);
434+
resultSet = statement.getResultSet();
435+
cnt = 0;
436+
while (resultSet.next()) {
437+
String ans = resultSet.getString(TIMESTAMP_STR)
438+
+ "," + resultSet.getString(max_value(d0s0)) + "," + resultSet.getString(min_value(d0s0));
439+
assertEquals("0,null,null", ans);
440+
//System.out.println(".." + ans);
441+
cnt++;
442+
}
443+
assertEquals(1, cnt);
444+
statement.close();
445+
428446
} catch (Exception e) {
429447
e.printStackTrace();
430448
fail(e.getMessage());
@@ -865,7 +883,7 @@ private void insertSQL() throws ClassNotFoundException, SQLException {
865883
statement.execute(sql);
866884
}
867885

868-
statement.execute("flush");
886+
// statement.execute("flush");
869887

870888
// insert large amount of data time range : 13700 ~ 24000
871889
for (int time = 13700; time < 24000; time++) {

0 commit comments

Comments
 (0)