This is an automated email from the ASF dual-hosted git repository.
jackietien pushed a commit to branch dev/1.3
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/dev/1.3 by this push:
new 9ae3d24d710 [To dev/1.3] Fix group by nature month when timezone is
not default
9ae3d24d710 is described below
commit 9ae3d24d7106ee55ee6905960e1f19c839e8a71e
Author: Weihao Li <[email protected]>
AuthorDate: Thu Dec 12 16:35:27 2024 +0800
[To dev/1.3] Fix group by nature month when timezone is not default
---
.../iotdb/it/env/cluster/env/AbstractEnv.java | 16 +++++++
.../iotdb/it/env/remote/env/RemoteServerEnv.java | 14 ++++++
.../java/org/apache/iotdb/itbase/env/BaseEnv.java | 3 ++
.../db/it/groupby/IoTDBGroupByNaturalMonthIT.java | 28 ++++++++++++
.../protocol/thrift/impl/ClientRPCServiceImpl.java | 4 +-
.../timerangeiterator/AggrWindowIterator.java | 26 +++++++----
.../PreAggrWindowWithNaturalMonthIterator.java | 8 +++-
.../TimeRangeIteratorFactory.java | 9 ++--
.../execution/operator/AggregationUtil.java | 7 ++-
.../process/SlidingWindowAggregationOperator.java | 7 ++-
.../queryengine/plan/analyze/AnalyzeVisitor.java | 4 +-
.../plan/analyze/TemplatedAggregationAnalyze.java | 4 +-
.../plan/optimization/LimitOffsetPushDown.java | 20 +++++---
.../db/queryengine/plan/parser/ASTVisitor.java | 2 +-
.../plan/planner/OperatorTreeGenerator.java | 31 +++++++------
.../org/apache/iotdb/db/utils/DateTimeUtils.java | 9 ++--
.../aggregation/TimeRangeIteratorTest.java | 53 +++++++++++++---------
.../operator/AggregationOperatorTest.java | 7 +--
.../AlignedSeriesAggregationScanOperatorTest.java | 3 +-
.../operator/HorizontallyConcatOperatorTest.java | 5 +-
.../execution/operator/LastQueryOperatorTest.java | 9 ++--
.../operator/LastQuerySortOperatorTest.java | 9 ++--
.../execution/operator/OperatorMemoryTest.java | 16 +++++--
.../operator/RawDataAggregationOperatorTest.java | 3 +-
.../SeriesAggregationScanOperatorTest.java | 3 +-
.../SlidingWindowAggregationOperatorTest.java | 8 ++--
.../operator/UpdateLastCacheOperatorTest.java | 3 +-
.../plan/optimization/LimitOffsetPushDownTest.java | 11 ++++-
28 files changed, 226 insertions(+), 96 deletions(-)
diff --git
a/integration-test/src/main/java/org/apache/iotdb/it/env/cluster/env/AbstractEnv.java
b/integration-test/src/main/java/org/apache/iotdb/it/env/cluster/env/AbstractEnv.java
index 92cb39765c6..0374091e40f 100644
---
a/integration-test/src/main/java/org/apache/iotdb/it/env/cluster/env/AbstractEnv.java
+++
b/integration-test/src/main/java/org/apache/iotdb/it/env/cluster/env/AbstractEnv.java
@@ -64,6 +64,7 @@ import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
+import java.time.ZoneId;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.function.Predicate;
@@ -470,6 +471,21 @@ public abstract class AbstractEnv implements BaseEnv {
return session;
}
+ @Override
+ public ISession getSessionConnection(ZoneId zoneId) throws
IoTDBConnectionException {
+ DataNodeWrapper dataNode =
+
this.dataNodeWrapperList.get(rand.nextInt(this.dataNodeWrapperList.size()));
+ Session session =
+ new Session(
+ dataNode.getIp(),
+ dataNode.getPort(),
+ SessionConfig.DEFAULT_USER,
+ SessionConfig.DEFAULT_PASSWORD,
+ zoneId);
+ session.open();
+ return session;
+ }
+
@Override
public ISession getSessionConnection(String userName, String password)
throws IoTDBConnectionException {
diff --git
a/integration-test/src/main/java/org/apache/iotdb/it/env/remote/env/RemoteServerEnv.java
b/integration-test/src/main/java/org/apache/iotdb/it/env/remote/env/RemoteServerEnv.java
index 267da926592..907fc39605d 100644
---
a/integration-test/src/main/java/org/apache/iotdb/it/env/remote/env/RemoteServerEnv.java
+++
b/integration-test/src/main/java/org/apache/iotdb/it/env/remote/env/RemoteServerEnv.java
@@ -47,6 +47,7 @@ import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
+import java.time.ZoneId;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@@ -225,6 +226,19 @@ public class RemoteServerEnv implements BaseEnv {
return session;
}
+ @Override
+ public ISession getSessionConnection(ZoneId zoneId) throws
IoTDBConnectionException {
+ Session session =
+ new Session(
+ ip_addr,
+ Integer.parseInt(port),
+ SessionConfig.DEFAULT_USER,
+ SessionConfig.DEFAULT_PASSWORD,
+ zoneId);
+ session.open();
+ return session;
+ }
+
public ISession getSessionConnection(String userName, String password)
throws IoTDBConnectionException {
Session session = new Session(ip_addr, Integer.parseInt(port), userName,
password);
diff --git
a/integration-test/src/main/java/org/apache/iotdb/itbase/env/BaseEnv.java
b/integration-test/src/main/java/org/apache/iotdb/itbase/env/BaseEnv.java
index 3b9b27de851..88f9f766783 100644
--- a/integration-test/src/main/java/org/apache/iotdb/itbase/env/BaseEnv.java
+++ b/integration-test/src/main/java/org/apache/iotdb/itbase/env/BaseEnv.java
@@ -39,6 +39,7 @@ import java.net.HttpURLConnection;
import java.net.URL;
import java.sql.Connection;
import java.sql.SQLException;
+import java.time.ZoneId;
import java.util.List;
import java.util.Optional;
@@ -147,6 +148,8 @@ public interface BaseEnv {
ISession getSessionConnection() throws IoTDBConnectionException;
+ ISession getSessionConnection(ZoneId zoneId) throws IoTDBConnectionException;
+
ISession getSessionConnection(String userName, String password) throws
IoTDBConnectionException;
ISession getSessionConnection(List<String> nodeUrls) throws
IoTDBConnectionException;
diff --git
a/integration-test/src/test/java/org/apache/iotdb/db/it/groupby/IoTDBGroupByNaturalMonthIT.java
b/integration-test/src/test/java/org/apache/iotdb/db/it/groupby/IoTDBGroupByNaturalMonthIT.java
index e08eb4c5f1d..9d56acf518f 100644
---
a/integration-test/src/test/java/org/apache/iotdb/db/it/groupby/IoTDBGroupByNaturalMonthIT.java
+++
b/integration-test/src/test/java/org/apache/iotdb/db/it/groupby/IoTDBGroupByNaturalMonthIT.java
@@ -18,6 +18,8 @@
*/
package org.apache.iotdb.db.it.groupby;
+import org.apache.iotdb.isession.ISession;
+import org.apache.iotdb.isession.SessionDataSet;
import org.apache.iotdb.it.env.EnvFactory;
import org.apache.iotdb.it.framework.IoTDBTestRunner;
import org.apache.iotdb.itbase.category.ClusterIT;
@@ -49,6 +51,7 @@ import static
org.apache.iotdb.db.it.utils.TestUtils.resultSetEqualTest;
import static org.apache.iotdb.db.utils.constant.TestConstant.sum;
import static org.apache.iotdb.itbase.constant.TestConstant.TIMESTAMP_STR;
import static org.apache.iotdb.itbase.constant.TestConstant.count;
+import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;
@RunWith(IoTDBTestRunner.class)
@@ -75,6 +78,8 @@ public class IoTDBGroupByNaturalMonthIT {
calendar.add(Calendar.MONTH, 1), i = calendar.getTimeInMillis()) {
dataSet.add("insert into root.test.d1(timestamp, s1) values (" + i + ",
1)");
}
+
+ dataSet.add("insert into root.testTimeZone.d1(timestamp, s1) values (1,
1)");
}
protected static final DateFormat df = new
SimpleDateFormat("MM/dd/yyyy:HH:mm:ss");
@@ -413,4 +418,27 @@ public class IoTDBGroupByNaturalMonthIT {
null,
currPrecision);
}
+
+ @Test
+ public void groupByNaturalMonthWithNonSystemDefaultTimeZone() {
+ try (ISession session =
+
EnvFactory.getEnv().getSessionConnection(TimeZone.getTimeZone("UTC+09:00").toZoneId()))
{
+
+ SessionDataSet sessionDataSet =
+ session.executeQueryStatement(
+ "select count(s1) from root.testTimeZone.d1 group
by([2024-07-01, 2024-08-01), 1mo)");
+
+ int count = 0;
+ while (sessionDataSet.hasNext()) {
+ sessionDataSet.next();
+ count++;
+ }
+ assertEquals(1, count);
+
+ sessionDataSet.closeOperationHandle();
+ } catch (Exception e) {
+ e.printStackTrace();
+ fail(e.getMessage());
+ }
+ }
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/ClientRPCServiceImpl.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/ClientRPCServiceImpl.java
index e7b9d19b4e5..20a80ce683d 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/ClientRPCServiceImpl.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/ClientRPCServiceImpl.java
@@ -722,7 +722,7 @@ public class ClientRPCServiceImpl implements
IClientRPCServiceWithHandler {
scanOptionsBuilder.build(),
driverContext.getOperatorContexts().get(0),
Collections.singletonList(aggregator),
- initTimeRangeIterator(groupByTimeParameter, true, true),
+ initTimeRangeIterator(groupByTimeParameter, true, true,
sessionInfo.getZoneId()),
groupByTimeParameter,
DEFAULT_MAX_TSBLOCK_SIZE_IN_BYTES,
!TSDataType.BLOB.equals(dataType)
@@ -738,7 +738,7 @@ public class ClientRPCServiceImpl implements
IClientRPCServiceWithHandler {
scanOptionsBuilder.build(),
driverContext.getOperatorContexts().get(0),
Collections.singletonList(aggregator),
- initTimeRangeIterator(groupByTimeParameter, true, true),
+ initTimeRangeIterator(groupByTimeParameter, true, true,
sessionInfo.getZoneId()),
groupByTimeParameter,
DEFAULT_MAX_TSBLOCK_SIZE_IN_BYTES,
!TSDataType.BLOB.equals(dataType)
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/aggregation/timerangeiterator/AggrWindowIterator.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/aggregation/timerangeiterator/AggrWindowIterator.java
index b2dfc4909eb..e9847f814cf 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/aggregation/timerangeiterator/AggrWindowIterator.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/aggregation/timerangeiterator/AggrWindowIterator.java
@@ -25,6 +25,8 @@ import org.apache.iotdb.db.utils.TimestampPrecisionUtils;
import org.apache.tsfile.read.common.TimeRange;
import org.apache.tsfile.utils.TimeDuration;
+import java.time.ZoneId;
+
/**
* This class iteratively generates aggregated time windows.
*
@@ -46,6 +48,8 @@ public class AggrWindowIterator implements ITimeRangeIterator
{
// The number of current timeRange, it's used to calculate the cpu when
there contains month
private int timeRangeCount;
+ private final ZoneId zoneId;
+
@SuppressWarnings("squid:S107")
public AggrWindowIterator(
long startTime,
@@ -53,7 +57,8 @@ public class AggrWindowIterator implements ITimeRangeIterator
{
TimeDuration interval,
TimeDuration slidingStep,
boolean isAscending,
- boolean leftCRightO) {
+ boolean leftCRightO,
+ ZoneId zoneId) {
this.startTime = startTime;
this.endTime = endTime;
this.interval = interval;
@@ -61,6 +66,7 @@ public class AggrWindowIterator implements ITimeRangeIterator
{
this.isAscending = isAscending;
this.leftCRightO = leftCRightO;
this.timeRangeCount = 0;
+ this.zoneId = zoneId;
}
@Override
@@ -78,7 +84,7 @@ public class AggrWindowIterator implements ITimeRangeIterator
{
// calculate interval length by natural month based on startTime
// ie. startTIme = 1/31, interval = 1mo, curEndTime will be set to 2/29
retEndTime =
- Math.min(DateTimeUtils.calcPositiveIntervalByMonth(startTime,
interval), endTime);
+ Math.min(DateTimeUtils.calcPositiveIntervalByMonth(startTime,
interval, zoneId), endTime);
} else {
retEndTime = Math.min(startTime + interval.nonMonthDuration, endTime);
}
@@ -99,14 +105,14 @@ public class AggrWindowIterator implements
ITimeRangeIterator {
/
(slidingStep.getMaxTotalDuration(TimestampPrecisionUtils.currPrecision)));
long tempRetStartTime =
DateTimeUtils.calcPositiveIntervalByMonth(
- startTime, slidingStep.multiple(intervalNum - 1));
+ startTime, slidingStep.multiple(intervalNum - 1), zoneId);
retStartTime = tempRetStartTime;
while (tempRetStartTime < endTime) {
intervalNum++;
retStartTime = tempRetStartTime;
tempRetStartTime =
DateTimeUtils.calcPositiveIntervalByMonth(
- retStartTime, slidingStep.multiple(intervalNum - 1));
+ retStartTime, slidingStep.multiple(intervalNum - 1), zoneId);
}
intervalNum -= 1;
} else {
@@ -120,7 +126,7 @@ public class AggrWindowIterator implements
ITimeRangeIterator {
retEndTime =
Math.min(
DateTimeUtils.calcPositiveIntervalByMonth(
- startTime, interval.merge(slidingStep.multiple(intervalNum -
1))),
+ startTime, interval.merge(slidingStep.multiple(intervalNum -
1)), zoneId),
endTime);
} else {
retEndTime = Math.min(retStartTime + interval.nonMonthDuration, endTime);
@@ -147,7 +153,7 @@ public class AggrWindowIterator implements
ITimeRangeIterator {
if (slidingStep.containsMonth()) {
retStartTime =
DateTimeUtils.calcPositiveIntervalByMonth(
- startTime, slidingStep.multiple(timeRangeCount));
+ startTime, slidingStep.multiple(timeRangeCount), zoneId);
} else {
retStartTime = curStartTime + slidingStep.nonMonthDuration;
}
@@ -171,7 +177,7 @@ public class AggrWindowIterator implements
ITimeRangeIterator {
if (interval.containsMonth()) {
retEndTime =
DateTimeUtils.calcPositiveIntervalByMonth(
- startTime, slidingStep.multiple(timeRangeCount).merge(interval));
+ startTime, slidingStep.multiple(timeRangeCount).merge(interval),
zoneId);
} else {
retEndTime = retStartTime + interval.nonMonthDuration;
}
@@ -213,11 +219,13 @@ public class AggrWindowIterator implements
ITimeRangeIterator {
(double) queryRange
/
(slidingStep.getMaxTotalDuration(TimestampPrecisionUtils.currPrecision)));
long retStartTime =
- DateTimeUtils.calcPositiveIntervalByMonth(startTime,
slidingStep.multiple(intervalNum));
+ DateTimeUtils.calcPositiveIntervalByMonth(
+ startTime, slidingStep.multiple(intervalNum), zoneId);
while (retStartTime < endTime) {
intervalNum++;
retStartTime =
- DateTimeUtils.calcPositiveIntervalByMonth(startTime,
slidingStep.multiple(intervalNum));
+ DateTimeUtils.calcPositiveIntervalByMonth(
+ startTime, slidingStep.multiple(intervalNum), zoneId);
}
} else {
intervalNum = (long) Math.ceil(queryRange / (double)
slidingStep.nonMonthDuration);
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/aggregation/timerangeiterator/PreAggrWindowWithNaturalMonthIterator.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/aggregation/timerangeiterator/PreAggrWindowWithNaturalMonthIterator.java
index a99583f62af..a4a0aa62611 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/aggregation/timerangeiterator/PreAggrWindowWithNaturalMonthIterator.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/aggregation/timerangeiterator/PreAggrWindowWithNaturalMonthIterator.java
@@ -24,6 +24,8 @@ import org.apache.iotdb.db.utils.datastructure.TimeSelector;
import org.apache.tsfile.read.common.TimeRange;
import org.apache.tsfile.utils.TimeDuration;
+import java.time.ZoneId;
+
public class PreAggrWindowWithNaturalMonthIterator implements
ITimeRangeIterator {
private static final int HEAP_MAX_SIZE = 100;
@@ -46,11 +48,13 @@ public class PreAggrWindowWithNaturalMonthIterator
implements ITimeRangeIterator
TimeDuration interval,
TimeDuration slidingStep,
boolean isAscending,
- boolean leftCRightO) {
+ boolean leftCRightO,
+ ZoneId zoneId) {
this.isAscending = isAscending;
this.timeBoundaryHeap = new TimeSelector(HEAP_MAX_SIZE, isAscending);
this.aggrWindowIterator =
- new AggrWindowIterator(startTime, endTime, interval, slidingStep,
isAscending, leftCRightO);
+ new AggrWindowIterator(
+ startTime, endTime, interval, slidingStep, isAscending,
leftCRightO, zoneId);
this.leftCRightO = leftCRightO;
initHeap();
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/aggregation/timerangeiterator/TimeRangeIteratorFactory.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/aggregation/timerangeiterator/TimeRangeIteratorFactory.java
index 8bf06fd2668..7331971b4a6 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/aggregation/timerangeiterator/TimeRangeIteratorFactory.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/aggregation/timerangeiterator/TimeRangeIteratorFactory.java
@@ -23,6 +23,8 @@ import org.apache.iotdb.db.utils.TimestampPrecisionUtils;
import org.apache.tsfile.utils.TimeDuration;
+import java.time.ZoneId;
+
public class TimeRangeIteratorFactory {
private TimeRangeIteratorFactory() {}
@@ -40,7 +42,8 @@ public class TimeRangeIteratorFactory {
TimeDuration slidingStep,
boolean isAscending,
boolean leftCRightO,
- boolean outputPartialTimeWindow) {
+ boolean outputPartialTimeWindow,
+ ZoneId zoneId) {
if (outputPartialTimeWindow
&& interval.getTotalDuration(TimestampPrecisionUtils.currPrecision)
>
slidingStep.getTotalDuration(TimestampPrecisionUtils.currPrecision)) {
@@ -54,11 +57,11 @@ public class TimeRangeIteratorFactory {
leftCRightO);
} else {
return new PreAggrWindowWithNaturalMonthIterator(
- startTime, endTime, interval, slidingStep, isAscending,
leftCRightO);
+ startTime, endTime, interval, slidingStep, isAscending,
leftCRightO, zoneId);
}
} else {
return new AggrWindowIterator(
- startTime, endTime, interval, slidingStep, isAscending, leftCRightO);
+ startTime, endTime, interval, slidingStep, isAscending, leftCRightO,
zoneId);
}
}
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/AggregationUtil.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/AggregationUtil.java
index 96c36fe8fcd..8340a0ca407 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/AggregationUtil.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/AggregationUtil.java
@@ -46,6 +46,7 @@ import org.apache.tsfile.read.common.block.column.TimeColumn;
import org.apache.tsfile.read.common.block.column.TimeColumnBuilder;
import org.apache.tsfile.utils.Pair;
+import java.time.ZoneId;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
@@ -72,7 +73,8 @@ public class AggregationUtil {
public static ITimeRangeIterator initTimeRangeIterator(
GroupByTimeParameter groupByTimeParameter,
boolean ascending,
- boolean outputPartialTimeWindow) {
+ boolean outputPartialTimeWindow,
+ ZoneId zoneId) {
if (groupByTimeParameter == null) {
return new SingleTimeWindowIterator(Long.MIN_VALUE, Long.MAX_VALUE);
} else {
@@ -83,7 +85,8 @@ public class AggregationUtil {
groupByTimeParameter.getSlidingStep(),
ascending,
groupByTimeParameter.isLeftCRightO(),
- outputPartialTimeWindow);
+ outputPartialTimeWindow,
+ zoneId);
}
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/SlidingWindowAggregationOperator.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/SlidingWindowAggregationOperator.java
index 9a1de9522af..c7e5769d675 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/SlidingWindowAggregationOperator.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/SlidingWindowAggregationOperator.java
@@ -32,6 +32,7 @@ import org.apache.tsfile.read.common.TimeRange;
import org.apache.tsfile.read.common.block.TsBlockBuilder;
import org.apache.tsfile.utils.RamUsageEstimator;
+import java.time.ZoneId;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@@ -61,7 +62,8 @@ public class SlidingWindowAggregationOperator extends
SingleInputAggregationOper
boolean ascending,
boolean outputEndTime,
GroupByTimeParameter groupByTimeParameter,
- long maxReturnSize) {
+ long maxReturnSize,
+ ZoneId zoneId) {
super(operatorContext, aggregators, child, ascending, maxReturnSize);
checkArgument(
groupByTimeParameter != null,
@@ -78,7 +80,8 @@ public class SlidingWindowAggregationOperator extends
SingleInputAggregationOper
this.timeRangeIterator = timeRangeIterator;
this.outputEndTime = outputEndTime;
- this.subTimeRangeIterator = initTimeRangeIterator(groupByTimeParameter,
ascending, true);
+ this.subTimeRangeIterator =
+ initTimeRangeIterator(groupByTimeParameter, ascending, true, zoneId);
}
@Override
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/AnalyzeVisitor.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/AnalyzeVisitor.java
index 05c915b9081..e34fa1e0930 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/AnalyzeVisitor.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/AnalyzeVisitor.java
@@ -315,7 +315,9 @@ public class AnalyzeVisitor extends
StatementVisitor<Analysis, MPPQueryContext>
if (canPushDownLimitOffsetInGroupByTimeForDevice(queryStatement)) {
// remove the device which won't appear in resultSet after
limit/offset
- deviceList = pushDownLimitOffsetInGroupByTimeForDevice(deviceList,
queryStatement);
+ deviceList =
+ pushDownLimitOffsetInGroupByTimeForDevice(
+ deviceList, queryStatement, context.getZoneId());
}
outputExpressions =
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/TemplatedAggregationAnalyze.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/TemplatedAggregationAnalyze.java
index 79f8ba0a8c1..a9ca34196ad 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/TemplatedAggregationAnalyze.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/TemplatedAggregationAnalyze.java
@@ -80,7 +80,9 @@ public class TemplatedAggregationAnalyze {
if (canPushDownLimitOffsetInGroupByTimeForDevice(queryStatement)) {
// remove the device which won't appear in resultSet after limit/offset
- deviceList = pushDownLimitOffsetInGroupByTimeForDevice(deviceList,
queryStatement);
+ deviceList =
+ pushDownLimitOffsetInGroupByTimeForDevice(
+ deviceList, queryStatement, context.getZoneId());
}
List<Pair<Expression, String>> outputExpressions = new ArrayList<>();
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/optimization/LimitOffsetPushDown.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/optimization/LimitOffsetPushDown.java
index df73a23dd18..16624e203f4 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/optimization/LimitOffsetPushDown.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/optimization/LimitOffsetPushDown.java
@@ -46,9 +46,11 @@ import org.apache.iotdb.db.utils.DateTimeUtils;
import org.apache.tsfile.utils.TimeDuration;
+import java.time.ZoneId;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
+import java.util.TimeZone;
import java.util.concurrent.TimeUnit;
/**
@@ -270,7 +272,7 @@ public class LimitOffsetPushDown implements PlanOptimizer {
}
private static void pushDownLimitOffsetToTimeParameterContainingMonth(
- QueryStatement queryStatement) {
+ QueryStatement queryStatement, ZoneId zoneId) {
GroupByTimeComponent groupByTimeComponent =
queryStatement.getGroupByTimeComponent();
long startTime = groupByTimeComponent.getStartTime();
long endTime = groupByTimeComponent.getEndTime();
@@ -283,9 +285,11 @@ public class LimitOffsetPushDown implements PlanOptimizer {
long totalStep = slidingStep.getMinTotalDuration(TimeUnit.MILLISECONDS);
long size = (endTime - startTime + totalStep - 1) / totalStep;
if (size > offsetSize) {
+ TimeZone timeZone = TimeZone.getTimeZone(zoneId);
// ordering in group by month must be ascending
long newStartTime =
- DateTimeUtils.calcPositiveIntervalByMonth(startTime,
slidingStep.multiple(offsetSize));
+ DateTimeUtils.calcPositiveIntervalByMonth(
+ startTime, slidingStep.multiple(offsetSize), zoneId);
if (limitSize != 0) {
endTime =
@@ -293,7 +297,8 @@ public class LimitOffsetPushDown implements PlanOptimizer {
endTime,
DateTimeUtils.calcPositiveIntervalByMonth(
startTime,
- calculateEndTimeDuration(slidingStep, interval, limitSize,
offsetSize)));
+ calculateEndTimeDuration(slidingStep, interval, limitSize,
offsetSize),
+ zoneId));
}
groupByTimeComponent.setEndTime(endTime);
groupByTimeComponent.setStartTime(newStartTime);
@@ -316,12 +321,13 @@ public class LimitOffsetPushDown implements PlanOptimizer
{
return new TimeDuration(monthDuration, nonMonthDuration);
}
- public static void pushDownLimitOffsetToTimeParameter(QueryStatement
queryStatement) {
+ public static void pushDownLimitOffsetToTimeParameter(
+ QueryStatement queryStatement, ZoneId zoneId) {
GroupByTimeComponent groupByTimeComponent =
queryStatement.getGroupByTimeComponent();
// if group by time contains month, we use another push down limit/offset
if (groupByTimeComponent.getInterval().containsMonth()
|| groupByTimeComponent.getSlidingStep().containsMonth()) {
- pushDownLimitOffsetToTimeParameterContainingMonth(queryStatement);
+ pushDownLimitOffsetToTimeParameterContainingMonth(queryStatement,
zoneId);
return;
}
long startTime = groupByTimeComponent.getStartTime();
@@ -371,7 +377,7 @@ public class LimitOffsetPushDown implements PlanOptimizer {
}
public static List<PartialPath> pushDownLimitOffsetInGroupByTimeForDevice(
- List<PartialPath> deviceNames, QueryStatement queryStatement) {
+ List<PartialPath> deviceNames, QueryStatement queryStatement, ZoneId
zoneId) {
GroupByTimeComponent groupByTimeComponent =
queryStatement.getGroupByTimeComponent();
if (groupByTimeComponent.getInterval().containsMonth()
|| groupByTimeComponent.getSlidingStep().containsMonth()) {
@@ -408,7 +414,7 @@ public class LimitOffsetPushDown implements PlanOptimizer {
if (startDeviceIndex == endDeviceIndex) {
optimizedDeviceNames.add(deviceNames.get(startDeviceIndex));
if (hasLimitOffset(queryStatement) &&
queryStatement.isOrderByTimeInDevices()) {
- pushDownLimitOffsetToTimeParameter(queryStatement);
+ pushDownLimitOffsetToTimeParameter(queryStatement, zoneId);
}
} else {
while (index <= endDeviceIndex && index < deviceNames.size()) {
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/parser/ASTVisitor.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/parser/ASTVisitor.java
index 8796c4e8b65..9b38d4856be 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/parser/ASTVisitor.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/parser/ASTVisitor.java
@@ -1481,7 +1481,7 @@ public class ASTVisitor extends
IoTDBSqlParserBaseVisitor<Statement> {
parseOffsetClause(ctx.paginationClause().rowPaginationClause().offsetClause()));
}
if (canPushDownLimitOffsetToGroupByTime(queryStatement)) {
- pushDownLimitOffsetToTimeParameter(queryStatement);
+ pushDownLimitOffsetToTimeParameter(queryStatement, zoneId);
}
}
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/OperatorTreeGenerator.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/OperatorTreeGenerator.java
index 208985b2e6b..14f3803c1a1 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/OperatorTreeGenerator.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/OperatorTreeGenerator.java
@@ -626,7 +626,7 @@ public class OperatorTreeGenerator extends
PlanVisitor<Operator, LocalExecutionP
GroupByTimeParameter groupByTimeParameter = node.getGroupByTimeParameter();
ITimeRangeIterator timeRangeIterator =
- initTimeRangeIterator(groupByTimeParameter, ascending, true);
+ initTimeRangeIterator(groupByTimeParameter, ascending, true,
context.getZoneId());
long maxReturnSize =
AggregationUtil.calculateMaxAggregationResultSize(
node.getAggregationDescriptorList(), timeRangeIterator,
context.getTypeProvider());
@@ -776,7 +776,7 @@ public class OperatorTreeGenerator extends
PlanVisitor<Operator, LocalExecutionP
}
ITimeRangeIterator timeRangeIterator =
- initTimeRangeIterator(groupByTimeParameter, ascending, true);
+ initTimeRangeIterator(groupByTimeParameter, ascending, true,
context.getZoneId());
long maxReturnSize =
AggregationUtil.calculateMaxAggregationResultSize(
aggregationDescriptorList, timeRangeIterator,
context.getTypeProvider());
@@ -1797,7 +1797,7 @@ public class OperatorTreeGenerator extends
PlanVisitor<Operator, LocalExecutionP
GroupByTimeParameter groupByTimeParameter = node.getGroupByTimeParameter();
ITimeRangeIterator timeRangeIterator =
- initTimeRangeIterator(groupByTimeParameter, ascending, false);
+ initTimeRangeIterator(groupByTimeParameter, ascending, false,
context.getZoneId());
long maxReturnSize =
calculateMaxAggregationResultSize(
aggregationDescriptors, timeRangeIterator,
context.getTypeProvider());
@@ -1852,7 +1852,7 @@ public class OperatorTreeGenerator extends
PlanVisitor<Operator, LocalExecutionP
}
GroupByTimeParameter groupByTimeParameter = node.getGroupByTimeParameter();
ITimeRangeIterator timeRangeIterator =
- initTimeRangeIterator(groupByTimeParameter, ascending, false);
+ initTimeRangeIterator(groupByTimeParameter, ascending, false,
context.getZoneId());
List<AggregationDescriptor> aggregationDescriptors =
node.getTagValuesToAggregationDescriptors().values().stream()
.flatMap(Collection::stream)
@@ -1921,7 +1921,7 @@ public class OperatorTreeGenerator extends
PlanVisitor<Operator, LocalExecutionP
GroupByTimeParameter groupByTimeParameter = node.getGroupByTimeParameter();
ITimeRangeIterator timeRangeIterator =
- initTimeRangeIterator(groupByTimeParameter, ascending, false);
+ initTimeRangeIterator(groupByTimeParameter, ascending, false,
context.getZoneId());
long maxReturnSize =
calculateMaxAggregationResultSize(
aggregationDescriptors, timeRangeIterator,
context.getTypeProvider());
@@ -1934,7 +1934,8 @@ public class OperatorTreeGenerator extends
PlanVisitor<Operator, LocalExecutionP
ascending,
node.isOutputEndTime(),
groupByTimeParameter,
- maxReturnSize);
+ maxReturnSize,
+ context.getZoneId());
}
@Override
@@ -2018,7 +2019,7 @@ public class OperatorTreeGenerator extends
PlanVisitor<Operator, LocalExecutionP
RawDataAggregationOperator.class.getSimpleName());
ITimeRangeIterator timeRangeIterator =
- initTimeRangeIterator(groupByTimeParameter, ascending, true);
+ initTimeRangeIterator(groupByTimeParameter, ascending, true,
context.getZoneId());
long maxReturnSize =
calculateMaxAggregationResultSize(
aggregationDescriptors, timeRangeIterator,
context.getTypeProvider());
@@ -2141,7 +2142,7 @@ public class OperatorTreeGenerator extends
PlanVisitor<Operator, LocalExecutionP
AggregationOperator.class.getSimpleName());
ITimeRangeIterator timeRangeIterator =
- initTimeRangeIterator(node.getGroupByTimeParameter(), ascending, true);
+ initTimeRangeIterator(node.getGroupByTimeParameter(), ascending, true,
context.getZoneId());
long maxReturnSize =
calculateMaxAggregationResultSize(
aggregationDescriptors, timeRangeIterator,
context.getTypeProvider());
@@ -2889,7 +2890,8 @@ public class OperatorTreeGenerator extends
PlanVisitor<Operator, LocalExecutionP
// last_time, last_value
List<Aggregator> aggregators =
LastQueryUtil.createAggregators(seriesPath.getSeriesType());
- ITimeRangeIterator timeRangeIterator = initTimeRangeIterator(null, false,
false);
+ ITimeRangeIterator timeRangeIterator =
+ initTimeRangeIterator(null, false, false, context.getZoneId());
long maxReturnSize =
calculateMaxAggregationResultSizeForLastQuery(aggregators);
SeriesScanOptions.Builder scanOptionsBuilder = new
SeriesScanOptions.Builder();
@@ -2927,7 +2929,8 @@ public class OperatorTreeGenerator extends
PlanVisitor<Operator, LocalExecutionP
canUseStatistics = false;
}
}
- ITimeRangeIterator timeRangeIterator = initTimeRangeIterator(null, false,
false);
+ ITimeRangeIterator timeRangeIterator =
+ initTimeRangeIterator(null, false, false, context.getZoneId());
long maxReturnSize =
calculateMaxAggregationResultSizeForLastQuery(aggregators);
SeriesScanOptions.Builder scanOptionsBuilder = new
SeriesScanOptions.Builder();
@@ -3585,7 +3588,8 @@ public class OperatorTreeGenerator extends
PlanVisitor<Operator, LocalExecutionP
Operator childOperator = node.getChild().accept(this, context);
ColumnGeneratorParameter parameter = node.getColumnGeneratorParameter();
- ColumnGenerator columnGenerator =
genColumnGeneratorAccordingToParameter(parameter);
+ ColumnGenerator columnGenerator =
+ genColumnGeneratorAccordingToParameter(parameter, context.getZoneId());
long maxExtraColumnSize = 0;
for (TSDataType dataType : node.getGeneratedColumnTypes()) {
maxExtraColumnSize += getOutputColumnSizePerLine(dataType);
@@ -3597,7 +3601,7 @@ public class OperatorTreeGenerator extends
PlanVisitor<Operator, LocalExecutionP
}
private ColumnGenerator genColumnGeneratorAccordingToParameter(
- ColumnGeneratorParameter columnGeneratorParameter) {
+ ColumnGeneratorParameter columnGeneratorParameter, ZoneId zoneId) {
ColumnGeneratorType type = columnGeneratorParameter.getGeneratorType();
if (type == ColumnGeneratorType.SLIDING_TIME) {
SlidingTimeColumnGeneratorParameter slidingTimeColumnGeneratorParameter =
@@ -3606,7 +3610,8 @@ public class OperatorTreeGenerator extends
PlanVisitor<Operator, LocalExecutionP
initTimeRangeIterator(
slidingTimeColumnGeneratorParameter.getGroupByTimeParameter(),
slidingTimeColumnGeneratorParameter.isAscending(),
- false));
+ false,
+ zoneId));
} else {
throw new UnsupportedOperationException("Unsupported column generator
type: " + type);
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/DateTimeUtils.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/DateTimeUtils.java
index 59867861ed9..6f7e7179858 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/DateTimeUtils.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/DateTimeUtils.java
@@ -45,6 +45,7 @@ import java.time.format.DateTimeParseException;
import java.time.format.SignStyle;
import java.time.temporal.ChronoField;
import java.util.Calendar;
+import java.util.TimeZone;
import java.util.concurrent.TimeUnit;
import java.util.function.Function;
@@ -760,12 +761,10 @@ public class DateTimeUtils {
public static final long MS_TO_MONTH = 30 * 86400_000L;
- public static long calcPositiveIntervalByMonth(long startTime, TimeDuration
duration) {
+ public static long calcPositiveIntervalByMonth(
+ long startTime, TimeDuration duration, ZoneId zoneId) {
return TimeDuration.calcPositiveIntervalByMonth(
- startTime,
- duration,
- SessionManager.getInstance().getSessionTimeZone(),
- TimestampPrecisionUtils.currPrecision);
+ startTime, duration, TimeZone.getTimeZone(zoneId),
TimestampPrecisionUtils.currPrecision);
}
/**
diff --git
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/aggregation/TimeRangeIteratorTest.java
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/aggregation/TimeRangeIteratorTest.java
index 489e2fb9b86..86d8ef8ad34 100644
---
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/aggregation/TimeRangeIteratorTest.java
+++
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/aggregation/TimeRangeIteratorTest.java
@@ -28,6 +28,7 @@ import org.junit.Assert;
import org.junit.Test;
import java.sql.Timestamp;
+import java.time.ZoneId;
import java.util.TimeZone;
public class TimeRangeIteratorTest {
@@ -54,13 +55,13 @@ public class TimeRangeIteratorTest {
ITimeRangeIterator timeRangeIterator =
TimeRangeIteratorFactory.getTimeRangeIterator(
- startTime, endTime, interval, slidingStep, true, true, false);
+ startTime, endTime, interval, slidingStep, true, true, false,
ZoneId.systemDefault());
checkRes(timeRangeIterator, res);
ITimeRangeIterator descTimeRangeIterator =
TimeRangeIteratorFactory.getTimeRangeIterator(
- startTime, endTime, interval, slidingStep, false, true, false);
+ startTime, endTime, interval, slidingStep, false, true, false,
ZoneId.systemDefault());
checkRes(descTimeRangeIterator, res);
}
@@ -169,51 +170,51 @@ public class TimeRangeIteratorTest {
TimeDuration interval = new TimeDuration(0, 4);
checkRes(
TimeRangeIteratorFactory.getTimeRangeIterator(
- 0, 32, interval, new TimeDuration(0, 1), true, true, true),
+ 0, 32, interval, new TimeDuration(0, 1), true, true, true,
ZoneId.systemDefault()),
res4_1);
checkRes(
TimeRangeIteratorFactory.getTimeRangeIterator(
- 0, 32, interval, new TimeDuration(0, 2), true, true, true),
+ 0, 32, interval, new TimeDuration(0, 2), true, true, true,
ZoneId.systemDefault()),
res4_2);
checkRes(
TimeRangeIteratorFactory.getTimeRangeIterator(
- 0, 32, interval, new TimeDuration(0, 3), true, true, true),
+ 0, 32, interval, new TimeDuration(0, 3), true, true, true,
ZoneId.systemDefault()),
res4_3);
checkRes(
TimeRangeIteratorFactory.getTimeRangeIterator(
- 0, 32, interval, new TimeDuration(0, 4), true, true, true),
+ 0, 32, interval, new TimeDuration(0, 4), true, true, true,
ZoneId.systemDefault()),
res4_4);
checkRes(
TimeRangeIteratorFactory.getTimeRangeIterator(
- 0, 32, interval, new TimeDuration(0, 5), true, true, true),
+ 0, 32, interval, new TimeDuration(0, 5), true, true, true,
ZoneId.systemDefault()),
res4_5);
checkRes(
TimeRangeIteratorFactory.getTimeRangeIterator(
- 0, 32, interval, new TimeDuration(0, 6), true, true, true),
+ 0, 32, interval, new TimeDuration(0, 6), true, true, true,
ZoneId.systemDefault()),
res4_6);
checkRes(
TimeRangeIteratorFactory.getTimeRangeIterator(
- 0, 32, interval, new TimeDuration(0, 1), false, true, true),
+ 0, 32, interval, new TimeDuration(0, 1), false, true, true,
ZoneId.systemDefault()),
res4_1);
checkRes(
TimeRangeIteratorFactory.getTimeRangeIterator(
- 0, 32, interval, new TimeDuration(0, 2), false, true, true),
+ 0, 32, interval, new TimeDuration(0, 2), false, true, true,
ZoneId.systemDefault()),
res4_2);
checkRes(
TimeRangeIteratorFactory.getTimeRangeIterator(
- 0, 32, interval, new TimeDuration(0, 3), false, true, true),
+ 0, 32, interval, new TimeDuration(0, 3), false, true, true,
ZoneId.systemDefault()),
res4_3);
checkRes(
TimeRangeIteratorFactory.getTimeRangeIterator(
- 0, 32, interval, new TimeDuration(0, 4), false, true, true),
+ 0, 32, interval, new TimeDuration(0, 4), false, true, true,
ZoneId.systemDefault()),
res4_4);
checkRes(
TimeRangeIteratorFactory.getTimeRangeIterator(
- 0, 32, interval, new TimeDuration(0, 5), false, true, true),
+ 0, 32, interval, new TimeDuration(0, 5), false, true, true,
ZoneId.systemDefault()),
res4_5);
checkRes(
TimeRangeIteratorFactory.getTimeRangeIterator(
- 0, 32, interval, new TimeDuration(0, 6), false, true, true),
+ 0, 32, interval, new TimeDuration(0, 6), false, true, true,
ZoneId.systemDefault()),
res4_6);
}
@@ -282,7 +283,8 @@ public class TimeRangeIteratorTest {
new TimeDuration(1, 0),
true,
true,
- false),
+ false,
+ ZoneId.systemDefault()),
res1);
checkRes(
TimeRangeIteratorFactory.getTimeRangeIterator(
@@ -292,7 +294,8 @@ public class TimeRangeIteratorTest {
new TimeDuration(1, 0),
true,
true,
- true),
+ true,
+ ZoneId.systemDefault()),
res1);
checkRes(
TimeRangeIteratorFactory.getTimeRangeIterator(
@@ -302,7 +305,8 @@ public class TimeRangeIteratorTest {
new TimeDuration(1, 0),
true,
true,
- false),
+ false,
+ ZoneId.systemDefault()),
res2);
checkRes(
TimeRangeIteratorFactory.getTimeRangeIterator(
@@ -312,7 +316,8 @@ public class TimeRangeIteratorTest {
new TimeDuration(1, 0),
true,
true,
- true),
+ true,
+ ZoneId.systemDefault()),
res2);
checkRes(
TimeRangeIteratorFactory.getTimeRangeIterator(
@@ -322,7 +327,8 @@ public class TimeRangeIteratorTest {
new TimeDuration(0, 10 * MS_TO_DAY),
true,
true,
- false),
+ false,
+ ZoneId.systemDefault()),
res3);
checkRes(
TimeRangeIteratorFactory.getTimeRangeIterator(
@@ -332,7 +338,8 @@ public class TimeRangeIteratorTest {
new TimeDuration(0, 10 * MS_TO_DAY),
true,
true,
- true),
+ true,
+ ZoneId.systemDefault()),
res4);
} finally {
TimeZone.setDefault(oldDefault);
@@ -372,7 +379,8 @@ public class TimeRangeIteratorTest {
new TimeDuration(1, MS_TO_DAY),
true,
true,
- true),
+ true,
+ ZoneId.systemDefault()),
res);
res =
@@ -422,7 +430,8 @@ public class TimeRangeIteratorTest {
new TimeDuration(1, MS_TO_DAY),
true,
true,
- true),
+ true,
+ ZoneId.systemDefault()),
res);
}
diff --git
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/AggregationOperatorTest.java
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/AggregationOperatorTest.java
index fc9fab2c79d..b217921aa20 100644
---
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/AggregationOperatorTest.java
+++
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/AggregationOperatorTest.java
@@ -58,6 +58,7 @@ import org.junit.Before;
import org.junit.Test;
import java.io.IOException;
+import java.time.ZoneId;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@@ -340,7 +341,7 @@ public class AggregationOperatorTest {
scanOptionsBuilder.build(),
driverContext.getOperatorContexts().get(0),
aggregators,
- initTimeRangeIterator(groupByTimeParameter, true, true),
+ initTimeRangeIterator(groupByTimeParameter, true, true,
ZoneId.systemDefault()),
groupByTimeParameter,
DEFAULT_MAX_TSBLOCK_SIZE_IN_BYTES,
true);
@@ -365,7 +366,7 @@ public class AggregationOperatorTest {
scanOptionsBuilder.build(),
driverContext.getOperatorContexts().get(0),
aggregators,
- initTimeRangeIterator(groupByTimeParameter, true, true),
+ initTimeRangeIterator(groupByTimeParameter, true, true,
ZoneId.systemDefault()),
groupByTimeParameter,
DEFAULT_MAX_TSBLOCK_SIZE_IN_BYTES,
true);
@@ -399,7 +400,7 @@ public class AggregationOperatorTest {
return new AggregationOperator(
driverContext.getOperatorContexts().get(2),
finalAggregators,
- initTimeRangeIterator(groupByTimeParameter, true, true),
+ initTimeRangeIterator(groupByTimeParameter, true, true,
ZoneId.systemDefault()),
children,
false,
DEFAULT_MAX_TSBLOCK_SIZE_IN_BYTES);
diff --git
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/AlignedSeriesAggregationScanOperatorTest.java
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/AlignedSeriesAggregationScanOperatorTest.java
index 67f603f9746..2a5c5c13d0b 100644
---
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/AlignedSeriesAggregationScanOperatorTest.java
+++
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/AlignedSeriesAggregationScanOperatorTest.java
@@ -58,6 +58,7 @@ import org.junit.BeforeClass;
import org.junit.Test;
import java.io.IOException;
+import java.time.ZoneId;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
@@ -743,7 +744,7 @@ public class AlignedSeriesAggregationScanOperatorTest {
scanOptionsBuilder.build(),
driverContext.getOperatorContexts().get(0),
aggregators,
- initTimeRangeIterator(groupByTimeParameter, ascending, true),
+ initTimeRangeIterator(groupByTimeParameter, ascending, true,
ZoneId.systemDefault()),
groupByTimeParameter,
DEFAULT_MAX_TSBLOCK_SIZE_IN_BYTES,
true);
diff --git
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/HorizontallyConcatOperatorTest.java
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/HorizontallyConcatOperatorTest.java
index d85a5c45bff..bad50a7e1c9 100644
---
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/HorizontallyConcatOperatorTest.java
+++
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/HorizontallyConcatOperatorTest.java
@@ -54,6 +54,7 @@ import org.junit.Before;
import org.junit.Test;
import java.io.IOException;
+import java.time.ZoneId;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
@@ -147,7 +148,7 @@ public class HorizontallyConcatOperatorTest {
scanOptionsBuilder.build(),
driverContext.getOperatorContexts().get(0),
aggregators,
- initTimeRangeIterator(groupByTimeParameter, true, true),
+ initTimeRangeIterator(groupByTimeParameter, true, true,
ZoneId.systemDefault()),
groupByTimeParameter,
DEFAULT_MAX_TSBLOCK_SIZE_IN_BYTES,
true);
@@ -168,7 +169,7 @@ public class HorizontallyConcatOperatorTest {
scanOptionsBuilder.build(),
driverContext.getOperatorContexts().get(1),
aggregators,
- initTimeRangeIterator(groupByTimeParameter, true, true),
+ initTimeRangeIterator(groupByTimeParameter, true, true,
ZoneId.systemDefault()),
groupByTimeParameter,
DEFAULT_MAX_TSBLOCK_SIZE_IN_BYTES,
true);
diff --git
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/LastQueryOperatorTest.java
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/LastQueryOperatorTest.java
index 879585a033c..23139279d58 100644
---
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/LastQueryOperatorTest.java
+++
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/LastQueryOperatorTest.java
@@ -53,6 +53,7 @@ import org.junit.Before;
import org.junit.Test;
import java.io.IOException;
+import java.time.ZoneId;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
@@ -144,7 +145,7 @@ public class LastQueryOperatorTest {
scanOptionsBuilder.build(),
driverContext.getOperatorContexts().get(0),
aggregators1,
- initTimeRangeIterator(null, false, true),
+ initTimeRangeIterator(null, false, true, ZoneId.systemDefault()),
null,
DEFAULT_MAX_TSBLOCK_SIZE_IN_BYTES,
true);
@@ -170,7 +171,7 @@ public class LastQueryOperatorTest {
scanOptionsBuilder.build(),
driverContext.getOperatorContexts().get(2),
aggregators2,
- initTimeRangeIterator(null, false, true),
+ initTimeRangeIterator(null, false, true, ZoneId.systemDefault()),
null,
DEFAULT_MAX_TSBLOCK_SIZE_IN_BYTES,
true);
@@ -273,7 +274,7 @@ public class LastQueryOperatorTest {
scanOptionsBuilder.build(),
driverContext.getOperatorContexts().get(0),
aggregators1,
- initTimeRangeIterator(null, false, true),
+ initTimeRangeIterator(null, false, true, ZoneId.systemDefault()),
null,
DEFAULT_MAX_TSBLOCK_SIZE_IN_BYTES,
true);
@@ -298,7 +299,7 @@ public class LastQueryOperatorTest {
scanOptionsBuilder.build(),
driverContext.getOperatorContexts().get(2),
aggregators2,
- initTimeRangeIterator(null, false, true),
+ initTimeRangeIterator(null, false, true, ZoneId.systemDefault()),
null,
DEFAULT_MAX_TSBLOCK_SIZE_IN_BYTES,
true);
diff --git
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/LastQuerySortOperatorTest.java
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/LastQuerySortOperatorTest.java
index 4b1164b62a2..e7c66a30970 100644
---
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/LastQuerySortOperatorTest.java
+++
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/LastQuerySortOperatorTest.java
@@ -53,6 +53,7 @@ import org.junit.Before;
import org.junit.Test;
import java.io.IOException;
+import java.time.ZoneId;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
@@ -145,7 +146,7 @@ public class LastQuerySortOperatorTest {
scanOptionsBuilder.build(),
driverContext.getOperatorContexts().get(0),
aggregators1,
- initTimeRangeIterator(null, false, true),
+ initTimeRangeIterator(null, false, true, ZoneId.systemDefault()),
null,
DEFAULT_MAX_TSBLOCK_SIZE_IN_BYTES,
true);
@@ -170,7 +171,7 @@ public class LastQuerySortOperatorTest {
scanOptionsBuilder.build(),
driverContext.getOperatorContexts().get(2),
aggregators2,
- initTimeRangeIterator(null, false, true),
+ initTimeRangeIterator(null, false, true, ZoneId.systemDefault()),
null,
DEFAULT_MAX_TSBLOCK_SIZE_IN_BYTES,
true);
@@ -273,7 +274,7 @@ public class LastQuerySortOperatorTest {
scanOptionsBuilder.build(),
driverContext.getOperatorContexts().get(0),
aggregators1,
- initTimeRangeIterator(null, false, true),
+ initTimeRangeIterator(null, false, true, ZoneId.systemDefault()),
null,
DEFAULT_MAX_TSBLOCK_SIZE_IN_BYTES,
true);
@@ -298,7 +299,7 @@ public class LastQuerySortOperatorTest {
scanOptionsBuilder.build(),
driverContext.getOperatorContexts().get(2),
aggregators2,
- initTimeRangeIterator(null, false, true),
+ initTimeRangeIterator(null, false, true, ZoneId.systemDefault()),
null,
DEFAULT_MAX_TSBLOCK_SIZE_IN_BYTES,
true);
diff --git
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/OperatorMemoryTest.java
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/OperatorMemoryTest.java
index 98c08e658fe..39f79c9ca52 100644
---
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/OperatorMemoryTest.java
+++
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/OperatorMemoryTest.java
@@ -101,6 +101,7 @@ import org.apache.tsfile.utils.TimeDuration;
import org.junit.Test;
import org.mockito.Mockito;
+import java.time.ZoneId;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
@@ -1206,7 +1207,8 @@ public class OperatorMemoryTest {
true),
o.getStep())));
- ITimeRangeIterator timeRangeIterator =
initTimeRangeIterator(groupByTimeParameter, true, true);
+ ITimeRangeIterator timeRangeIterator =
+ initTimeRangeIterator(groupByTimeParameter, true, true,
ZoneId.systemDefault());
long maxReturnSize =
AggregationUtil.calculateMaxAggregationResultSize(
aggregationDescriptors, timeRangeIterator, typeProvider);
@@ -1264,7 +1266,8 @@ public class OperatorMemoryTest {
GroupByTimeParameter groupByTimeParameter =
new GroupByTimeParameter(0, 1000, new TimeDuration(0, 10), new
TimeDuration(0, 10), true);
- ITimeRangeIterator timeRangeIterator =
initTimeRangeIterator(groupByTimeParameter, true, false);
+ ITimeRangeIterator timeRangeIterator =
+ initTimeRangeIterator(groupByTimeParameter, true, false,
ZoneId.systemDefault());
long maxReturnSize =
AggregationUtil.calculateMaxAggregationResultSize(
aggregationDescriptors, timeRangeIterator, typeProvider);
@@ -1337,7 +1340,8 @@ public class OperatorMemoryTest {
GroupByTimeParameter groupByTimeParameter =
new GroupByTimeParameter(0, 1000, new TimeDuration(0, 10), new
TimeDuration(0, 5), true);
- ITimeRangeIterator timeRangeIterator =
initTimeRangeIterator(groupByTimeParameter, true, false);
+ ITimeRangeIterator timeRangeIterator =
+ initTimeRangeIterator(groupByTimeParameter, true, false,
ZoneId.systemDefault());
long maxReturnSize =
AggregationUtil.calculateMaxAggregationResultSize(
aggregationDescriptors, timeRangeIterator, typeProvider);
@@ -1351,7 +1355,8 @@ public class OperatorMemoryTest {
true,
false,
groupByTimeParameter,
- maxReturnSize);
+ maxReturnSize,
+ ZoneId.systemDefault());
long expectedMaxReturnSize =
200
@@ -1417,7 +1422,8 @@ public class OperatorMemoryTest {
GroupByTimeParameter groupByTimeParameter =
new GroupByTimeParameter(0, 1000, new TimeDuration(0, 10), new
TimeDuration(0, 10), true);
- ITimeRangeIterator timeRangeIterator =
initTimeRangeIterator(groupByTimeParameter, true, false);
+ ITimeRangeIterator timeRangeIterator =
+ initTimeRangeIterator(groupByTimeParameter, true, false,
ZoneId.systemDefault());
long maxReturnSize =
AggregationUtil.calculateMaxAggregationResultSize(
aggregationDescriptors, timeRangeIterator, typeProvider);
diff --git
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/RawDataAggregationOperatorTest.java
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/RawDataAggregationOperatorTest.java
index 46cfc59b372..580b1909146 100644
---
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/RawDataAggregationOperatorTest.java
+++
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/RawDataAggregationOperatorTest.java
@@ -66,6 +66,7 @@ import org.junit.Before;
import org.junit.Test;
import java.io.IOException;
+import java.time.ZoneId;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
@@ -988,7 +989,7 @@ public class RawDataAggregationOperatorTest {
return new RawDataAggregationOperator(
driverContext.getOperatorContexts().get(3),
aggregators,
- initTimeRangeIterator(groupByTimeParameter, true, true),
+ initTimeRangeIterator(groupByTimeParameter, true, true,
ZoneId.systemDefault()),
timeJoinOperator,
true,
DEFAULT_MAX_TSBLOCK_SIZE_IN_BYTES,
diff --git
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/SeriesAggregationScanOperatorTest.java
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/SeriesAggregationScanOperatorTest.java
index 84b64112beb..bbf96e89fb4 100644
---
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/SeriesAggregationScanOperatorTest.java
+++
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/SeriesAggregationScanOperatorTest.java
@@ -56,6 +56,7 @@ import org.junit.Before;
import org.junit.Test;
import java.io.IOException;
+import java.time.ZoneId;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@@ -658,7 +659,7 @@ public class SeriesAggregationScanOperatorTest {
scanOptionsBuilder.build(),
driverContext.getOperatorContexts().get(0),
aggregators,
- initTimeRangeIterator(groupByTimeParameter, ascending, true),
+ initTimeRangeIterator(groupByTimeParameter, ascending, true,
ZoneId.systemDefault()),
groupByTimeParameter,
DEFAULT_MAX_TSBLOCK_SIZE_IN_BYTES,
true);
diff --git
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/SlidingWindowAggregationOperatorTest.java
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/SlidingWindowAggregationOperatorTest.java
index f894294104b..c3af0f6ac03 100644
---
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/SlidingWindowAggregationOperatorTest.java
+++
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/SlidingWindowAggregationOperatorTest.java
@@ -58,6 +58,7 @@ import org.junit.Before;
import org.junit.Test;
import java.io.IOException;
+import java.time.ZoneId;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
@@ -257,7 +258,7 @@ public class SlidingWindowAggregationOperatorTest {
scanOptionsBuilder.build(),
driverContext.getOperatorContexts().get(0),
aggregators,
- initTimeRangeIterator(groupByTimeParameter, ascending, true),
+ initTimeRangeIterator(groupByTimeParameter, ascending, true,
ZoneId.systemDefault()),
groupByTimeParameter,
DEFAULT_MAX_TSBLOCK_SIZE_IN_BYTES,
true);
@@ -283,11 +284,12 @@ public class SlidingWindowAggregationOperatorTest {
return new SlidingWindowAggregationOperator(
driverContext.getOperatorContexts().get(1),
finalAggregators,
- initTimeRangeIterator(groupByTimeParameter, ascending, false),
+ initTimeRangeIterator(groupByTimeParameter, ascending, false,
ZoneId.systemDefault()),
seriesAggregationScanOperator,
ascending,
false,
groupByTimeParameter,
- DEFAULT_MAX_TSBLOCK_SIZE_IN_BYTES);
+ DEFAULT_MAX_TSBLOCK_SIZE_IN_BYTES,
+ ZoneId.systemDefault());
}
}
diff --git
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/UpdateLastCacheOperatorTest.java
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/UpdateLastCacheOperatorTest.java
index f39d9157a51..0c9c47815ae 100644
---
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/UpdateLastCacheOperatorTest.java
+++
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/UpdateLastCacheOperatorTest.java
@@ -53,6 +53,7 @@ import org.junit.Before;
import org.junit.Test;
import java.io.IOException;
+import java.time.ZoneId;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
@@ -223,7 +224,7 @@ public class UpdateLastCacheOperatorTest {
scanOptionsBuilder.build(),
driverContext.getOperatorContexts().get(0),
aggregators,
- initTimeRangeIterator(groupByTimeParameter, ascending, true),
+ initTimeRangeIterator(groupByTimeParameter, ascending, true,
ZoneId.systemDefault()),
groupByTimeParameter,
DEFAULT_MAX_TSBLOCK_SIZE_IN_BYTES,
true);
diff --git
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/optimization/LimitOffsetPushDownTest.java
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/optimization/LimitOffsetPushDownTest.java
index bdaba989262..b82d9ed6af2 100644
---
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/optimization/LimitOffsetPushDownTest.java
+++
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/optimization/LimitOffsetPushDownTest.java
@@ -19,9 +19,11 @@
package org.apache.iotdb.db.queryengine.plan.optimization;
+import org.apache.iotdb.common.rpc.thrift.TEndPoint;
import org.apache.iotdb.commons.path.PartialPath;
import org.apache.iotdb.db.queryengine.common.MPPQueryContext;
import org.apache.iotdb.db.queryengine.common.QueryId;
+import org.apache.iotdb.db.queryengine.common.SessionInfo;
import org.apache.iotdb.db.queryengine.plan.analyze.Analysis;
import org.apache.iotdb.db.queryengine.plan.analyze.Analyzer;
import org.apache.iotdb.db.queryengine.plan.analyze.FakePartitionFetcherImpl;
@@ -41,6 +43,7 @@ import
org.apache.iotdb.db.queryengine.plan.statement.crud.QueryStatement;
import org.junit.Assert;
import org.junit.Test;
+import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.ArrayList;
import java.util.Arrays;
@@ -443,7 +446,13 @@ public class LimitOffsetPushDownTest {
long endTime) {
QueryStatement statement =
(QueryStatement) StatementGenerator.createStatement(sql,
ZonedDateTime.now().getOffset());
- MPPQueryContext context = new MPPQueryContext(new QueryId("test_query"));
+ MPPQueryContext context =
+ new MPPQueryContext(
+ "",
+ new QueryId("test_query"),
+ new SessionInfo(-1L, "", ZoneId.systemDefault()),
+ new TEndPoint(),
+ new TEndPoint());
Analyzer analyzer =
new Analyzer(context, new FakePartitionFetcherImpl(), new
FakeSchemaFetcherImpl());
Analysis analysis = analyzer.analyze(statement);