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()

Reply via email to