This is an automated email from the ASF dual-hosted git repository.

jackietien pushed a commit to branch KeepAllNullRows
in repository https://gitbox.apache.org/repos/asf/iotdb.git


The following commit(s) were added to refs/heads/KeepAllNullRows by this push:
     new e8d65b38e01 fix memtable scan bug
e8d65b38e01 is described below

commit e8d65b38e01a6e4fdb376afb14faff3d66bfb989
Author: JackieTien97 <[email protected]>
AuthorDate: Wed Sep 11 11:39:30 2024 +0800

    fix memtable scan bug
---
 .../read/reader/chunk/MemAlignedPageReader.java    | 32 ++++++----------------
 .../metadata/DiskAlignedChunkMetadataLoader.java   |  4 +--
 2 files changed, 11 insertions(+), 25 deletions(-)

diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/MemAlignedPageReader.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/MemAlignedPageReader.java
index f2affe64702..473cd7366c3 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/MemAlignedPageReader.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/MemAlignedPageReader.java
@@ -69,10 +69,9 @@ public class MemAlignedPageReader implements IPageReader {
     BatchData batchData = BatchDataFactory.createBatchData(TSDataType.VECTOR, 
ascending, false);
 
     boolean[] satisfyInfo = buildSatisfyInfoArray();
-    boolean[] hasValue = buildHasValueArray();
 
     for (int rowIndex = 0; rowIndex < tsBlock.getPositionCount(); rowIndex++) {
-      if (satisfyInfo[rowIndex] && hasValue[rowIndex]) {
+      if (satisfyInfo[rowIndex]) {
         long time = tsBlock.getTimeByIndex(rowIndex);
         TsPrimitiveType[] values = new 
TsPrimitiveType[tsBlock.getValueColumnCount()];
         for (int column = 0; column < tsBlock.getValueColumnCount(); column++) 
{
@@ -91,13 +90,12 @@ public class MemAlignedPageReader implements IPageReader {
     builder.reset();
 
     boolean[] satisfyInfo = buildSatisfyInfoArray();
-    boolean[] hasValue = buildHasValueArray();
 
     // build time column
-    int readEndIndex = buildTimeColumn(satisfyInfo, hasValue);
+    int readEndIndex = buildTimeColumn(satisfyInfo);
 
     // build value column
-    buildValueColumns(satisfyInfo, hasValue, readEndIndex);
+    buildValueColumns(satisfyInfo, readEndIndex);
 
     return builder.build();
   }
@@ -111,23 +109,11 @@ public class MemAlignedPageReader implements IPageReader {
     return recordFilter.satisfyTsBlock(tsBlock);
   }
 
-  private boolean[] buildHasValueArray() {
-    boolean[] hasValue = new boolean[tsBlock.getPositionCount()];
-    // other value column
-    for (int column = 0; column < tsBlock.getValueColumnCount(); column++) {
-      Column valueColumn = tsBlock.getColumn(column);
-      for (int row = 0; row < tsBlock.getPositionCount(); row++) {
-        hasValue[row] = hasValue[row] || !valueColumn.isNull(row);
-      }
-    }
-    return hasValue;
-  }
-
-  private int buildTimeColumn(boolean[] satisfyInfo, boolean[] hasValue) {
+  private int buildTimeColumn(boolean[] satisfyInfo) {
     int readEndIndex = tsBlock.getPositionCount();
     for (int row = 0; row < readEndIndex; row++) {
 
-      if (needSkipCurrentRow(satisfyInfo, hasValue, row)) {
+      if (needSkipCurrentRow(satisfyInfo, row)) {
         continue;
       }
 
@@ -142,8 +128,8 @@ public class MemAlignedPageReader implements IPageReader {
     return readEndIndex;
   }
 
-  private boolean needSkipCurrentRow(boolean[] satisfyInfo, boolean[] 
hasValue, int rowIndex) {
-    if (!satisfyInfo[rowIndex] || !hasValue[rowIndex]) {
+  private boolean needSkipCurrentRow(boolean[] satisfyInfo, int rowIndex) {
+    if (!satisfyInfo[rowIndex]) {
       return true;
     }
     if (paginationController.hasCurOffset()) {
@@ -154,12 +140,12 @@ public class MemAlignedPageReader implements IPageReader {
     return false;
   }
 
-  private void buildValueColumns(boolean[] satisfyInfo, boolean[] hasValue, 
int readEndIndex) {
+  private void buildValueColumns(boolean[] satisfyInfo, int readEndIndex) {
     for (int column = 0; column < tsBlock.getValueColumnCount(); column++) {
       Column valueColumn = tsBlock.getColumn(column);
       ColumnBuilder valueBuilder = builder.getColumnBuilder(column);
       for (int row = 0; row < readEndIndex; row++) {
-        if (satisfyInfo[row] && hasValue[row]) {
+        if (satisfyInfo[row]) {
           if (!valueColumn.isNull(row)) {
             valueBuilder.write(valueColumn, row);
           } else {
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/metadata/DiskAlignedChunkMetadataLoader.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/metadata/DiskAlignedChunkMetadataLoader.java
index da9895406eb..24a88cc6cd0 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/metadata/DiskAlignedChunkMetadataLoader.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/metadata/DiskAlignedChunkMetadataLoader.java
@@ -26,8 +26,8 @@ import 
org.apache.iotdb.db.storageengine.dataregion.read.reader.chunk.DiskAligne
 import org.apache.iotdb.db.storageengine.dataregion.tsfile.TsFileResource;
 import org.apache.iotdb.db.utils.ModificationUtils;
 
+import org.apache.tsfile.file.metadata.AbstractAlignedTimeSeriesMetadata;
 import org.apache.tsfile.file.metadata.AlignedChunkMetadata;
-import org.apache.tsfile.file.metadata.AlignedTimeSeriesMetadata;
 import org.apache.tsfile.file.metadata.IChunkMetadata;
 import org.apache.tsfile.file.metadata.ITimeSeriesMetadata;
 import org.apache.tsfile.read.controller.IChunkMetadataLoader;
@@ -84,7 +84,7 @@ public class DiskAlignedChunkMetadataLoader implements 
IChunkMetadataLoader {
     final long t1 = System.nanoTime();
     try {
       List<AlignedChunkMetadata> alignedChunkMetadataList =
-          ((AlignedTimeSeriesMetadata) 
timeSeriesMetadata).getCopiedChunkMetadataList();
+          ((AbstractAlignedTimeSeriesMetadata) 
timeSeriesMetadata).getCopiedChunkMetadataList();
 
       // when alignedChunkMetadataList.size() == 1, it means that the chunk 
statistics is same as
       // the time series metadata, so we don't need to filter it again.

Reply via email to