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());