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

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


The following commit(s) were added to refs/heads/develop by this push:
     new 052ff6b4 add 'dataTypeModifiedAndCannotUseStatistics' (#724)
052ff6b4 is described below

commit 052ff6b44f68d3f2e04bfd7190067e4f5efb038c
Author: shuwenwei <[email protected]>
AuthorDate: Fri Feb 6 15:18:35 2026 +0800

    add 'dataTypeModifiedAndCannotUseStatistics' (#724)
---
 .../file/metadata/AbstractAlignedChunkMetadata.java  | 12 ++++++++++++
 .../metadata/AbstractAlignedTimeSeriesMetadata.java  | 12 ++++++++++++
 .../apache/tsfile/file/metadata/ChunkMetadata.java   | 17 ++++++++++++++++-
 .../apache/tsfile/file/metadata/IChunkMetadata.java  |  4 ++++
 .../tsfile/file/metadata/ITimeSeriesMetadata.java    |  4 ++++
 .../tsfile/file/metadata/TimeseriesMetadata.java     | 20 ++++++++++++++++++--
 .../org/apache/tsfile/read/reader/IChunkReader.java  |  2 ++
 .../org/apache/tsfile/read/reader/IPageReader.java   |  2 ++
 .../read/reader/chunk/AbstractChunkReader.java       |  9 +++++++++
 9 files changed, 79 insertions(+), 3 deletions(-)

diff --git 
a/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/AbstractAlignedChunkMetadata.java
 
b/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/AbstractAlignedChunkMetadata.java
index 52a1913c..8b7cfcc4 100644
--- 
a/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/AbstractAlignedChunkMetadata.java
+++ 
b/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/AbstractAlignedChunkMetadata.java
@@ -85,6 +85,18 @@ public abstract class AbstractAlignedChunkMetadata 
implements IChunkMetadata {
     }
   }
 
+  @Override
+  public boolean isDataTypeModifiedAndCannotUseStatistics() {
+    return timeChunkMetadata.isDataTypeModifiedAndCannotUseStatistics();
+  }
+
+  @Override
+  public void setDataTypeModifiedAndCannotUseStatistics(
+      boolean dataTypeModifiedAndCannotUseStatistics) {
+    timeChunkMetadata.setDataTypeModifiedAndCannotUseStatistics(
+        dataTypeModifiedAndCannotUseStatistics);
+  }
+
   @Override
   public boolean isSeq() {
     return timeChunkMetadata.isSeq();
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 b7a15250..74ee4db7 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
@@ -84,6 +84,18 @@ public abstract class AbstractAlignedTimeSeriesMetadata 
implements ITimeSeriesMe
     }
   }
 
+  @Override
+  public boolean isDataTypeModifiedAndCannotUseStatistics() {
+    return timeseriesMetadata.isDataTypeModifiedAndCannotUseStatistics();
+  }
+
+  @Override
+  public void setDataTypeModifiedAndCannotUseStatistics(
+      boolean dataTypeModifiedAndCannotUseStatistics) {
+    timeseriesMetadata.setDataTypeModifiedAndCannotUseStatistics(
+        dataTypeModifiedAndCannotUseStatistics);
+  }
+
   @Override
   public boolean isSeq() {
     return timeseriesMetadata.isSeq();
diff --git 
a/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/ChunkMetadata.java 
b/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/ChunkMetadata.java
index 42648621..09d33989 100644
--- 
a/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/ChunkMetadata.java
+++ 
b/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/ChunkMetadata.java
@@ -75,6 +75,10 @@ public class ChunkMetadata implements IChunkMetadata {
 
   private boolean modified;
 
+  // data type modified
+  // Unlike the 'modified' property, this property should be passed down to a 
lower level.
+  private boolean dataTypeModifiedAndCannotUseStatistics;
+
   /** ChunkLoader of metadata, used to create ChunkReaderWrap. */
   private IChunkLoader chunkLoader;
 
@@ -329,7 +333,7 @@ public class ChunkMetadata implements IChunkMetadata {
 
   @Override
   public boolean isModified() {
-    return modified;
+    return modified || dataTypeModifiedAndCannotUseStatistics;
   }
 
   @Override
@@ -337,6 +341,17 @@ public class ChunkMetadata implements IChunkMetadata {
     this.modified |= modified;
   }
 
+  @Override
+  public boolean isDataTypeModifiedAndCannotUseStatistics() {
+    return dataTypeModifiedAndCannotUseStatistics;
+  }
+
+  @Override
+  public void setDataTypeModifiedAndCannotUseStatistics(
+      boolean dataTypeModifiedAndCannotUseStatistics) {
+    this.dataTypeModifiedAndCannotUseStatistics |= 
dataTypeModifiedAndCannotUseStatistics;
+  }
+
   public static long calculateRamSize(String measurementId, TSDataType 
dataType) {
     return CHUNK_METADATA_FIXED_RAM_SIZE
         + RamUsageEstimator.sizeOf(measurementId)
diff --git 
a/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/IChunkMetadata.java 
b/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/IChunkMetadata.java
index f391ed7f..41d1bbc3 100644
--- 
a/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/IChunkMetadata.java
+++ 
b/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/IChunkMetadata.java
@@ -33,6 +33,10 @@ public interface IChunkMetadata extends IMetadata {
 
   void setModified(boolean modified);
 
+  boolean isDataTypeModifiedAndCannotUseStatistics();
+
+  void setDataTypeModifiedAndCannotUseStatistics(boolean 
dataTypeModifiedAndCannotUseStatistics);
+
   boolean isSeq();
 
   void setSeq(boolean seq);
diff --git 
a/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/ITimeSeriesMetadata.java
 
b/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/ITimeSeriesMetadata.java
index c2ddca15..878b8a65 100644
--- 
a/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/ITimeSeriesMetadata.java
+++ 
b/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/ITimeSeriesMetadata.java
@@ -30,6 +30,10 @@ public interface ITimeSeriesMetadata extends IMetadata {
 
   void setModified(boolean modified);
 
+  boolean isDataTypeModifiedAndCannotUseStatistics();
+
+  void setDataTypeModifiedAndCannotUseStatistics(boolean 
dataTypeModifiedAndCannotUseStatistics);
+
   boolean isSeq();
 
   void setSeq(boolean seq);
diff --git 
a/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/TimeseriesMetadata.java
 
b/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/TimeseriesMetadata.java
index 1e254e06..790f457d 100644
--- 
a/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/TimeseriesMetadata.java
+++ 
b/java/tsfile/src/main/java/org/apache/tsfile/file/metadata/TimeseriesMetadata.java
@@ -81,6 +81,10 @@ public class TimeseriesMetadata implements 
ITimeSeriesMetadata {
   // modified is true when there are modifications of the series, or from 
unseq file
   private boolean modified;
 
+  // data type modified
+  // Unlike the 'modified' property, this property should be passed down to a 
lower level.
+  private boolean dataTypeModifiedAndCannotUseStatistics;
+
   private IChunkMetadataLoader chunkMetadataLoader;
 
   // used for SeriesReader to indicate whether it is a seq/unseq timeseries 
metadata
@@ -343,14 +347,17 @@ public class TimeseriesMetadata implements 
ITimeSeriesMetadata {
   public List<IChunkMetadata> getCopiedChunkMetadataList() {
     List<IChunkMetadata> res = new ArrayList<>(chunkMetadataList.size());
     for (IChunkMetadata chunkMetadata : chunkMetadataList) {
-      res.add(new ChunkMetadata((ChunkMetadata) chunkMetadata));
+      ChunkMetadata copiedChunkMetadata = new ChunkMetadata((ChunkMetadata) 
chunkMetadata);
+      copiedChunkMetadata.setDataTypeModifiedAndCannotUseStatistics(
+          dataTypeModifiedAndCannotUseStatistics);
+      res.add(copiedChunkMetadata);
     }
     return res;
   }
 
   @Override
   public boolean isModified() {
-    return modified;
+    return modified || dataTypeModifiedAndCannotUseStatistics;
   }
 
   @Override
@@ -358,6 +365,15 @@ public class TimeseriesMetadata implements 
ITimeSeriesMetadata {
     this.modified |= modified;
   }
 
+  public boolean isDataTypeModifiedAndCannotUseStatistics() {
+    return dataTypeModifiedAndCannotUseStatistics;
+  }
+
+  public void setDataTypeModifiedAndCannotUseStatistics(
+      boolean dataTypeModifiedAndCannotUseStatistics) {
+    this.dataTypeModifiedAndCannotUseStatistics |= 
dataTypeModifiedAndCannotUseStatistics;
+  }
+
   @Override
   public void setSeq(boolean seq) {
     isSeq = seq;
diff --git 
a/java/tsfile/src/main/java/org/apache/tsfile/read/reader/IChunkReader.java 
b/java/tsfile/src/main/java/org/apache/tsfile/read/reader/IChunkReader.java
index acda8af6..e13d32d9 100644
--- a/java/tsfile/src/main/java/org/apache/tsfile/read/reader/IChunkReader.java
+++ b/java/tsfile/src/main/java/org/apache/tsfile/read/reader/IChunkReader.java
@@ -32,5 +32,7 @@ public interface IChunkReader {
 
   void close() throws IOException;
 
+  void markDataTypeModifiedAndCannotUseStatistics();
+
   List<IPageReader> loadPageReaderList() throws IOException;
 }
diff --git 
a/java/tsfile/src/main/java/org/apache/tsfile/read/reader/IPageReader.java 
b/java/tsfile/src/main/java/org/apache/tsfile/read/reader/IPageReader.java
index 1b870f86..1227fd01 100644
--- a/java/tsfile/src/main/java/org/apache/tsfile/read/reader/IPageReader.java
+++ b/java/tsfile/src/main/java/org/apache/tsfile/read/reader/IPageReader.java
@@ -41,6 +41,8 @@ public interface IPageReader extends IMetadata {
 
   void addRecordFilter(Filter filter);
 
+  // The 'modified' property is also true when a data type need to be modified 
in query and
+  // statistics are no longer available.
   boolean isModified();
 
   void setModified(boolean modified);
diff --git 
a/java/tsfile/src/main/java/org/apache/tsfile/read/reader/chunk/AbstractChunkReader.java
 
b/java/tsfile/src/main/java/org/apache/tsfile/read/reader/chunk/AbstractChunkReader.java
index 301134d4..627ace07 100644
--- 
a/java/tsfile/src/main/java/org/apache/tsfile/read/reader/chunk/AbstractChunkReader.java
+++ 
b/java/tsfile/src/main/java/org/apache/tsfile/read/reader/chunk/AbstractChunkReader.java
@@ -80,4 +80,13 @@ public abstract class AbstractChunkReader implements 
IChunkReader {
   public List<IPageReader> loadPageReaderList() {
     return pageReaderList;
   }
+
+  @Override
+  public void markDataTypeModifiedAndCannotUseStatistics() {
+    // In all implementations for now, pageReaderList is completed during 
construction.
+    // In other cases, this method should be overridden.
+    for (IPageReader iPageReader : pageReaderList) {
+      iPageReader.setModified(true);
+    }
+  }
 }

Reply via email to