Skip to content

Commit 0dcd3e6

Browse files
authored
[to dev/1.3] Page time range set in TVListIterator is not processed
1 parent c2c5026 commit 0dcd3e6

3 files changed

Lines changed: 37 additions & 6 deletions

File tree

‎iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/datastructure/TVList.java‎

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -813,6 +813,9 @@ public TsBlock nextBatch() {
813813
case BOOLEAN:
814814
while (index < rows && builder.getPositionCount() < maxNumberOfPointsInPage) {
815815
long time = getTime(getScanOrderIndex(index));
816+
if (isCurrentTimeExceedTimeRange(time)) {
817+
break;
818+
}
816819
if (!isNullValue(getValueIndex(getScanOrderIndex(index)))
817820
&& !isPointDeleted(time, deletionList, deleteCursor, scanOrder)
818821
&& isLatestPoint(index, time)
@@ -831,6 +834,9 @@ && isTimeSatisfied(time)) {
831834
case DATE:
832835
while (index < rows && builder.getPositionCount() < maxNumberOfPointsInPage) {
833836
long time = getTime(getScanOrderIndex(index));
837+
if (isCurrentTimeExceedTimeRange(time)) {
838+
break;
839+
}
834840
if (!isNullValue(getValueIndex(getScanOrderIndex(index)))
835841
&& !isPointDeleted(time, deletionList, deleteCursor, scanOrder)
836842
&& isLatestPoint(index, time)
@@ -849,6 +855,9 @@ && isTimeSatisfied(time)) {
849855
case TIMESTAMP:
850856
while (index < rows && builder.getPositionCount() < maxNumberOfPointsInPage) {
851857
long time = getTime(getScanOrderIndex(index));
858+
if (isCurrentTimeExceedTimeRange(time)) {
859+
break;
860+
}
852861
if (!isNullValue(getValueIndex(getScanOrderIndex(index)))
853862
&& !isPointDeleted(time, deletionList, deleteCursor, scanOrder)
854863
&& isLatestPoint(index, time)
@@ -866,6 +875,9 @@ && isTimeSatisfied(time)) {
866875
case FLOAT:
867876
while (index < rows && builder.getPositionCount() < maxNumberOfPointsInPage) {
868877
long time = getTime(getScanOrderIndex(index));
878+
if (isCurrentTimeExceedTimeRange(time)) {
879+
break;
880+
}
869881
if (!isNullValue(getValueIndex(getScanOrderIndex(index)))
870882
&& !isPointDeleted(time, deletionList, deleteCursor, scanOrder)
871883
&& isLatestPoint(index, time)
@@ -885,6 +897,9 @@ && isTimeSatisfied(time)) {
885897
case DOUBLE:
886898
while (index < rows && builder.getPositionCount() < maxNumberOfPointsInPage) {
887899
long time = getTime(getScanOrderIndex(index));
900+
if (isCurrentTimeExceedTimeRange(time)) {
901+
break;
902+
}
888903
if (!isNullValue(getValueIndex(getScanOrderIndex(index)))
889904
&& !isPointDeleted(time, deletionList, deleteCursor, scanOrder)
890905
&& isLatestPoint(index, time)
@@ -906,6 +921,9 @@ && isTimeSatisfied(time)) {
906921
case STRING:
907922
while (index < rows && builder.getPositionCount() < maxNumberOfPointsInPage) {
908923
long time = getTime(getScanOrderIndex(index));
924+
if (isCurrentTimeExceedTimeRange(time)) {
925+
break;
926+
}
909927
if (!isNullValue(getValueIndex(getScanOrderIndex(index)))
910928
&& !isPointDeleted(time, deletionList, deleteCursor, scanOrder)
911929
&& isLatestPoint(index, time)

‎iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/memtable/AlignedTVListIteratorTest.java‎

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -618,11 +618,15 @@ private void testAligned(
618618
List<Statistics<? extends Serializable>> pageStatisticsList = chunk.getTimeStatisticsList();
619619
int count = 0;
620620
long offset = paginationController.getCurOffset();
621+
if (!scanOrder.isAscending()) {
622+
Collections.reverse(pageStatisticsList);
623+
}
621624
for (Statistics<? extends Serializable> statistics : pageStatisticsList) {
622-
if (statistics.getStartTime() <= statistics.getEndTime()) {
623-
memPointIterator.setCurrentPageTimeRange(
624-
new TimeRange(statistics.getStartTime(), statistics.getEndTime()));
625-
}
625+
TimeRange currentTimeRange =
626+
(statistics.getStartTime() <= statistics.getEndTime())
627+
? new TimeRange(statistics.getStartTime(), statistics.getEndTime())
628+
: null;
629+
memPointIterator.setCurrentPageTimeRange(currentTimeRange);
626630
while (memPointIterator.hasNextBatch()) {
627631
TsBlock tsBlock = memPointIterator.nextBatch();
628632
for (int i = 0; i < tsBlock.getPositionCount(); i++) {
@@ -635,6 +639,8 @@ private void testAligned(
635639
count++;
636640
}
637641
long currentTimestamp = tsBlock.getTimeByIndex(i);
642+
Assert.assertTrue(
643+
currentTimeRange == null || currentTimeRange.contains(currentTimestamp));
638644
Long int64Value = tsBlock.getColumn(0).isNull(i) ? null : tsBlock.getColumn(0).getLong(i);
639645
Boolean boolValue =
640646
tsBlock.getColumn(1).isNull(i) ? null : tsBlock.getColumn(1).getBoolean(i);

‎iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/memtable/NonAlignedTVListIteratorTest.java‎

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -497,9 +497,15 @@ private void testNonAligned(
497497
List<Statistics<? extends Serializable>> pageStatisticsList = chunk.getPageStatisticsList();
498498
int count = 0;
499499
long offset = paginationController.getCurOffset();
500+
if (!scanOrder.isAscending()) {
501+
Collections.reverse(pageStatisticsList);
502+
}
500503
for (Statistics<? extends Serializable> statistics : pageStatisticsList) {
501-
memPointIterator.setCurrentPageTimeRange(
502-
new TimeRange(statistics.getStartTime(), statistics.getEndTime()));
504+
TimeRange currentTimeRange =
505+
(statistics.getStartTime() <= statistics.getEndTime())
506+
? new TimeRange(statistics.getStartTime(), statistics.getEndTime())
507+
: null;
508+
memPointIterator.setCurrentPageTimeRange(currentTimeRange);
503509
while (memPointIterator.hasNextBatch()) {
504510
TsBlock tsBlock = memPointIterator.nextBatch();
505511
for (int i = 0; i < tsBlock.getPositionCount(); i++) {
@@ -512,6 +518,7 @@ private void testNonAligned(
512518
count++;
513519
}
514520
long currentTimestamp = tsBlock.getTimeByIndex(i);
521+
Assert.assertTrue(currentTimeRange.contains(currentTimestamp));
515522
long value = tsBlock.getColumn(0).getLong(i);
516523
Assert.assertEquals(currentTimestamp, value);
517524
if (globalTimeFilter != null) {

0 commit comments

Comments
 (0)