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;