You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by qi...@apache.org on 2023/03/22 12:26:07 UTC

[iotdb] branch rel/0.13 updated: [To rel/0.13] Add query interfaces and throw exception when meet error in Python Client (#9403)

This is an automated email from the ASF dual-hosted git repository.

qiaojialin pushed a commit to branch rel/0.13
in repository https://gitbox.apache.org/repos/asf/iotdb.git


The following commit(s) were added to refs/heads/rel/0.13 by this push:
     new 85d4e803dc [To rel/0.13] Add query interfaces and throw exception when meet error in Python Client (#9403)
85d4e803dc is described below

commit 85d4e803dc41c6a700e852a8ae5ffe088c02fa98
Author: Haonan <hh...@outlook.com>
AuthorDate: Wed Mar 22 20:26:00 2023 +0800

    [To rel/0.13] Add query interfaces and throw exception when meet error in Python Client (#9403)
---
 client-py/iotdb/Session.py        | 83 ++++++++++++++++++++++++++++++++++++++-
 client-py/tests/test_dataframe.py | 14 +++----
 2 files changed, 89 insertions(+), 8 deletions(-)

diff --git a/client-py/iotdb/Session.py b/client-py/iotdb/Session.py
index 17a7c849f1..145fd94370 100644
--- a/client-py/iotdb/Session.py
+++ b/client-py/iotdb/Session.py
@@ -60,6 +60,7 @@ logger = logging.getLogger("IoTDB")
 
 class Session(object):
     SUCCESS_CODE = 200
+    MULTIPLE_ERROR = 506
     DEFAULT_FETCH_SIZE = 10000
     DEFAULT_USER = "root"
     DEFAULT_PASSWORD = "root"
@@ -1034,6 +1035,86 @@ class Session(object):
         verify success of operation
         :param status: execution result status
         """
+        if status.code == Session.MULTIPLE_ERROR:
+            Session.verify_success_by_list(status.subStatus)
+            return 0
         if status.code == Session.SUCCESS_CODE:
             return 0
-        return -1
+
+        logger.error("error status is %s", status)
+        raise RuntimeError(str(status.code) + ": " + status.message)
+
+    @staticmethod
+    def verify_success_by_list(status_list):
+        """
+        verify success of operation
+        :param status_list: execution result status
+        """
+        message = str(Session.MULTIPLE_ERROR) + ": "
+        for status in status_list:
+            if status.code != Session.SUCCESS_CODE:
+                message += status.message + "; "
+        raise RuntimeError(message)
+
+    def execute_raw_data_query(
+        self, paths: list, start_time: int, end_time: int
+    ) -> SessionDataSet:
+        """
+        execute query statement and returns SessionDataSet
+        :param paths: String path list
+        :param start_time: Query start time
+        :param end_time: Query end time
+        :return: SessionDataSet, contains query results and relevant info (see SessionDataSet.py)
+        """
+        request = TSRawDataQueryReq(
+            self.__session_id,
+            paths,
+            self.__fetch_size,
+            startTime=start_time,
+            endTime=end_time,
+            statementId=self.__statement_id,
+            enableRedirectQuery=False,
+        )
+        resp = self.__client.executeRawDataQuery(request)
+        return SessionDataSet(
+            "",
+            resp.columns,
+            resp.dataTypeList,
+            resp.columnNameIndexMap,
+            resp.queryId,
+            self.__client,
+            self.__statement_id,
+            self.__session_id,
+            resp.queryDataSet,
+            resp.ignoreTimeStamp,
+        )
+
+    def execute_last_data_query(self, paths: list, last_time: int) -> SessionDataSet:
+        """
+        execute query statement and returns SessionDataSet
+        :param paths: String path list
+        :param last_time: Query last time
+        :return: SessionDataSet, contains query results and relevant info (see SessionDataSet.py)
+        """
+        request = TSLastDataQueryReq(
+            self.__session_id,
+            paths,
+            self.__fetch_size,
+            last_time,
+            self.__statement_id,
+            enableRedirectQuery=False,
+        )
+
+        resp = self.__client.executeLastDataQuery(request)
+        return SessionDataSet(
+            "",
+            resp.columns,
+            resp.dataTypeList,
+            resp.columnNameIndexMap,
+            resp.queryId,
+            self.__client,
+            self.__statement_id,
+            self.__session_id,
+            resp.queryDataSet,
+            resp.ignoreTimeStamp,
+        )
diff --git a/client-py/tests/test_dataframe.py b/client-py/tests/test_dataframe.py
index 6ff2d30ca4..f957c2da42 100644
--- a/client-py/tests/test_dataframe.py
+++ b/client-py/tests/test_dataframe.py
@@ -28,9 +28,9 @@ def test_simple_query():
         session = Session(db.get_container_host_ip(), db.get_exposed_port(6667))
         session.open(False)
 
-        session.execute_non_query_statement("set storage group to root.device")
+        session.execute_non_query_statement("set storage group to root.device1")
         # Write data
-        session.insert_str_record("root.device", 123, "pressure", "15.0")
+        session.insert_str_record("root.device1", 123, "pressure", "15.0")
 
         # Read
         session_data_set = session.execute_query_statement("SELECT ** FROM root")
@@ -38,7 +38,7 @@ def test_simple_query():
 
         session.close()
 
-    assert list(df.columns) == ["Time", "root.device.pressure"]
+    assert list(df.columns) == ["Time", "root.device1.pressure"]
     assert_array_equal(df.values, [[123.0, 15.0]])
 
 
@@ -47,9 +47,9 @@ def test_non_time_query():
         db: IoTDBContainer
         session = Session(db.get_container_host_ip(), db.get_exposed_port(6667))
         session.open(False)
-        session.execute_non_query_statement("set storage group to root.device")
+        session.execute_non_query_statement("set storage group to root.device1")
         # Write data
-        session.insert_str_record("root.device", 123, "pressure", "15.0")
+        session.insert_str_record("root.device1", 123, "pressure", "15.0")
 
         # Read
         session_data_set = session.execute_query_statement("SHOW TIMESERIES")
@@ -72,9 +72,9 @@ def test_non_time_query():
     assert_array_equal(
         df.values,
         [[
-                "root.device.pressure",
+                "root.device1.pressure",
                 None,
-                "root.device",
+                "root.device1",
                 "FLOAT",
                 "GORILLA",
                 "SNAPPY",