From c9d040ca4d0109fdb63a83f095fdafc404bd017a Mon Sep 17 00:00:00 2001 From: qiaojialin <646274302@qq.com> Date: Fri, 23 Aug 2019 22:50:48 +0800 Subject: [PATCH] remove IoTDBDataType in rpc, use int32 instead --- .../java/org/apache/iotdb/client/Client.java | 2 +- .../java/org/apache/iotdb/jdbc/Utils.java | 27 +----------- .../iotdb/jdbc/IoTDBQueryResultSetTest.java | 2 +- .../java/org/apache/iotdb/jdbc/UtilsTest.java | 2 +- .../db/qp/physical/crud/BatchInsertPlan.java | 28 ++----------- .../iotdb/db/service/TSServiceImpl.java | 2 +- .../iotdb/db/utils/QueryDataSetUtils.java | 42 +++++++------------ .../StorageGroupProcessorTest.java | 12 +++--- service-rpc/src/main/thrift/rpc.thrift | 8 +--- 9 files changed, 31 insertions(+), 94 deletions(-) diff --git a/client/src/main/java/org/apache/iotdb/client/Client.java b/client/src/main/java/org/apache/iotdb/client/Client.java index 7c882127bc..79b3bbbc8d 100644 --- a/client/src/main/java/org/apache/iotdb/client/Client.java +++ b/client/src/main/java/org/apache/iotdb/client/Client.java @@ -156,7 +156,7 @@ public class Client { request.deviceId = rowBatch.deviceId; for (MeasurementSchema measurementSchema: rowBatch.measurements) { request.addToMeasurements(measurementSchema.getMeasurementId()); - request.addToTypes(Utils.getIoTDBDataTypeByTSDataType(measurementSchema.getType())); + request.addToTypes(measurementSchema.getType().ordinal()); } request.setTimestamps(Utils.getTimeBuffer(rowBatch)); request.setValues(Utils.getValueBuffer(rowBatch)); diff --git a/jdbc/src/main/java/org/apache/iotdb/jdbc/Utils.java b/jdbc/src/main/java/org/apache/iotdb/jdbc/Utils.java index 51b3ff16ff..35023d4eef 100644 --- a/jdbc/src/main/java/org/apache/iotdb/jdbc/Utils.java +++ b/jdbc/src/main/java/org/apache/iotdb/jdbc/Utils.java @@ -24,7 +24,6 @@ import java.util.List; import java.util.Properties; import java.util.regex.Matcher; import java.util.regex.Pattern; -import org.apache.iotdb.service.rpc.thrift.IoTDBDataType; import org.apache.iotdb.service.rpc.thrift.TSDataValue; import org.apache.iotdb.service.rpc.thrift.TSQueryDataSet; import org.apache.iotdb.service.rpc.thrift.TSRowRecord; @@ -105,7 +104,7 @@ public class Utils { field.setNull(); r.getFields().add(field); } else { - TSDataType dataType = getTSDataTypeByRPCType(value.getType()); + TSDataType dataType = TSDataType.valueOf(value.getType()); Field field = new Field(dataType); addFieldAccordingToDataType(field, dataType, value); r.getFields().add(field); @@ -116,30 +115,6 @@ public class Utils { return records; } - private static TSDataType getTSDataTypeByRPCType(IoTDBDataType type) { - switch (type) { - case BOOLEAN: return TSDataType.BOOLEAN; - case FLOAT: return TSDataType.FLOAT; - case DOUBLE: return TSDataType.DOUBLE; - case INT32: return TSDataType.INT32; - case INT64: return TSDataType.INT64; - case TEXT: return TSDataType.TEXT; - default: throw new RuntimeException("data type not supported: " + type); - } - } - - public static IoTDBDataType getIoTDBDataTypeByTSDataType(TSDataType type) { - switch (type) { - case BOOLEAN: return IoTDBDataType.BOOLEAN; - case FLOAT: return IoTDBDataType.FLOAT; - case DOUBLE: return IoTDBDataType.DOUBLE; - case INT32: return IoTDBDataType.INT32; - case INT64: return IoTDBDataType.INT64; - case TEXT: return IoTDBDataType.TEXT; - default: throw new RuntimeException("data type not supported: " + type); - } - } - /** * * @param field -the field need to add new data diff --git a/jdbc/src/test/java/org/apache/iotdb/jdbc/IoTDBQueryResultSetTest.java b/jdbc/src/test/java/org/apache/iotdb/jdbc/IoTDBQueryResultSetTest.java index 90b951f1d5..bffc5f0c92 100644 --- a/jdbc/src/test/java/org/apache/iotdb/jdbc/IoTDBQueryResultSetTest.java +++ b/jdbc/src/test/java/org/apache/iotdb/jdbc/IoTDBQueryResultSetTest.java @@ -281,7 +281,7 @@ public class IoTDBQueryResultSetTest { } else { value.setInt_val((int) item[3 * i + 3]); } - value.setType(Utils.getIoTDBDataTypeByTSDataType((TSDataType) item[3 * i + 2])); + value.setType(item[3 * i + 2].toString()); } values.add(value); } diff --git a/jdbc/src/test/java/org/apache/iotdb/jdbc/UtilsTest.java b/jdbc/src/test/java/org/apache/iotdb/jdbc/UtilsTest.java index 3e29ff5216..de213e5311 100644 --- a/jdbc/src/test/java/org/apache/iotdb/jdbc/UtilsTest.java +++ b/jdbc/src/test/java/org/apache/iotdb/jdbc/UtilsTest.java @@ -125,7 +125,7 @@ public class UtilsTest { } else { value.setBinary_val(ByteBuffer.wrap(((String) item[3 * i + 3]).getBytes())); } - value.setType(Utils.getIoTDBDataTypeByTSDataType((TSDataType) item[3 * i + 2])); + value.setType(item[3 * i + 2].toString()); } values.add(value); } diff --git a/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/BatchInsertPlan.java b/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/BatchInsertPlan.java index 17fae30ae9..ce907ed941 100644 --- a/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/BatchInsertPlan.java +++ b/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/BatchInsertPlan.java @@ -24,7 +24,6 @@ import java.util.List; import org.apache.iotdb.db.qp.logical.Operator.OperatorType; import org.apache.iotdb.db.qp.physical.PhysicalPlan; import org.apache.iotdb.db.utils.QueryDataSetUtils; -import org.apache.iotdb.service.rpc.thrift.IoTDBDataType; import org.apache.iotdb.tsfile.exception.write.UnSupportedDataTypeException; import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType; import org.apache.iotdb.tsfile.read.common.Path; @@ -36,7 +35,6 @@ public class BatchInsertPlan extends PhysicalPlan { private String deviceId; private String[] measurements; private TSDataType[] dataTypes; - private List dataTypeList; private long[] times; private ByteBuffer timeBuffer; @@ -61,14 +59,7 @@ public class BatchInsertPlan extends PhysicalPlan { setMeasurements(measurements); } - public BatchInsertPlan(String deviceId, String[] measurements, List dataTypes) { - super(false, OperatorType.BATCHINSERT); - this.deviceId = deviceId; - this.measurements = measurements; - setDataTypes(dataTypes); - } - - public BatchInsertPlan(String deviceId, String[] measurements, IoTDBDataType[] dataTypes) { + public BatchInsertPlan(String deviceId, String[] measurements, List dataTypes) { super(false, OperatorType.BATCHINSERT); this.deviceId = deviceId; this.measurements = measurements; @@ -197,13 +188,9 @@ public class BatchInsertPlan extends PhysicalPlan { this.times = new long[rows]; QueryDataSetUtils.readTimesFromBuffer(buffer, rows); - QueryDataSetUtils.readValuesFromBuffer(buffer, dataTypeList, measurementSize, rows); + QueryDataSetUtils.readValuesFromBuffer(buffer, dataTypes, measurementSize, rows); } - public void setDataTypeList(List dataTypeList) { - this.dataTypeList = dataTypeList; - setDataTypes(dataTypeList); - } public String getDeviceId() { return deviceId; @@ -230,17 +217,10 @@ public class BatchInsertPlan extends PhysicalPlan { return dataTypes; } - public void setDataTypes(List dataTypes) { + public void setDataTypes(List dataTypes) { this.dataTypes = new TSDataType[dataTypes.size()]; for (int i = 0; i < dataTypes.size(); i++) { - this.dataTypes[i] = QueryDataSetUtils.getTSDataTypeByIoTDBDataType(dataTypes.get(i)); - } - } - - public void setDataTypes(IoTDBDataType[] dataTypes) { - this.dataTypes = new TSDataType[dataTypes.length]; - for (int i = 0; i < dataTypes.length; i++) { - this.dataTypes[i] = QueryDataSetUtils.getTSDataTypeByIoTDBDataType(dataTypes[i]); + this.dataTypes[i] = TSDataType.values()[dataTypes.get(i)]; } } diff --git a/server/src/main/java/org/apache/iotdb/db/service/TSServiceImpl.java b/server/src/main/java/org/apache/iotdb/db/service/TSServiceImpl.java index eef7424f25..7ba97e77f9 100644 --- a/server/src/main/java/org/apache/iotdb/db/service/TSServiceImpl.java +++ b/server/src/main/java/org/apache/iotdb/db/service/TSServiceImpl.java @@ -1023,7 +1023,7 @@ public class TSServiceImpl implements TSIService.Iface, ServerContext { batchInsertPlan.setRowCount(req.size); batchInsertPlan.setTimeBuffer(req.timestamps); batchInsertPlan.setValueBuffer(req.values); - batchInsertPlan.setDataTypeList(req.types); + batchInsertPlan.setDataTypes(req.types); boolean isAllSuccessful = true; diff --git a/server/src/main/java/org/apache/iotdb/db/utils/QueryDataSetUtils.java b/server/src/main/java/org/apache/iotdb/db/utils/QueryDataSetUtils.java index b2b102262e..60e73fdbac 100644 --- a/server/src/main/java/org/apache/iotdb/db/utils/QueryDataSetUtils.java +++ b/server/src/main/java/org/apache/iotdb/db/utils/QueryDataSetUtils.java @@ -18,7 +18,6 @@ import java.io.IOException; import java.nio.ByteBuffer; import java.util.ArrayList; import java.util.List; -import org.apache.iotdb.service.rpc.thrift.IoTDBDataType; import org.apache.iotdb.service.rpc.thrift.TSDataValue; import org.apache.iotdb.service.rpc.thrift.TSQueryDataSet; import org.apache.iotdb.service.rpc.thrift.TSRowRecord; @@ -99,36 +98,13 @@ public class QueryDataSetUtils { "data type %s is not supported when convert data at server", f.getDataType().toString())); } - value.setType(getIoTDBDataTypeByTSDataType(f.getDataType())); + value.setType(f.getDataType().toString()); } tsRowRecord.getValues().add(value); } return tsRowRecord; } - public static IoTDBDataType getIoTDBDataTypeByTSDataType(TSDataType type) { - switch (type) { - case BOOLEAN: return IoTDBDataType.BOOLEAN; - case FLOAT: return IoTDBDataType.FLOAT; - case DOUBLE: return IoTDBDataType.DOUBLE; - case INT32: return IoTDBDataType.INT32; - case INT64: return IoTDBDataType.INT64; - case TEXT: return IoTDBDataType.TEXT; - default: throw new RuntimeException("data type not supported: " + type); - } - } - - public static TSDataType getTSDataTypeByIoTDBDataType(IoTDBDataType type) { - switch (type) { - case BOOLEAN: return TSDataType.BOOLEAN; - case FLOAT: return TSDataType.FLOAT; - case DOUBLE: return TSDataType.DOUBLE; - case INT32: return TSDataType.INT32; - case INT64: return TSDataType.INT64; - case TEXT: return TSDataType.TEXT; - default: throw new RuntimeException("data type not supported: " + type); - } - } public static long[] readTimesFromBuffer(ByteBuffer buffer, int size) { long[] times = new long[size]; @@ -138,16 +114,26 @@ public class QueryDataSetUtils { return times; } + + public static Object[] readValuesFromBuffer(ByteBuffer buffer, List types, + int columns, int size) { + TSDataType[] dataTypes = new TSDataType[types.size()]; + for (int i = 0; i < dataTypes.length; i++) { + dataTypes[i] = TSDataType.values()[types.get(i)]; + } + return readValuesFromBuffer(buffer, dataTypes, columns, size); + } + /** * @param buffer data values * @param columns column number * @param size value count in each column */ - public static Object[] readValuesFromBuffer(ByteBuffer buffer, List types, + public static Object[] readValuesFromBuffer(ByteBuffer buffer, TSDataType[] types, int columns, int size) { Object[] values = new Object[columns]; for (int i = 0; i < columns; i++) { - switch (types.get(i)) { + switch (types[i]) { case BOOLEAN: boolean[] boolValues = new boolean[size]; for (int index = 0; index < size; index++) { @@ -196,7 +182,7 @@ public class QueryDataSetUtils { default: throw new UnSupportedDataTypeException( String.format("data type %s is not supported when convert data at client", - types.get(i))); + types[i])); } } return values; diff --git a/server/src/test/java/org/apache/iotdb/db/engine/storagegroup/StorageGroupProcessorTest.java b/server/src/test/java/org/apache/iotdb/db/engine/storagegroup/StorageGroupProcessorTest.java index 396e63bb2d..5cd9c207cb 100644 --- a/server/src/test/java/org/apache/iotdb/db/engine/storagegroup/StorageGroupProcessorTest.java +++ b/server/src/test/java/org/apache/iotdb/db/engine/storagegroup/StorageGroupProcessorTest.java @@ -18,14 +18,14 @@ */ package org.apache.iotdb.db.engine.storagegroup; +import java.util.ArrayList; +import java.util.List; import org.apache.iotdb.db.engine.MetadataManagerHelper; import org.apache.iotdb.db.engine.querycontext.QueryDataSource; -import org.apache.iotdb.db.exception.StorageGroupProcessorException; import org.apache.iotdb.db.qp.physical.crud.BatchInsertPlan; import org.apache.iotdb.db.qp.physical.crud.InsertPlan; import org.apache.iotdb.db.query.context.QueryContext; import org.apache.iotdb.db.utils.EnvironmentUtils; -import org.apache.iotdb.service.rpc.thrift.IoTDBDataType; import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType; import org.apache.iotdb.tsfile.write.record.TSRecord; import org.apache.iotdb.tsfile.write.record.datapoint.DataPoint; @@ -82,9 +82,9 @@ public class StorageGroupProcessorTest { String[] measurements = new String[2]; measurements[0] = "s0"; measurements[1] = "s1"; - IoTDBDataType[] dataTypes = new IoTDBDataType[2]; - dataTypes[0] = IoTDBDataType.INT32; - dataTypes[1] = IoTDBDataType.INT64; + List dataTypes = new ArrayList<>(); + dataTypes.add(TSDataType.INT32.ordinal()); + dataTypes.add(TSDataType.INT64.ordinal()); BatchInsertPlan batchInsertPlan1 = new BatchInsertPlan("root.vehicle.d0", measurements, dataTypes); @@ -131,7 +131,7 @@ public class StorageGroupProcessorTest { @Test - public void testSeqAndUnSeqSyncClose() throws StorageGroupProcessorException { + public void testSeqAndUnSeqSyncClose() { for (int j = 21; j <= 30; j++) { TSRecord record = new TSRecord(j, deviceId); diff --git a/service-rpc/src/main/thrift/rpc.thrift b/service-rpc/src/main/thrift/rpc.thrift index 5688b84143..2ea6c1d488 100644 --- a/service-rpc/src/main/thrift/rpc.thrift +++ b/service-rpc/src/main/thrift/rpc.thrift @@ -28,10 +28,6 @@ enum TS_StatusCode { INVALID_HANDLE_STATUS } -enum IoTDBDataType { - BOOLEAN, INT32, INT64, FLOAT, DOUBLE, TEXT -} - // The return status of a remote request struct TS_Status { 1: required TS_StatusCode statusCode @@ -197,7 +193,7 @@ struct TSDataValue{ 5: optional double float_val 6: optional double double_val 7: optional binary binary_val - 8: optional IoTDBDataType type + 8: optional string type } struct TSRowRecord{ @@ -269,7 +265,7 @@ struct TSBatchInsertionReq { 2: required list measurements 3: required binary values 4: required binary timestamps - 5: required list types + 5: required list types 6: required i32 size } -- GitLab