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

jiangtian pushed a commit to branch rc/1.1
in repository https://gitbox.apache.org/repos/asf/tsfile.git


The following commit(s) were added to refs/heads/rc/1.1 by this push:
     new b5dc8075 Fix error when write aligned tablet with null date (#251)
b5dc8075 is described below

commit b5dc8075dd7322813678de45611ffd0c43f5d9dd
Author: Haonan <hhao...@outlook.com>
AuthorDate: Tue Sep 24 14:35:43 2024 +0800

    Fix error when write aligned tablet with null date (#251)
---
 .../write/chunk/AlignedChunkGroupWriterImpl.java   |  5 +++-
 .../apache/tsfile/write/TsFileWriteApiTest.java    | 31 ++++++++++++++++------
 2 files changed, 27 insertions(+), 9 deletions(-)

diff --git 
a/java/tsfile/src/main/java/org/apache/tsfile/write/chunk/AlignedChunkGroupWriterImpl.java
 
b/java/tsfile/src/main/java/org/apache/tsfile/write/chunk/AlignedChunkGroupWriterImpl.java
index ecd974f8..7d2b6090 100644
--- 
a/java/tsfile/src/main/java/org/apache/tsfile/write/chunk/AlignedChunkGroupWriterImpl.java
+++ 
b/java/tsfile/src/main/java/org/apache/tsfile/write/chunk/AlignedChunkGroupWriterImpl.java
@@ -191,7 +191,10 @@ public class AlignedChunkGroupWriterImpl implements 
IChunkGroupWriter {
           case DATE:
             valueChunkWriter.write(
                 time,
-                DateUtils.parseDateExpressionToInt(((LocalDate[]) 
tablet.values[columnIndex])[row]),
+                isNull
+                    ? 0
+                    : DateUtils.parseDateExpressionToInt(
+                        ((LocalDate[]) tablet.values[columnIndex])[row]),
                 isNull);
             break;
           case INT64:
diff --git 
a/java/tsfile/src/test/java/org/apache/tsfile/write/TsFileWriteApiTest.java 
b/java/tsfile/src/test/java/org/apache/tsfile/write/TsFileWriteApiTest.java
index 4e5607a6..76f482c5 100644
--- a/java/tsfile/src/test/java/org/apache/tsfile/write/TsFileWriteApiTest.java
+++ b/java/tsfile/src/test/java/org/apache/tsfile/write/TsFileWriteApiTest.java
@@ -52,6 +52,7 @@ import org.junit.Test;
 import java.io.File;
 import java.io.IOException;
 import java.nio.ByteBuffer;
+import java.time.LocalDate;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
@@ -354,8 +355,9 @@ public class TsFileWriteApiTest {
     setEnv(100, 30);
     try (TsFileWriter tsFileWriter = new TsFileWriter(f)) {
       measurementSchemas.add(new MeasurementSchema("s1", TSDataType.TEXT, 
TSEncoding.PLAIN));
-      measurementSchemas.add(new MeasurementSchema("s2", TSDataType.TEXT, 
TSEncoding.PLAIN));
-      measurementSchemas.add(new MeasurementSchema("s3", TSDataType.TEXT, 
TSEncoding.PLAIN));
+      measurementSchemas.add(new MeasurementSchema("s2", TSDataType.STRING, 
TSEncoding.PLAIN));
+      measurementSchemas.add(new MeasurementSchema("s3", TSDataType.BLOB, 
TSEncoding.PLAIN));
+      measurementSchemas.add(new MeasurementSchema("s4", TSDataType.DATE, 
TSEncoding.PLAIN));
 
       // register nonAligned timeseries
       tsFileWriter.registerTimeseries(new Path(deviceId), measurementSchemas);
@@ -364,12 +366,12 @@ public class TsFileWriteApiTest {
       long[] timestamps = tablet.timestamps;
       Object[] values = tablet.values;
       tablet.initBitMaps();
-      long sensorNum = measurementSchemas.size();
+      int sensorNum = measurementSchemas.size();
       long startTime = 0;
       for (long r = 0; r < 10000; r++) {
         int row = tablet.rowSize++;
         timestamps[row] = startTime++;
-        for (int i = 0; i < sensorNum; i++) {
+        for (int i = 0; i < sensorNum - 1; i++) {
           if (i == 1 && r > 1000) {
             tablet.bitMaps[i].mark((int) r % tablet.getMaxRowNumber());
             continue;
@@ -377,6 +379,12 @@ public class TsFileWriteApiTest {
           Binary[] textSensor = (Binary[]) values[i];
           textSensor[row] = new Binary("testString.........", 
TSFileConfig.STRING_CHARSET);
         }
+        if (r > 1000) {
+          tablet.bitMaps[sensorNum - 1].mark((int) r % 
tablet.getMaxRowNumber());
+        } else {
+          LocalDate[] dateSensor = (LocalDate[]) values[sensorNum - 1];
+          dateSensor[row] = LocalDate.of(2024, 4, 1);
+        }
         // write
         if (tablet.rowSize == tablet.getMaxRowNumber()) {
           tsFileWriter.write(tablet);
@@ -400,8 +408,9 @@ public class TsFileWriteApiTest {
     setEnv(100, 30);
     try (TsFileWriter tsFileWriter = new TsFileWriter(f)) {
       measurementSchemas.add(new MeasurementSchema("s1", TSDataType.TEXT, 
TSEncoding.PLAIN));
-      measurementSchemas.add(new MeasurementSchema("s2", TSDataType.TEXT, 
TSEncoding.PLAIN));
-      measurementSchemas.add(new MeasurementSchema("s3", TSDataType.TEXT, 
TSEncoding.PLAIN));
+      measurementSchemas.add(new MeasurementSchema("s2", TSDataType.STRING, 
TSEncoding.PLAIN));
+      measurementSchemas.add(new MeasurementSchema("s3", TSDataType.BLOB, 
TSEncoding.PLAIN));
+      measurementSchemas.add(new MeasurementSchema("s4", TSDataType.DATE, 
TSEncoding.PLAIN));
 
       // register aligned timeseries
       tsFileWriter.registerAlignedTimeseries(new Path(deviceId), 
measurementSchemas);
@@ -410,12 +419,12 @@ public class TsFileWriteApiTest {
       long[] timestamps = tablet.timestamps;
       Object[] values = tablet.values;
       tablet.initBitMaps();
-      long sensorNum = measurementSchemas.size();
+      int sensorNum = measurementSchemas.size();
       long startTime = 0;
       for (long r = 0; r < 10000; r++) {
         int row = tablet.rowSize++;
         timestamps[row] = startTime++;
-        for (int i = 0; i < sensorNum; i++) {
+        for (int i = 0; i < sensorNum - 1; i++) {
           if (i == 1 && r > 1000) {
             tablet.bitMaps[i].mark((int) r % tablet.getMaxRowNumber());
             continue;
@@ -423,6 +432,12 @@ public class TsFileWriteApiTest {
           Binary[] textSensor = (Binary[]) values[i];
           textSensor[row] = new Binary("testString.........", 
TSFileConfig.STRING_CHARSET);
         }
+        if (r > 1000) {
+          tablet.bitMaps[sensorNum - 1].mark((int) r % 
tablet.getMaxRowNumber());
+        } else {
+          LocalDate[] dateSensor = (LocalDate[]) values[sensorNum - 1];
+          dateSensor[row] = LocalDate.of(2024, 4, 1);
+        }
         // write
         if (tablet.rowSize == tablet.getMaxRowNumber()) {
           tsFileWriter.writeAligned(tablet);

Reply via email to