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

qiaojialin pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-iotdb.git

commit 9465b89c2f873cb1d181573a3010ba3f38d744fb
Author: JackieTien97 <[email protected]>
AuthorDate: Tue May 12 13:50:16 2020 +0800

    add a judge null interface
---
 .../main/java/org/apache/iotdb/SessionExample.java | 35 ++++++++++++++++++++--
 .../java/org/apache/iotdb/rpc/IoTDBRpcDataSet.java | 30 +++++++++++++++----
 .../org/apache/iotdb/session/SessionDataSet.java   | 14 +++++++--
 3 files changed, 67 insertions(+), 12 deletions(-)

diff --git a/example/session/src/main/java/org/apache/iotdb/SessionExample.java 
b/example/session/src/main/java/org/apache/iotdb/SessionExample.java
index 57d0a64..c2ff492 100644
--- a/example/session/src/main/java/org/apache/iotdb/SessionExample.java
+++ b/example/session/src/main/java/org/apache/iotdb/SessionExample.java
@@ -327,9 +327,38 @@ public class SessionExample {
     System.out.println(dataSet.getColumnNames());
     dataSet.setFetchSize(1024); // default is 512
     while (iterator.next()) {
-      System.out.println(String.format("%s,%s,%s,%s,%s", iterator.getLong(1), 
iterator.getLong(2),
-          iterator.getLong("root.sg1.d1.s2"), iterator.getLong(4),
-          iterator.getObject("root.sg1.d1.s4")));
+      StringBuilder builder = new StringBuilder();
+      // get time
+      builder.append(iterator.getLong(1)).append(",");
+      // get second column
+      if (!iterator.isNull(2)) {
+        builder.append(iterator.getLong(2)).append(",");
+      } else {
+        builder.append("null").append(",");
+      }
+
+      // get third column
+      if (!iterator.isNull("root.sg1.d1.s2")) {
+        builder.append(iterator.getLong("root.sg1.d1.s2")).append(",");
+      } else {
+        builder.append("null").append(",");
+      }
+
+      // get fifth column
+      if (!iterator.isNull(4)) {
+        builder.append(iterator.getLong(4)).append(",");
+      } else {
+        builder.append("null").append(",");
+      }
+
+      // get sixth column
+      if (!iterator.isNull("root.sg1.d1.s4")) {
+        builder.append(iterator.getObject("root.sg1.d1.s4"));
+      } else {
+        builder.append("null");
+      }
+
+      System.out.println(builder.toString());
     }
 
     dataSet.closeOperationHandle();
diff --git 
a/service-rpc/src/main/java/org/apache/iotdb/rpc/IoTDBRpcDataSet.java 
b/service-rpc/src/main/java/org/apache/iotdb/rpc/IoTDBRpcDataSet.java
index 25c5879..8a6047b 100644
--- a/service-rpc/src/main/java/org/apache/iotdb/rpc/IoTDBRpcDataSet.java
+++ b/service-rpc/src/main/java/org/apache/iotdb/rpc/IoTDBRpcDataSet.java
@@ -247,6 +247,24 @@ public class IoTDBRpcDataSet {
     hasCachedRecord = true;
   }
 
+  public boolean isNull(int columnIndex) throws StatementExecutionException {
+    int index = columnOrdinalMap.get(findColumnNameByIndex(columnIndex)) - 
START_INDEX;
+    // time column will never be null
+    if (index < 0) {
+      return true;
+    }
+    return isNull(index, rowsIndex - 1);
+  }
+
+  public boolean isNull(String columnName) throws StatementExecutionException {
+    int index = columnOrdinalMap.get(columnName) - START_INDEX;
+    // time column will never be null
+    if (index < 0) {
+      return true;
+    }
+    return isNull(index, rowsIndex - 1);
+  }
+
   private boolean isNull(int index, int rowNum) {
     byte bitmap = currentBitmap[index];
     int shift = rowNum % 8;
@@ -260,7 +278,7 @@ public class IoTDBRpcDataSet {
   public boolean getBoolean(String columnName) throws 
StatementExecutionException {
     checkRecord();
     int index = columnOrdinalMap.get(columnName) - START_INDEX;
-    if (!isNull(index, rowsIndex-1)) {
+    if (!isNull(index, rowsIndex - 1)) {
       return BytesUtils.bytesToBool(values[index]);
     } else {
       throw new StatementExecutionException(String.format(VALUE_IS_NULL, 
columnName));
@@ -274,7 +292,7 @@ public class IoTDBRpcDataSet {
   public double getDouble(String columnName) throws 
StatementExecutionException {
     checkRecord();
     int index = columnOrdinalMap.get(columnName) - START_INDEX;
-    if (!isNull(index, rowsIndex-1)) {
+    if (!isNull(index, rowsIndex - 1)) {
       return BytesUtils.bytesToDouble(values[index]);
     } else {
       throw new StatementExecutionException(String.format(VALUE_IS_NULL, 
columnName));
@@ -288,7 +306,7 @@ public class IoTDBRpcDataSet {
   public float getFloat(String columnName) throws StatementExecutionException {
     checkRecord();
     int index = columnOrdinalMap.get(columnName) - START_INDEX;
-    if (!isNull(index, rowsIndex-1)) {
+    if (!isNull(index, rowsIndex - 1)) {
       return BytesUtils.bytesToFloat(values[index]);
     } else {
       throw new StatementExecutionException(String.format(VALUE_IS_NULL, 
columnName));
@@ -302,7 +320,7 @@ public class IoTDBRpcDataSet {
   public int getInt(String columnName) throws StatementExecutionException {
     checkRecord();
     int index = columnOrdinalMap.get(columnName) - START_INDEX;
-    if (!isNull(index, rowsIndex-1)) {
+    if (!isNull(index, rowsIndex - 1)) {
       return BytesUtils.bytesToInt(values[index]);
     } else {
       throw new StatementExecutionException(String.format(VALUE_IS_NULL, 
columnName));
@@ -319,7 +337,7 @@ public class IoTDBRpcDataSet {
       return BytesUtils.bytesToLong(time);
     }
     int index = columnOrdinalMap.get(columnName) - START_INDEX;
-    if (!isNull(index, rowsIndex-1)) {
+    if (!isNull(index, rowsIndex - 1)) {
       return BytesUtils.bytesToLong(values[index]);
     } else {
       throw new StatementExecutionException(String.format(VALUE_IS_NULL, 
columnName));
@@ -360,7 +378,7 @@ public class IoTDBRpcDataSet {
       return String.valueOf(BytesUtils.bytesToLong(time));
     }
     int index = columnOrdinalMap.get(columnName) - START_INDEX;
-    if (index < 0 || index >= values.length || isNull(index, rowsIndex-1)) {
+    if (index < 0 || index >= values.length || isNull(index, rowsIndex - 1)) {
       return null;
     }
     return getString(index, columnTypeDeduplicatedList.get(index), values);
diff --git a/session/src/main/java/org/apache/iotdb/session/SessionDataSet.java 
b/session/src/main/java/org/apache/iotdb/session/SessionDataSet.java
index b49132d..f649750 100644
--- a/session/src/main/java/org/apache/iotdb/session/SessionDataSet.java
+++ b/session/src/main/java/org/apache/iotdb/session/SessionDataSet.java
@@ -66,7 +66,7 @@ public class SessionDataSet {
   }
 
 
-  private RowRecord constructRowRecordFromValueArray() {
+  private RowRecord constructRowRecordFromValueArray() throws 
StatementExecutionException {
     List<Field> outFields = new ArrayList<>();
     for (int i = 0; i < ioTDBRpcDataSet.columnSize; i++) {
       Field field;
@@ -74,9 +74,9 @@ public class SessionDataSet {
       int loc =
           
ioTDBRpcDataSet.columnOrdinalMap.get(ioTDBRpcDataSet.columnNameList.get(i + 1))
               - START_INDEX;
-      byte[] valueBytes = ioTDBRpcDataSet.values[loc];
 
-      if (valueBytes != null) {
+      if (!ioTDBRpcDataSet.isNull(i + START_INDEX)) {
+        byte[] valueBytes = ioTDBRpcDataSet.values[loc];
         TSDataType dataType = 
ioTDBRpcDataSet.columnTypeDeduplicatedList.get(loc);
         field = new Field(dataType);
         switch (dataType) {
@@ -146,6 +146,14 @@ public class SessionDataSet {
       return ioTDBRpcDataSet.next();
     }
 
+    public boolean isNull(int columnIndex) throws StatementExecutionException {
+      return ioTDBRpcDataSet.isNull(columnIndex);
+    }
+
+    public boolean isNull(String columnName) throws 
StatementExecutionException {
+      return ioTDBRpcDataSet.isNull(columnName);
+    }
+
     public boolean getBoolean(int columnIndex) throws 
StatementExecutionException {
       return ioTDBRpcDataSet.getBoolean(columnIndex);
     }

Reply via email to