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

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


The following commit(s) were added to refs/heads/dev/1.3 by this push:
     new ad60164f630 [to dev/1.3] Add getBlob and getDate for 
SessionDataSet.DataIterator & fix bugs
ad60164f630 is described below

commit ad60164f6309385549a097c9fc6ca35d39b6b693
Author: shuwenwei <[email protected]>
AuthorDate: Fri Apr 18 17:42:52 2025 +0800

    [to dev/1.3] Add getBlob and getDate for SessionDataSet.DataIterator & fix 
bugs
---
 .../iotdb/session/it/IoTDBSessionSimpleIT.java     | 76 ++++++++++++++++++++++
 .../org/apache/iotdb/isession/SessionDataSet.java  | 18 +++++
 .../java/org/apache/iotdb/rpc/IoTDBRpcDataSet.java | 22 +++++--
 3 files changed, 112 insertions(+), 4 deletions(-)

diff --git 
a/integration-test/src/test/java/org/apache/iotdb/session/it/IoTDBSessionSimpleIT.java
 
b/integration-test/src/test/java/org/apache/iotdb/session/it/IoTDBSessionSimpleIT.java
index eb6f996de42..536bab31171 100644
--- 
a/integration-test/src/test/java/org/apache/iotdb/session/it/IoTDBSessionSimpleIT.java
+++ 
b/integration-test/src/test/java/org/apache/iotdb/session/it/IoTDBSessionSimpleIT.java
@@ -46,6 +46,7 @@ import org.apache.tsfile.read.common.Path;
 import org.apache.tsfile.read.common.RowRecord;
 import org.apache.tsfile.utils.Binary;
 import org.apache.tsfile.utils.BitMap;
+import org.apache.tsfile.utils.DateUtils;
 import org.apache.tsfile.write.TsFileWriter;
 import org.apache.tsfile.write.record.TSRecord;
 import org.apache.tsfile.write.record.Tablet;
@@ -63,6 +64,7 @@ import org.slf4j.LoggerFactory;
 
 import java.io.File;
 import java.security.SecureRandom;
+import java.sql.Timestamp;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
@@ -2054,4 +2056,78 @@ public class IoTDBSessionSimpleIT {
       file.delete();
     }
   }
+
+  @Test
+  @Category({LocalStandaloneIT.class, ClusterIT.class})
+  public void testQueryAllDataType() throws IoTDBConnectionException, 
StatementExecutionException {
+    Tablet tablet =
+        new Tablet(
+            "root.sg.d1",
+            Arrays.asList(
+                new MeasurementSchema("s1", TSDataType.INT32),
+                new MeasurementSchema("s2", TSDataType.INT64),
+                new MeasurementSchema("s3", TSDataType.FLOAT),
+                new MeasurementSchema("s4", TSDataType.DOUBLE),
+                new MeasurementSchema("s5", TSDataType.TEXT),
+                new MeasurementSchema("s6", TSDataType.BOOLEAN),
+                new MeasurementSchema("s7", TSDataType.TIMESTAMP),
+                new MeasurementSchema("s8", TSDataType.BLOB),
+                new MeasurementSchema("s9", TSDataType.STRING),
+                new MeasurementSchema("s10", TSDataType.DATE),
+                new MeasurementSchema("s11", TSDataType.TIMESTAMP)),
+            10);
+    tablet.addTimestamp(0, 0L);
+    tablet.addValue("s1", 0, 1);
+    tablet.addValue("s2", 0, 1L);
+    tablet.addValue("s3", 0, 0f);
+    tablet.addValue("s4", 0, 0d);
+    tablet.addValue("s5", 0, "text_value");
+    tablet.addValue("s6", 0, true);
+    tablet.addValue("s7", 0, 1L);
+    tablet.addValue("s8", 0, new Binary(new byte[] {1}));
+    tablet.addValue("s9", 0, "string_value");
+    tablet.addValue("s10", 0, DateUtils.parseIntToLocalDate(20250403));
+    tablet.initBitMaps();
+    tablet.bitMaps[10].mark(0);
+    tablet.rowSize = 1;
+
+    try (ISession session = EnvFactory.getEnv().getSessionConnection()) {
+      session.insertTablet(tablet);
+
+      try (SessionDataSet dataSet = session.executeQueryStatement("select * 
from root.sg.d1")) {
+        SessionDataSet.DataIterator iterator = dataSet.iterator();
+        int count = 0;
+        while (iterator.next()) {
+          count++;
+          Assert.assertFalse(iterator.isNull("root.sg.d1.s1"));
+          Assert.assertEquals(1, iterator.getInt("root.sg.d1.s1"));
+          Assert.assertFalse(iterator.isNull("root.sg.d1.s2"));
+          Assert.assertEquals(1L, iterator.getLong("root.sg.d1.s2"));
+          Assert.assertFalse(iterator.isNull("root.sg.d1.s3"));
+          Assert.assertEquals(0, iterator.getFloat("root.sg.d1.s3"), 0.01);
+          Assert.assertFalse(iterator.isNull("root.sg.d1.s4"));
+          Assert.assertEquals(0, iterator.getDouble("root.sg.d1.s4"), 0.01);
+          Assert.assertFalse(iterator.isNull("root.sg.d1.s5"));
+          Assert.assertEquals("text_value", 
iterator.getString("root.sg.d1.s5"));
+          Assert.assertFalse(iterator.isNull("root.sg.d1.s6"));
+          assertTrue(iterator.getBoolean("root.sg.d1.s6"));
+          Assert.assertFalse(iterator.isNull("root.sg.d1.s7"));
+          Assert.assertEquals(new Timestamp(1), 
iterator.getTimestamp("root.sg.d1.s7"));
+          Assert.assertFalse(iterator.isNull("root.sg.d1.s8"));
+          Assert.assertEquals(new Binary(new byte[] {1}), 
iterator.getBlob("root.sg.d1.s8"));
+          Assert.assertFalse(iterator.isNull("root.sg.d1.s9"));
+          Assert.assertEquals("string_value", 
iterator.getString("root.sg.d1.s9"));
+          Assert.assertFalse(iterator.isNull("root.sg.d1.s10"));
+          Assert.assertEquals(
+              DateUtils.parseIntToLocalDate(20250403), 
iterator.getDate("root.sg.d1.s10"));
+          Assert.assertTrue(iterator.isNull("root.sg.d1.s11"));
+          Assert.assertNull(iterator.getTimestamp("root.sg.d1.s11"));
+
+          Assert.assertEquals(new Timestamp(0), iterator.getTimestamp("Time"));
+          Assert.assertFalse(iterator.isNull("Time"));
+        }
+        Assert.assertEquals(tablet.rowSize, count);
+      }
+    }
+  }
 }
diff --git 
a/iotdb-client/isession/src/main/java/org/apache/iotdb/isession/SessionDataSet.java
 
b/iotdb-client/isession/src/main/java/org/apache/iotdb/isession/SessionDataSet.java
index 4b3d837c07e..822c464ddca 100644
--- 
a/iotdb-client/isession/src/main/java/org/apache/iotdb/isession/SessionDataSet.java
+++ 
b/iotdb-client/isession/src/main/java/org/apache/iotdb/isession/SessionDataSet.java
@@ -29,10 +29,12 @@ import org.apache.thrift.TException;
 import org.apache.tsfile.enums.TSDataType;
 import org.apache.tsfile.read.common.Field;
 import org.apache.tsfile.read.common.RowRecord;
+import org.apache.tsfile.utils.Binary;
 import org.apache.tsfile.write.UnSupportedDataTypeException;
 
 import java.nio.ByteBuffer;
 import java.sql.Timestamp;
+import java.time.LocalDate;
 import java.time.ZoneId;
 import java.util.ArrayList;
 import java.util.List;
@@ -347,6 +349,22 @@ public class SessionDataSet implements ISessionDataSet {
       return ioTDBRpcDataSet.getTimestamp(columnName);
     }
 
+    public LocalDate getDate(int columnIndex) throws 
StatementExecutionException {
+      return ioTDBRpcDataSet.getDate(columnIndex);
+    }
+
+    public LocalDate getDate(String columnName) throws 
StatementExecutionException {
+      return ioTDBRpcDataSet.getDate(columnName);
+    }
+
+    public Binary getBlob(int columnIndex) throws StatementExecutionException {
+      return ioTDBRpcDataSet.getBinary(columnIndex);
+    }
+
+    public Binary getBlob(String columnName) throws 
StatementExecutionException {
+      return ioTDBRpcDataSet.getBinary(columnName);
+    }
+
     public int findColumn(String columnName) {
       return ioTDBRpcDataSet.findColumn(columnName);
     }
diff --git 
a/iotdb-client/service-rpc/src/main/java/org/apache/iotdb/rpc/IoTDBRpcDataSet.java
 
b/iotdb-client/service-rpc/src/main/java/org/apache/iotdb/rpc/IoTDBRpcDataSet.java
index 63bbac45781..8fc484fd00c 100644
--- 
a/iotdb-client/service-rpc/src/main/java/org/apache/iotdb/rpc/IoTDBRpcDataSet.java
+++ 
b/iotdb-client/service-rpc/src/main/java/org/apache/iotdb/rpc/IoTDBRpcDataSet.java
@@ -36,6 +36,7 @@ import org.apache.tsfile.utils.DateUtils;
 
 import java.nio.ByteBuffer;
 import java.sql.Timestamp;
+import java.time.LocalDate;
 import java.time.ZoneId;
 import java.util.ArrayList;
 import java.util.BitSet;
@@ -375,7 +376,7 @@ public class IoTDBRpcDataSet {
     int index = columnOrdinalMap.get(findColumnNameByIndex(columnIndex)) - 
START_INDEX;
     // time column will never be null
     if (index < 0) {
-      return true;
+      return false;
     }
     return isNull(index, tsBlockIndex);
   }
@@ -384,7 +385,7 @@ public class IoTDBRpcDataSet {
     int index = columnOrdinalMap.get(columnName) - START_INDEX;
     // time column will never be null
     if (index < 0) {
-      return true;
+      return false;
     }
     return isNull(index, tsBlockIndex);
   }
@@ -469,6 +470,7 @@ public class IoTDBRpcDataSet {
   public long getLong(String columnName) throws StatementExecutionException {
     checkRecord();
     if (columnName.equals(TIMESTAMP_STR)) {
+      lastReadWasNull = false;
       return curTsBlock.getTimeByIndex(tsBlockIndex);
     }
     int index = columnOrdinalMap.get(columnName) - START_INDEX;
@@ -519,11 +521,21 @@ public class IoTDBRpcDataSet {
   }
 
   public Timestamp getTimestamp(int columnIndex) throws 
StatementExecutionException {
-    return new Timestamp(getLong(columnIndex));
+    return getTimestamp(findColumnNameByIndex(columnIndex));
   }
 
   public Timestamp getTimestamp(String columnName) throws 
StatementExecutionException {
-    return getTimestamp(findColumn(columnName));
+    long longValue = getLong(columnName);
+    return lastReadWasNull ? null : new Timestamp(longValue);
+  }
+
+  public LocalDate getDate(int columnIndex) throws StatementExecutionException 
{
+    return getDate(findColumnNameByIndex(columnIndex));
+  }
+
+  public LocalDate getDate(String columnName) throws 
StatementExecutionException {
+    int intValue = getInt(columnName);
+    return lastReadWasNull ? null : DateUtils.parseIntToLocalDate(intValue);
   }
 
   public TSDataType getDataType(int columnIndex) throws 
StatementExecutionException {
@@ -547,6 +559,7 @@ public class IoTDBRpcDataSet {
   public String getValueByName(String columnName) throws 
StatementExecutionException {
     checkRecord();
     if (columnName.equals(TIMESTAMP_STR)) {
+      lastReadWasNull = false;
       return String.valueOf(curTsBlock.getTimeByIndex(tsBlockIndex));
     }
     int index = columnOrdinalMap.get(columnName) - START_INDEX;
@@ -590,6 +603,7 @@ public class IoTDBRpcDataSet {
   public Object getObjectByName(String columnName) throws 
StatementExecutionException {
     checkRecord();
     if (columnName.equals(TIMESTAMP_STR)) {
+      lastReadWasNull = false;
       return new Timestamp(curTsBlock.getTimeByIndex(tsBlockIndex));
     }
     int index = columnOrdinalMap.get(columnName) - START_INDEX;

Reply via email to