This is an automated email from the ASF dual-hosted git repository. leirui pushed a commit to branch research/M4-visualization in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 5d1b38cf49ad89032459322223776b5b9617ea62 Author: Lei Rui <[email protected]> AuthorDate: Fri Jun 16 15:56:57 2023 +0800 fix python-iotdb-connector with MIN_MAX self-defined datatype --- client-py/iotdb/utils/Field.py | 24 ++++++++++++++++++++---- client-py/iotdb/utils/IoTDBConstants.py | 4 ++++ client-py/iotdb/utils/IoTDBRpcDataSet.py | 6 +++++- client-py/iotdb/utils/SessionDataSet.py | 10 +++++++++- 4 files changed, 38 insertions(+), 6 deletions(-) diff --git a/client-py/iotdb/utils/Field.py b/client-py/iotdb/utils/Field.py index 0756b1c49d6..add1b2c5398 100644 --- a/client-py/iotdb/utils/Field.py +++ b/client-py/iotdb/utils/Field.py @@ -47,7 +47,11 @@ class Field(object): output.set_float_value(field.get_float_value()) elif output.get_data_type() == TSDataType.DOUBLE: output.set_double_value(field.get_double_value()) - elif output.get_data_type() == TSDataType.TEXT: + elif output.get_data_type() == TSDataType.TEXT \ + or output.get_data_type() == TSDataType.MIN_MAX_DOUBLE \ + or output.get_data_type() == TSDataType.MIN_MAX_FLOAT \ + or output.get_data_type() == TSDataType.MIN_MAX_INT32 \ + or output.get_data_type() == TSDataType.MIN_MAX_INT64: output.set_binary_value(field.get_binary_value()) else: raise Exception( @@ -122,7 +126,11 @@ class Field(object): return str(self.__float_value) elif self.__data_type == TSDataType.DOUBLE: return str(self.__double_value) - elif self.__data_type == TSDataType.TEXT: + elif self.__data_type == TSDataType.TEXT \ + or self.__data_type == TSDataType.MIN_MAX_DOUBLE \ + or self.__data_type == TSDataType.MIN_MAX_FLOAT \ + or self.__data_type == TSDataType.MIN_MAX_INT32 \ + or self.__data_type == TSDataType.MIN_MAX_INT64: return self.__binary_value.decode("utf-8") else: raise Exception("unsupported data type {}".format(self.__data_type)) @@ -146,7 +154,11 @@ class Field(object): return self.get_float_value() elif data_type == TSDataType.DOUBLE: return self.get_double_value() - elif data_type == TSDataType.TEXT: + elif data_type == TSDataType.TEXT \ + or data_type == TSDataType.MIN_MAX_DOUBLE \ + or data_type == TSDataType.MIN_MAX_FLOAT \ + or data_type == TSDataType.MIN_MAX_INT32 \ + or data_type == TSDataType.MIN_MAX_INT64: return self.get_binary_value() else: raise Exception("unsupported data type {}".format(data_type)) @@ -170,7 +182,11 @@ class Field(object): field.set_float_value(value) elif data_type == TSDataType.DOUBLE: field.set_double_value(value) - elif data_type == TSDataType.TEXT: + elif data_type == TSDataType.TEXT \ + or data_type == TSDataType.MIN_MAX_DOUBLE \ + or data_type == TSDataType.MIN_MAX_FLOAT \ + or data_type == TSDataType.MIN_MAX_INT32 \ + or data_type == TSDataType.MIN_MAX_INT64: field.set_binary_value(value) else: raise Exception("unsupported data type {}".format(data_type)) diff --git a/client-py/iotdb/utils/IoTDBConstants.py b/client-py/iotdb/utils/IoTDBConstants.py index 9a1a1564668..849fc5a2865 100644 --- a/client-py/iotdb/utils/IoTDBConstants.py +++ b/client-py/iotdb/utils/IoTDBConstants.py @@ -27,6 +27,10 @@ class TSDataType(Enum): FLOAT = 3 DOUBLE = 4 TEXT = 5 + MIN_MAX_INT32 = 6 + MIN_MAX_INT64 = 7 + MIN_MAX_FLOAT = 8 + MIN_MAX_DOUBLE = 9 # this method is implemented to avoid the issue reported by: # https://bugs.python.org/issue30545 diff --git a/client-py/iotdb/utils/IoTDBRpcDataSet.py b/client-py/iotdb/utils/IoTDBRpcDataSet.py index 6520a048d78..1f72c6510de 100644 --- a/client-py/iotdb/utils/IoTDBRpcDataSet.py +++ b/client-py/iotdb/utils/IoTDBRpcDataSet.py @@ -173,7 +173,11 @@ class IoTDBRpcDataSet(object): elif data_type == TSDataType.DOUBLE: self.__value[i] = value_buffer[:8] self.__query_data_set.valueList[i] = value_buffer[8:] - elif data_type == TSDataType.TEXT: + elif data_type == TSDataType.TEXT \ + or data_type == TSDataType.MIN_MAX_DOUBLE \ + or data_type == TSDataType.MIN_MAX_FLOAT \ + or data_type == TSDataType.MIN_MAX_INT32 \ + or data_type == TSDataType.MIN_MAX_INT64: length = int.from_bytes( value_buffer[:4], byteorder="big", signed=False ) diff --git a/client-py/iotdb/utils/SessionDataSet.py b/client-py/iotdb/utils/SessionDataSet.py index f8946cd3c07..1b3494d2b03 100644 --- a/client-py/iotdb/utils/SessionDataSet.py +++ b/client-py/iotdb/utils/SessionDataSet.py @@ -116,7 +116,11 @@ class SessionDataSet(object): elif data_type == TSDataType.DOUBLE: value = struct.unpack(">d", value_bytes)[0] field.set_double_value(value) - elif data_type == TSDataType.TEXT: + elif data_type == TSDataType.TEXT \ + or data_type == TSDataType.MIN_MAX_DOUBLE \ + or data_type == TSDataType.MIN_MAX_FLOAT \ + or data_type == TSDataType.MIN_MAX_INT32 \ + or data_type == TSDataType.MIN_MAX_INT64: field.set_binary_value(value_bytes) else: raise RuntimeError("unsupported data type {}.".format(data_type)) @@ -172,6 +176,10 @@ def get_typed_point(field: Field, none_value=None): TSDataType.INT32: lambda field: field.get_int_value(), TSDataType.DOUBLE: lambda field: field.get_double_value(), TSDataType.INT64: lambda field: field.get_long_value(), + TSDataType.MIN_MAX_DOUBLE: lambda field: field.get_string_value(), + TSDataType.MIN_MAX_FLOAT: lambda field: field.get_string_value(), + TSDataType.MIN_MAX_INT32: lambda field: field.get_string_value(), + TSDataType.MIN_MAX_INT64: lambda field: field.get_string_value(), } result_next_type: TSDataType = field.get_data_type()
