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); }
