This is an automated email from the ASF dual-hosted git repository. jackietien pushed a commit to branch TyDatasetOptimize in repository https://gitbox.apache.org/repos/asf/incubator-iotdb.git
commit 16c9ffc1d47e13cb9709e87d438abb9b298378e2 Author: JackieTien97 <[email protected]> AuthorDate: Tue May 12 11:21:08 2020 +0800 optimize contruct dataset values array logic --- .../java/org/apache/iotdb/rpc/IoTDBRpcDataSet.java | 68 +++++++++++----------- 1 file changed, 35 insertions(+), 33 deletions(-) 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 0ae79f6..25c5879 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 @@ -81,7 +81,6 @@ public class IoTDBRpcDataSet { this.client = client; this.fetchSize = fetchSize; this.columnNameList = columnNameList; - currentBitmap = new byte[columnNameList.size()]; columnSize = columnNameList.size(); this.columnNameList = new ArrayList<>(); @@ -123,8 +122,35 @@ public class IoTDBRpcDataSet { } time = new byte[Long.BYTES]; - currentBitmap = new byte[columnNameList.size()]; - values = new byte[columnNameList.size()][]; + currentBitmap = new byte[columnTypeDeduplicatedList.size()]; + values = new byte[columnTypeDeduplicatedList.size()][]; + for (int i = 0; i < values.length; i++) { + TSDataType dataType = columnTypeDeduplicatedList.get(i); + switch (dataType) { + case BOOLEAN: + values[i] = new byte[1]; + break; + case INT32: + values[i] = new byte[Integer.BYTES]; + break; + case INT64: + values[i] = new byte[Long.BYTES]; + break; + case FLOAT: + values[i] = new byte[Float.BYTES]; + break; + case DOUBLE: + values[i] = new byte[Double.BYTES]; + break; + case TEXT: + values[i] = null; + break; + default: + throw new UnSupportedDataTypeException( + String + .format("Data type %s is not supported.", columnTypeDeduplicatedList.get(i))); + } + } this.tsQueryDataSet = queryDataSet; } @@ -195,39 +221,15 @@ public class IoTDBRpcDataSet { if (rowsIndex % 8 == 0) { currentBitmap[i] = bitmapBuffer.get(); } - values[i] = null; if (!isNull(i, rowsIndex)) { ByteBuffer valueBuffer = tsQueryDataSet.valueList.get(i); TSDataType dataType = columnTypeDeduplicatedList.get(i); switch (dataType) { case BOOLEAN: - if (values[i] == null) { - values[i] = new byte[1]; - } - valueBuffer.get(values[i]); - break; case INT32: - if (values[i] == null) { - values[i] = new byte[Integer.BYTES]; - } - valueBuffer.get(values[i]); - break; case INT64: - if (values[i] == null) { - values[i] = new byte[Long.BYTES]; - } - valueBuffer.get(values[i]); - break; case FLOAT: - if (values[i] == null) { - values[i] = new byte[Float.BYTES]; - } - valueBuffer.get(values[i]); - break; case DOUBLE: - if (values[i] == null) { - values[i] = new byte[Double.BYTES]; - } valueBuffer.get(values[i]); break; case TEXT: @@ -258,7 +260,7 @@ public class IoTDBRpcDataSet { public boolean getBoolean(String columnName) throws StatementExecutionException { checkRecord(); int index = columnOrdinalMap.get(columnName) - START_INDEX; - if (values[index] != null) { + if (!isNull(index, rowsIndex-1)) { return BytesUtils.bytesToBool(values[index]); } else { throw new StatementExecutionException(String.format(VALUE_IS_NULL, columnName)); @@ -272,7 +274,7 @@ public class IoTDBRpcDataSet { public double getDouble(String columnName) throws StatementExecutionException { checkRecord(); int index = columnOrdinalMap.get(columnName) - START_INDEX; - if (values[index] != null) { + if (!isNull(index, rowsIndex-1)) { return BytesUtils.bytesToDouble(values[index]); } else { throw new StatementExecutionException(String.format(VALUE_IS_NULL, columnName)); @@ -286,7 +288,7 @@ public class IoTDBRpcDataSet { public float getFloat(String columnName) throws StatementExecutionException { checkRecord(); int index = columnOrdinalMap.get(columnName) - START_INDEX; - if (values[index] != null) { + if (!isNull(index, rowsIndex-1)) { return BytesUtils.bytesToFloat(values[index]); } else { throw new StatementExecutionException(String.format(VALUE_IS_NULL, columnName)); @@ -300,7 +302,7 @@ public class IoTDBRpcDataSet { public int getInt(String columnName) throws StatementExecutionException { checkRecord(); int index = columnOrdinalMap.get(columnName) - START_INDEX; - if (values[index] != null) { + if (!isNull(index, rowsIndex-1)) { return BytesUtils.bytesToInt(values[index]); } else { throw new StatementExecutionException(String.format(VALUE_IS_NULL, columnName)); @@ -317,7 +319,7 @@ public class IoTDBRpcDataSet { return BytesUtils.bytesToLong(time); } int index = columnOrdinalMap.get(columnName) - START_INDEX; - if (values[index] != null) { + if (!isNull(index, rowsIndex-1)) { return BytesUtils.bytesToLong(values[index]); } else { throw new StatementExecutionException(String.format(VALUE_IS_NULL, columnName)); @@ -358,7 +360,7 @@ public class IoTDBRpcDataSet { return String.valueOf(BytesUtils.bytesToLong(time)); } int index = columnOrdinalMap.get(columnName) - START_INDEX; - if (index < 0 || index >= values.length || values[index] == null) { + if (index < 0 || index >= values.length || isNull(index, rowsIndex-1)) { return null; } return getString(index, columnTypeDeduplicatedList.get(index), values);
