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

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

commit 35196b44fa29156189f0be0e03c9333e9a0e3e30
Author: JackieTien97 <[email protected]>
AuthorDate: Sat Jan 25 18:01:32 2025 +0800

    Add TableDeviceChunkMetadata
---
 ...data.java => AbstractAlignedChunkMetadata.java} |  27 +---
 .../AbstractAlignedTimeSeriesMetadata.java         |  13 +-
 .../tsfile/file/metadata/AlignedChunkMetadata.java | 166 +--------------------
 .../file/metadata/AlignedTimeSeriesMetadata.java   |   8 +-
 ...Metadata.java => TableDeviceChunkMetadata.java} |  26 +---
 ...ata.java => TableDeviceTimeSeriesMetadata.java} |  14 +-
 .../apache/tsfile/read/TsFileSequenceReader.java   |   6 +-
 7 files changed, 41 insertions(+), 219 deletions(-)

diff --git 
a/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/AlignedChunkMetadata.java
 
b/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/AbstractAlignedChunkMetadata.java
similarity index 85%
copy from 
java/tsfile/src/main/java/org/apache/tsfile/file/metadata/AlignedChunkMetadata.java
copy to 
java/tsfile/src/main/java/org/apache/tsfile/file/metadata/AbstractAlignedChunkMetadata.java
index c92443be1..4bbc28581 100644
--- 
a/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/AlignedChunkMetadata.java
+++ 
b/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/AbstractAlignedChunkMetadata.java
@@ -29,29 +29,22 @@ import java.io.Serializable;
 import java.util.List;
 import java.util.Optional;
 
-public class AlignedChunkMetadata implements IChunkMetadata {
+public abstract class AbstractAlignedChunkMetadata implements IChunkMetadata {
 
   // ChunkMetadata for time column
-  private final IChunkMetadata timeChunkMetadata;
+  protected final IChunkMetadata timeChunkMetadata;
   // ChunkMetadata for all subSensors in the vector
-  private final List<IChunkMetadata> valueChunkMetadataList;
+  protected final List<IChunkMetadata> valueChunkMetadataList;
 
   /** ChunkLoader of metadata, used to create IChunkReader */
   private IChunkLoader chunkLoader;
 
-  public AlignedChunkMetadata(
+  AbstractAlignedChunkMetadata(
       IChunkMetadata timeChunkMetadata, List<IChunkMetadata> 
valueChunkMetadataList) {
     this.timeChunkMetadata = timeChunkMetadata;
     this.valueChunkMetadataList = valueChunkMetadataList;
   }
 
-  @Override
-  public Statistics<? extends Serializable> getStatistics() {
-    return valueChunkMetadataList.size() == 1 && valueChunkMetadataList.get(0) 
!= null
-        ? valueChunkMetadataList.get(0).getStatistics()
-        : timeChunkMetadata.getStatistics();
-  }
-
   @Override
   public Statistics<? extends Serializable> getTimeStatistics() {
     return timeChunkMetadata.getStatistics();
@@ -77,18 +70,6 @@ public class AlignedChunkMetadata implements IChunkMetadata {
     return valueChunkMetadataList.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 timeChunkMetadata.isModified();
diff --git 
a/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/AbstractAlignedTimeSeriesMetadata.java
 
b/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/AbstractAlignedTimeSeriesMetadata.java
index f9762f07e..f793f7c5d 100644
--- 
a/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/AbstractAlignedTimeSeriesMetadata.java
+++ 
b/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/AbstractAlignedTimeSeriesMetadata.java
@@ -112,7 +112,7 @@ public abstract class AbstractAlignedTimeSeriesMetadata 
implements ITimeSeriesMe
     return chunkMetadataLoader.loadChunkMetadataList(this);
   }
 
-  public List<AlignedChunkMetadata> getCopiedChunkMetadataList() {
+  public List<AbstractAlignedChunkMetadata> getCopiedChunkMetadataList() {
     List<IChunkMetadata> timeChunkMetadata = 
timeseriesMetadata.getCopiedChunkMetadataList();
     List<List<IChunkMetadata>> valueChunkMetadataList = new ArrayList<>();
     for (TimeseriesMetadata metadata : valueTimeseriesMetadataList) {
@@ -122,7 +122,7 @@ public abstract class AbstractAlignedTimeSeriesMetadata 
implements ITimeSeriesMe
     return getAlignedChunkMetadata(timeChunkMetadata, valueChunkMetadataList);
   }
 
-  public List<AlignedChunkMetadata> getChunkMetadataList() {
+  public List<AbstractAlignedChunkMetadata> getChunkMetadataList() {
     List<IChunkMetadata> timeChunkMetadata = 
timeseriesMetadata.getChunkMetadataList();
     List<List<IChunkMetadata>> valueChunkMetadataList = new ArrayList<>();
     for (TimeseriesMetadata metadata : valueTimeseriesMetadataList) {
@@ -133,9 +133,9 @@ public abstract class AbstractAlignedTimeSeriesMetadata 
implements ITimeSeriesMe
   }
 
   /** Notice: if all the value chunks is empty chunk, then return empty list. 
*/
-  private List<AlignedChunkMetadata> getAlignedChunkMetadata(
+  private List<AbstractAlignedChunkMetadata> getAlignedChunkMetadata(
       List<IChunkMetadata> timeChunkMetadata, List<List<IChunkMetadata>> 
valueChunkMetadataList) {
-    List<AlignedChunkMetadata> res = new ArrayList<>();
+    List<AbstractAlignedChunkMetadata> res = new ArrayList<>();
     for (int i = 0; i < timeChunkMetadata.size(); i++) {
       // only need time column
       if (valueTimeseriesMetadataList.isEmpty()) {
@@ -160,11 +160,14 @@ public abstract class AbstractAlignedTimeSeriesMetadata 
implements ITimeSeriesMe
   }
 
   abstract void constructAlignedChunkMetadata(
-      List<AlignedChunkMetadata> res,
+      List<AbstractAlignedChunkMetadata> res,
       IChunkMetadata timeChunkMetadata,
       List<IChunkMetadata> chunkMetadataList,
       boolean exits);
 
+  abstract AbstractAlignedChunkMetadata constructOnlyTimeChunkMetadata(
+      IChunkMetadata timeChunkMetadata);
+
   @Override
   public void setChunkMetadataLoader(IChunkMetadataLoader chunkMetadataLoader) 
{
     this.chunkMetadataLoader = chunkMetadataLoader;
diff --git 
a/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/AlignedChunkMetadata.java
 
b/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/AlignedChunkMetadata.java
index c92443be1..81df89ca2 100644
--- 
a/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/AlignedChunkMetadata.java
+++ 
b/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/AlignedChunkMetadata.java
@@ -19,30 +19,16 @@
 
 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.common.TimeRange;
-import org.apache.tsfile.read.controller.IChunkLoader;
 
-import java.io.OutputStream;
 import java.io.Serializable;
 import java.util.List;
-import java.util.Optional;
 
-public class AlignedChunkMetadata implements IChunkMetadata {
-
-  // ChunkMetadata for time column
-  private final IChunkMetadata timeChunkMetadata;
-  // ChunkMetadata for all subSensors in the vector
-  private final List<IChunkMetadata> valueChunkMetadataList;
-
-  /** ChunkLoader of metadata, used to create IChunkReader */
-  private IChunkLoader chunkLoader;
+public class AlignedChunkMetadata extends AbstractAlignedChunkMetadata {
 
   public AlignedChunkMetadata(
       IChunkMetadata timeChunkMetadata, List<IChunkMetadata> 
valueChunkMetadataList) {
-    this.timeChunkMetadata = timeChunkMetadata;
-    this.valueChunkMetadataList = valueChunkMetadataList;
+    super(timeChunkMetadata, valueChunkMetadataList);
   }
 
   @Override
@@ -52,31 +38,6 @@ public class AlignedChunkMetadata implements IChunkMetadata {
         : timeChunkMetadata.getStatistics();
   }
 
-  @Override
-  public Statistics<? extends Serializable> getTimeStatistics() {
-    return timeChunkMetadata.getStatistics();
-  }
-
-  @Override
-  public Optional<Statistics<? extends Serializable>> getMeasurementStatistics(
-      int measurementIndex) {
-    IChunkMetadata chunkMetadata = 
valueChunkMetadataList.get(measurementIndex);
-    return Optional.ofNullable(chunkMetadata == null ? null : 
chunkMetadata.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 valueChunkMetadataList.size();
-  }
-
   @Override
   public boolean timeAllSelected() {
     for (int index = 0; index < getMeasurementCount(); index++) {
@@ -88,127 +49,4 @@ public class AlignedChunkMetadata implements IChunkMetadata 
{
     }
     return false;
   }
-
-  @Override
-  public boolean isModified() {
-    return timeChunkMetadata.isModified();
-  }
-
-  @Override
-  public void setModified(boolean modified) {
-    timeChunkMetadata.setModified(modified);
-    for (IChunkMetadata v : valueChunkMetadataList) {
-      if (v != null) {
-        v.setModified(modified);
-      }
-    }
-  }
-
-  @Override
-  public boolean isSeq() {
-    return timeChunkMetadata.isSeq();
-  }
-
-  @Override
-  public void setSeq(boolean seq) {
-    timeChunkMetadata.setSeq(seq);
-    for (IChunkMetadata v : valueChunkMetadataList) {
-      if (v != null) {
-        v.setSeq(seq);
-      }
-    }
-  }
-
-  @Override
-  public long getVersion() {
-    return timeChunkMetadata.getVersion();
-  }
-
-  @Override
-  public void setVersion(long version) {
-    timeChunkMetadata.setVersion(version);
-    for (IChunkMetadata valueChunkMetadata : valueChunkMetadataList) {
-      if (valueChunkMetadata != null) {
-        valueChunkMetadata.setVersion(version);
-      }
-    }
-  }
-
-  @Override
-  public long getOffsetOfChunkHeader() {
-    return timeChunkMetadata.getOffsetOfChunkHeader();
-  }
-
-  @Override
-  public long getStartTime() {
-    return timeChunkMetadata.getStartTime();
-  }
-
-  @Override
-  public long getEndTime() {
-    return timeChunkMetadata.getEndTime();
-  }
-
-  @Override
-  public IChunkLoader getChunkLoader() {
-    return chunkLoader;
-  }
-
-  @Override
-  public boolean needSetChunkLoader() {
-    return chunkLoader == null;
-  }
-
-  @Override
-  public void setChunkLoader(IChunkLoader chunkLoader) {
-    this.chunkLoader = chunkLoader;
-  }
-
-  @Override
-  public void setClosed(boolean closed) {
-    timeChunkMetadata.setClosed(closed);
-    for (IChunkMetadata chunkMetadata : valueChunkMetadataList) {
-      if (chunkMetadata != null) {
-        chunkMetadata.setClosed(closed);
-      }
-    }
-  }
-
-  @Override
-  public TSDataType getDataType() {
-    return timeChunkMetadata.getDataType();
-  }
-
-  @Override
-  public String getMeasurementUid() {
-    return timeChunkMetadata.getMeasurementUid();
-  }
-
-  @Override
-  public void insertIntoSortedDeletions(TimeRange timeRange) {
-    throw new UnsupportedOperationException();
-  }
-
-  @Override
-  public List<TimeRange> getDeleteIntervalList() {
-    throw new UnsupportedOperationException();
-  }
-
-  @Override
-  public int serializeTo(OutputStream outputStream, boolean 
serializeStatistic) {
-    throw new UnsupportedOperationException("VectorChunkMetadata doesn't 
support serial method");
-  }
-
-  @Override
-  public byte getMask() {
-    return 0;
-  }
-
-  public IChunkMetadata getTimeChunkMetadata() {
-    return timeChunkMetadata;
-  }
-
-  public List<IChunkMetadata> getValueChunkMetadataList() {
-    return valueChunkMetadataList;
-  }
 }
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 ba5cbce41..7e1e5bf08 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
@@ -21,6 +21,7 @@ package org.apache.tsfile.file.metadata;
 
 import org.apache.tsfile.file.metadata.statistics.Statistics;
 
+import java.util.Collections;
 import java.util.List;
 
 public class AlignedTimeSeriesMetadata extends 
AbstractAlignedTimeSeriesMetadata {
@@ -55,7 +56,7 @@ public class AlignedTimeSeriesMetadata extends 
AbstractAlignedTimeSeriesMetadata
 
   @Override
   void constructAlignedChunkMetadata(
-      List<AlignedChunkMetadata> res,
+      List<AbstractAlignedChunkMetadata> res,
       IChunkMetadata timeChunkMetadata,
       List<IChunkMetadata> chunkMetadataList,
       boolean exits) {
@@ -63,4 +64,9 @@ public class AlignedTimeSeriesMetadata extends 
AbstractAlignedTimeSeriesMetadata
       res.add(new AlignedChunkMetadata(timeChunkMetadata, chunkMetadataList));
     }
   }
+
+  @Override
+  AbstractAlignedChunkMetadata constructOnlyTimeChunkMetadata(IChunkMetadata 
timeChunkMetadata) {
+    return new AlignedChunkMetadata(timeChunkMetadata, 
Collections.emptyList());
+  }
 }
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/TableDeviceChunkMetadata.java
similarity index 54%
copy from 
java/tsfile/src/main/java/org/apache/tsfile/file/metadata/TableDeviceMetadata.java
copy to 
java/tsfile/src/main/java/org/apache/tsfile/file/metadata/TableDeviceChunkMetadata.java
index 8614a5326..8daeffc5d 100644
--- 
a/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/TableDeviceMetadata.java
+++ 
b/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/TableDeviceChunkMetadata.java
@@ -21,30 +21,18 @@ package org.apache.tsfile.file.metadata;
 
 import org.apache.tsfile.file.metadata.statistics.Statistics;
 
+import java.io.Serializable;
 import java.util.List;
 
-public class TableDeviceMetadata extends AbstractAlignedTimeSeriesMetadata {
+public class TableDeviceChunkMetadata extends AbstractAlignedChunkMetadata {
 
-  public TableDeviceMetadata(
-      TimeseriesMetadata timeseriesMetadata, List<TimeseriesMetadata> 
valueTimeseriesMetadataList) {
-    super(timeseriesMetadata, valueTimeseriesMetadataList);
+  public TableDeviceChunkMetadata(
+      IChunkMetadata timeChunkMetadata, List<IChunkMetadata> 
valueChunkMetadataList) {
+    super(timeChunkMetadata, valueChunkMetadataList);
   }
 
-  /**
-   * 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));
+  public Statistics<? extends Serializable> getStatistics() {
+    return timeChunkMetadata.getStatistics();
   }
 }
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/TableDeviceTimeSeriesMetadata.java
similarity index 76%
rename from 
java/tsfile/src/main/java/org/apache/tsfile/file/metadata/TableDeviceMetadata.java
rename to 
java/tsfile/src/main/java/org/apache/tsfile/file/metadata/TableDeviceTimeSeriesMetadata.java
index 8614a5326..debacf5ba 100644
--- 
a/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/TableDeviceMetadata.java
+++ 
b/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/TableDeviceTimeSeriesMetadata.java
@@ -21,11 +21,12 @@ package org.apache.tsfile.file.metadata;
 
 import org.apache.tsfile.file.metadata.statistics.Statistics;
 
+import java.util.Collections;
 import java.util.List;
 
-public class TableDeviceMetadata extends AbstractAlignedTimeSeriesMetadata {
+public class TableDeviceTimeSeriesMetadata extends 
AbstractAlignedTimeSeriesMetadata {
 
-  public TableDeviceMetadata(
+  public TableDeviceTimeSeriesMetadata(
       TimeseriesMetadata timeseriesMetadata, List<TimeseriesMetadata> 
valueTimeseriesMetadataList) {
     super(timeseriesMetadata, valueTimeseriesMetadataList);
   }
@@ -41,10 +42,15 @@ public class TableDeviceMetadata extends 
AbstractAlignedTimeSeriesMetadata {
 
   @Override
   void constructAlignedChunkMetadata(
-      List<AlignedChunkMetadata> res,
+      List<AbstractAlignedChunkMetadata> res,
       IChunkMetadata timeChunkMetadata,
       List<IChunkMetadata> chunkMetadataList,
       boolean exits) {
-    res.add(new AlignedChunkMetadata(timeChunkMetadata, chunkMetadataList));
+    res.add(new TableDeviceChunkMetadata(timeChunkMetadata, 
chunkMetadataList));
+  }
+
+  @Override
+  AbstractAlignedChunkMetadata constructOnlyTimeChunkMetadata(IChunkMetadata 
timeChunkMetadata) {
+    return new TableDeviceChunkMetadata(timeChunkMetadata, 
Collections.emptyList());
   }
 }
diff --git 
a/java/tsfile/src/main/java/org/apache/tsfile/read/TsFileSequenceReader.java 
b/java/tsfile/src/main/java/org/apache/tsfile/read/TsFileSequenceReader.java
index 3f7a171b4..3961053bd 100644
--- a/java/tsfile/src/main/java/org/apache/tsfile/read/TsFileSequenceReader.java
+++ b/java/tsfile/src/main/java/org/apache/tsfile/read/TsFileSequenceReader.java
@@ -52,7 +52,7 @@ import org.apache.tsfile.file.metadata.IDeviceID;
 import org.apache.tsfile.file.metadata.ITimeSeriesMetadata;
 import org.apache.tsfile.file.metadata.MeasurementMetadataIndexEntry;
 import org.apache.tsfile.file.metadata.MetadataIndexNode;
-import org.apache.tsfile.file.metadata.TableDeviceMetadata;
+import org.apache.tsfile.file.metadata.TableDeviceTimeSeriesMetadata;
 import org.apache.tsfile.file.metadata.TableSchema;
 import org.apache.tsfile.file.metadata.TimeseriesMetadata;
 import org.apache.tsfile.file.metadata.TsFileMetadata;
@@ -916,7 +916,7 @@ public class TsFileSequenceReader implements AutoCloseable {
     if (valueTimeseriesMetadataList != null && 
!valueTimeseriesMetadataList.isEmpty()) {
       if 
(this.tsFileMetaData.getTableSchemaMap().containsKey(device.getTableName())) {
         resultTimeseriesMetadataList.add(
-            new TableDeviceMetadata(timeColumnMetadata, 
valueTimeseriesMetadataList));
+            new TableDeviceTimeSeriesMetadata(timeColumnMetadata, 
valueTimeseriesMetadataList));
       } else {
         resultTimeseriesMetadataList.add(
             new AlignedTimeSeriesMetadata(timeColumnMetadata, 
valueTimeseriesMetadataList));
@@ -2670,7 +2670,7 @@ public class TsFileSequenceReader implements 
AutoCloseable {
           new AlignedTimeSeriesMetadata(timeseriesMetadata, 
valueTimeseriesMetadataList);
     } else {
       alignedTimeSeriesMetadata =
-          new TableDeviceMetadata(timeseriesMetadata, 
valueTimeseriesMetadataList);
+          new TableDeviceTimeSeriesMetadata(timeseriesMetadata, 
valueTimeseriesMetadataList);
     }
     List<AlignedChunkMetadata> chunkMetadataList = new ArrayList<>();
     for (IChunkMetadata chunkMetadata : 
readIChunkMetaDataList(alignedTimeSeriesMetadata)) {

Reply via email to