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/tsfile.git


The following commit(s) were added to refs/heads/KeepAllNullRows by this push:
     new 51cf1309 done
51cf1309 is described below

commit 51cf1309e7ca46d49fec437ac7232b1c19dd7869
Author: JackieTien97 <[email protected]>
AuthorDate: Tue Sep 10 19:02:22 2024 +0800

    done
---
 ...java => AbstractAlignedTimeSeriesMetadata.java} |  43 ++----
 .../file/metadata/AlignedTimeSeriesMetadata.java   | 168 ++-------------------
 .../tsfile/file/metadata/TableDeviceMetadata.java  |  50 ++++++
 .../tsfile/read/reader/chunk/TableChunkReader.java |   5 +
 4 files changed, 76 insertions(+), 190 deletions(-)

diff --git 
a/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/AlignedTimeSeriesMetadata.java
 
b/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/AbstractAlignedTimeSeriesMetadata.java
similarity index 84%
copy from 
java/tsfile/src/main/java/org/apache/tsfile/file/metadata/AlignedTimeSeriesMetadata.java
copy to 
java/tsfile/src/main/java/org/apache/tsfile/file/metadata/AbstractAlignedTimeSeriesMetadata.java
index 583f08ea..4e812a89 100644
--- 
a/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/AlignedTimeSeriesMetadata.java
+++ 
b/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/AbstractAlignedTimeSeriesMetadata.java
@@ -29,32 +29,21 @@ import java.util.Collections;
 import java.util.List;
 import java.util.Optional;
 
-public class AlignedTimeSeriesMetadata implements ITimeSeriesMetadata {
+public abstract class AbstractAlignedTimeSeriesMetadata implements 
ITimeSeriesMetadata {
 
   // TimeSeriesMetadata for time column
-  private final TimeseriesMetadata timeseriesMetadata;
+  protected final TimeseriesMetadata timeseriesMetadata;
   // TimeSeriesMetadata for all subSensors in the vector
-  private final List<TimeseriesMetadata> valueTimeseriesMetadataList;
+  protected final List<TimeseriesMetadata> valueTimeseriesMetadataList;
 
-  private IChunkMetadataLoader chunkMetadataLoader;
+  protected IChunkMetadataLoader chunkMetadataLoader;
 
-  public AlignedTimeSeriesMetadata(
+  AbstractAlignedTimeSeriesMetadata(
       TimeseriesMetadata timeseriesMetadata, List<TimeseriesMetadata> 
valueTimeseriesMetadataList) {
     this.timeseriesMetadata = timeseriesMetadata;
     this.valueTimeseriesMetadataList = valueTimeseriesMetadataList;
   }
 
-  /**
-   * If the vector contains only one sub sensor, just return the sub sensor's 
Statistics Otherwise,
-   * return the Statistics of the time column.
-   */
-  @Override
-  public Statistics getStatistics() {
-    return valueTimeseriesMetadataList.size() == 1 && 
valueTimeseriesMetadataList.get(0) != null
-        ? valueTimeseriesMetadataList.get(0).getStatistics()
-        : timeseriesMetadata.getStatistics();
-  }
-
   @Override
   public Statistics<? extends Serializable> getTimeStatistics() {
     return timeseriesMetadata.getStatistics();
@@ -80,18 +69,6 @@ public class AlignedTimeSeriesMetadata implements 
ITimeSeriesMetadata {
     return valueTimeseriesMetadataList.size();
   }
 
-  @Override
-  public boolean timeAllSelected() {
-    for (int index = 0; index < getMeasurementCount(); index++) {
-      if (!hasNullValue(index)) {
-        // When there is any value page point number that is the same as the 
time page,
-        // it means that all timestamps in time page will be selected.
-        return true;
-      }
-    }
-    return false;
-  }
-
   @Override
   public boolean isModified() {
     return timeseriesMetadata.isModified();
@@ -176,14 +153,18 @@ public class AlignedTimeSeriesMetadata implements 
ITimeSeriesMetadata {
           exits = (exits || v != null);
           chunkMetadataList.add(v);
         }
-        if (exits) {
-          res.add(new AlignedChunkMetadata(timeChunkMetadata.get(i), 
chunkMetadataList));
-        }
+        constructAlignedChunkMetadata(res, timeChunkMetadata.get(i), 
chunkMetadataList, exits);
       }
     }
     return res;
   }
 
+  abstract void constructAlignedChunkMetadata(
+      List<AlignedChunkMetadata> res,
+      IChunkMetadata timeChunkMetadata,
+      List<IChunkMetadata> chunkMetadataList,
+      boolean exits);
+
   @Override
   public void setChunkMetadataLoader(IChunkMetadataLoader chunkMetadataLoader) 
{
     this.chunkMetadataLoader = chunkMetadataLoader;
diff --git 
a/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/AlignedTimeSeriesMetadata.java
 
b/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/AlignedTimeSeriesMetadata.java
index 583f08ea..ba5cbce4 100644
--- 
a/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/AlignedTimeSeriesMetadata.java
+++ 
b/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/AlignedTimeSeriesMetadata.java
@@ -19,29 +19,15 @@
 
 package org.apache.tsfile.file.metadata;
 
-import org.apache.tsfile.enums.TSDataType;
 import org.apache.tsfile.file.metadata.statistics.Statistics;
-import org.apache.tsfile.read.controller.IChunkMetadataLoader;
 
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Collections;
 import java.util.List;
-import java.util.Optional;
 
-public class AlignedTimeSeriesMetadata implements ITimeSeriesMetadata {
-
-  // TimeSeriesMetadata for time column
-  private final TimeseriesMetadata timeseriesMetadata;
-  // TimeSeriesMetadata for all subSensors in the vector
-  private final List<TimeseriesMetadata> valueTimeseriesMetadataList;
-
-  private IChunkMetadataLoader chunkMetadataLoader;
+public class AlignedTimeSeriesMetadata extends 
AbstractAlignedTimeSeriesMetadata {
 
   public AlignedTimeSeriesMetadata(
       TimeseriesMetadata timeseriesMetadata, List<TimeseriesMetadata> 
valueTimeseriesMetadataList) {
-    this.timeseriesMetadata = timeseriesMetadata;
-    this.valueTimeseriesMetadataList = valueTimeseriesMetadataList;
+    super(timeseriesMetadata, valueTimeseriesMetadataList);
   }
 
   /**
@@ -55,31 +41,6 @@ public class AlignedTimeSeriesMetadata implements 
ITimeSeriesMetadata {
         : timeseriesMetadata.getStatistics();
   }
 
-  @Override
-  public Statistics<? extends Serializable> getTimeStatistics() {
-    return timeseriesMetadata.getStatistics();
-  }
-
-  @Override
-  public Optional<Statistics<? extends Serializable>> getMeasurementStatistics(
-      int measurementIndex) {
-    TimeseriesMetadata metadata = 
valueTimeseriesMetadataList.get(measurementIndex);
-    return Optional.ofNullable(metadata == null ? null : 
metadata.getStatistics());
-  }
-
-  @Override
-  public boolean hasNullValue(int measurementIndex) {
-    long rowCount = getTimeStatistics().getCount();
-    Optional<Statistics<? extends Serializable>> statistics =
-        getMeasurementStatistics(measurementIndex);
-    return statistics.map(stat -> stat.hasNullValue(rowCount)).orElse(true);
-  }
-
-  @Override
-  public int getMeasurementCount() {
-    return valueTimeseriesMetadataList.size();
-  }
-
   @Override
   public boolean timeAllSelected() {
     for (int index = 0; index < getMeasurementCount(); index++) {
@@ -93,124 +54,13 @@ public class AlignedTimeSeriesMetadata implements 
ITimeSeriesMetadata {
   }
 
   @Override
-  public boolean isModified() {
-    return timeseriesMetadata.isModified();
-  }
-
-  @Override
-  public void setModified(boolean modified) {
-    timeseriesMetadata.setModified(modified);
-    for (TimeseriesMetadata subSensor : valueTimeseriesMetadataList) {
-      if (subSensor != null) {
-        subSensor.setModified(modified);
-      }
-    }
-  }
-
-  @Override
-  public boolean isSeq() {
-    return timeseriesMetadata.isSeq();
-  }
-
-  @Override
-  public void setSeq(boolean seq) {
-    timeseriesMetadata.setSeq(seq);
-    for (TimeseriesMetadata subSensor : valueTimeseriesMetadataList) {
-      if (subSensor != null) {
-        subSensor.setSeq(seq);
-      }
+  void constructAlignedChunkMetadata(
+      List<AlignedChunkMetadata> res,
+      IChunkMetadata timeChunkMetadata,
+      List<IChunkMetadata> chunkMetadataList,
+      boolean exits) {
+    if (exits) {
+      res.add(new AlignedChunkMetadata(timeChunkMetadata, chunkMetadataList));
     }
   }
-
-  /**
-   * If the chunkMetadataLoader is MemChunkMetadataLoader, the 
VectorChunkMetadata is already
-   * assembled while constructing the in-memory TsFileResource, so we just 
return the assembled
-   * VectorChunkMetadata list.
-   *
-   * <p>Otherwise, we need to assemble the ChunkMetadata of time column and 
the ChunkMetadata of all
-   * the subSensors to generate the VectorChunkMetadata
-   */
-  @Override
-  public List<IChunkMetadata> loadChunkMetadataList() {
-    return chunkMetadataLoader.loadChunkMetadataList(this);
-  }
-
-  public List<AlignedChunkMetadata> getCopiedChunkMetadataList() {
-    List<IChunkMetadata> timeChunkMetadata = 
timeseriesMetadata.getCopiedChunkMetadataList();
-    List<List<IChunkMetadata>> valueChunkMetadataList = new ArrayList<>();
-    for (TimeseriesMetadata metadata : valueTimeseriesMetadataList) {
-      valueChunkMetadataList.add(metadata == null ? null : 
metadata.getCopiedChunkMetadataList());
-    }
-
-    return getAlignedChunkMetadata(timeChunkMetadata, valueChunkMetadataList);
-  }
-
-  public List<AlignedChunkMetadata> getChunkMetadataList() {
-    List<IChunkMetadata> timeChunkMetadata = 
timeseriesMetadata.getChunkMetadataList();
-    List<List<IChunkMetadata>> valueChunkMetadataList = new ArrayList<>();
-    for (TimeseriesMetadata metadata : valueTimeseriesMetadataList) {
-      valueChunkMetadataList.add(metadata == null ? null : 
metadata.getChunkMetadataList());
-    }
-
-    return getAlignedChunkMetadata(timeChunkMetadata, valueChunkMetadataList);
-  }
-
-  /** Notice: if all the value chunks is empty chunk, then return empty list. 
*/
-  private List<AlignedChunkMetadata> getAlignedChunkMetadata(
-      List<IChunkMetadata> timeChunkMetadata, List<List<IChunkMetadata>> 
valueChunkMetadataList) {
-    List<AlignedChunkMetadata> res = new ArrayList<>();
-    for (int i = 0; i < timeChunkMetadata.size(); i++) {
-      // only need time column
-      if (valueTimeseriesMetadataList.isEmpty()) {
-        res.add(new AlignedChunkMetadata(timeChunkMetadata.get(i), 
Collections.emptyList()));
-      } else {
-        List<IChunkMetadata> chunkMetadataList = new ArrayList<>();
-        // only at least one sensor exits, we add the AlignedChunkMetadata to 
the list
-        boolean exits = false;
-        for (List<IChunkMetadata> chunkMetadata : valueChunkMetadataList) {
-          IChunkMetadata v =
-              chunkMetadata == null
-                      || chunkMetadata.get(i).getStatistics().getCount() == 0 
// empty chunk
-                  ? null
-                  : chunkMetadata.get(i);
-          exits = (exits || v != null);
-          chunkMetadataList.add(v);
-        }
-        if (exits) {
-          res.add(new AlignedChunkMetadata(timeChunkMetadata.get(i), 
chunkMetadataList));
-        }
-      }
-    }
-    return res;
-  }
-
-  @Override
-  public void setChunkMetadataLoader(IChunkMetadataLoader chunkMetadataLoader) 
{
-    this.chunkMetadataLoader = chunkMetadataLoader;
-  }
-
-  @Override
-  public boolean typeMatch(List<TSDataType> dataTypes) {
-    if (valueTimeseriesMetadataList != null) {
-      int notMatchCount = 0;
-      for (int i = 0, size = dataTypes.size(); i < size; i++) {
-        TimeseriesMetadata valueTimeSeriesMetadata = 
valueTimeseriesMetadataList.get(i);
-        if (valueTimeSeriesMetadata != null
-            && !valueTimeSeriesMetadata.typeMatch(dataTypes.get(i))) {
-          valueTimeseriesMetadataList.set(i, null);
-          notMatchCount++;
-        }
-      }
-      return notMatchCount != dataTypes.size();
-    }
-    return true;
-  }
-
-  public List<TimeseriesMetadata> getValueTimeseriesMetadataList() {
-    return valueTimeseriesMetadataList;
-  }
-
-  public TimeseriesMetadata getTimeseriesMetadata() {
-    return timeseriesMetadata;
-  }
 }
diff --git 
a/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/TableDeviceMetadata.java
 
b/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/TableDeviceMetadata.java
new file mode 100644
index 00000000..8614a532
--- /dev/null
+++ 
b/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/TableDeviceMetadata.java
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.tsfile.file.metadata;
+
+import org.apache.tsfile.file.metadata.statistics.Statistics;
+
+import java.util.List;
+
+public class TableDeviceMetadata extends AbstractAlignedTimeSeriesMetadata {
+
+  public TableDeviceMetadata(
+      TimeseriesMetadata timeseriesMetadata, List<TimeseriesMetadata> 
valueTimeseriesMetadataList) {
+    super(timeseriesMetadata, valueTimeseriesMetadataList);
+  }
+
+  /**
+   * If the vector contains only one sub sensor, just return the sub sensor's 
Statistics Otherwise,
+   * return the Statistics of the time column.
+   */
+  @Override
+  public Statistics getStatistics() {
+    return timeseriesMetadata.getStatistics();
+  }
+
+  @Override
+  void constructAlignedChunkMetadata(
+      List<AlignedChunkMetadata> res,
+      IChunkMetadata timeChunkMetadata,
+      List<IChunkMetadata> chunkMetadataList,
+      boolean exits) {
+    res.add(new AlignedChunkMetadata(timeChunkMetadata, chunkMetadataList));
+  }
+}
diff --git 
a/java/tsfile/src/main/java/org/apache/tsfile/read/reader/chunk/TableChunkReader.java
 
b/java/tsfile/src/main/java/org/apache/tsfile/read/reader/chunk/TableChunkReader.java
index 8b10b8b0..01a39810 100644
--- 
a/java/tsfile/src/main/java/org/apache/tsfile/read/reader/chunk/TableChunkReader.java
+++ 
b/java/tsfile/src/main/java/org/apache/tsfile/read/reader/chunk/TableChunkReader.java
@@ -46,6 +46,11 @@ public class TableChunkReader extends 
AbstractAlignedChunkReader {
     timeDeleteIntervalsList = timeChunk.getDeleteIntervalList();
   }
 
+  public TableChunkReader(Chunk timeChunk, List<Chunk> valueChunkList, Filter 
queryFilter)
+      throws IOException {
+    this(timeChunk, valueChunkList, Long.MIN_VALUE, queryFilter);
+  }
+
   @Override
   boolean needSkipForSinglePageChunk(boolean isAllNull, PageHeader 
timePageHeader) {
     return isEarlierThanReadStopTime(timePageHeader);

Reply via email to