Skip to content

Commit 15febba

Browse files
lehnersmewim
andauthored
Extension of PyQueryResult (#1700)
* add cmake-build-release to gitignore * add getExecutionTime, getCompilingTime, and getNumTuples to python api * Add tests --------- Co-authored-by: Chang Liu <[email protected]>
1 parent 0676369 commit 15febba

5 files changed

Lines changed: 87 additions & 1 deletion

File tree

src_cpp/include/py_query_result.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,12 @@ class PyQueryResult {
4040

4141
bool isSuccess() const;
4242

43+
double getExecutionTime();
44+
45+
double getCompilingTime();
46+
47+
size_t getNumTuples();
48+
4349
private:
4450
static py::dict getPyDictFromProperties(
4551
const std::vector<std::pair<std::string, std::unique_ptr<kuzu::common::Value>>>&

src_cpp/py_query_result.cpp

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,10 @@ void PyQueryResult::initialize(py::handle& m) {
2424
.def("getColumnNames", &PyQueryResult::getColumnNames)
2525
.def("getColumnDataTypes", &PyQueryResult::getColumnDataTypes)
2626
.def("resetIterator", &PyQueryResult::resetIterator)
27-
.def("isSuccess", &PyQueryResult::isSuccess);
27+
.def("isSuccess", &PyQueryResult::isSuccess)
28+
.def("getCompilingTime", &PyQueryResult::getCompilingTime)
29+
.def("getExecutionTime", &PyQueryResult::getExecutionTime)
30+
.def("getNumTuples", &PyQueryResult::getNumTuples);
2831
// PyDateTime_IMPORT is a macro that must be invoked before calling any other cpython datetime
2932
// macros. One could also invoke this in a separate function like constructor. See
3033
// https://docs.python.org/3/c-api/datetime.html for details.
@@ -236,3 +239,15 @@ py::dict PyQueryResult::convertNodeIdToPyDict(const nodeID_t& nodeId) {
236239
idDict["table"] = py::cast(nodeId.tableID);
237240
return idDict;
238241
}
242+
243+
double PyQueryResult::getExecutionTime() {
244+
return queryResult->getQuerySummary()->getExecutionTime();
245+
}
246+
247+
double PyQueryResult::getCompilingTime() {
248+
return queryResult->getQuerySummary()->getCompilingTime();
249+
}
250+
251+
size_t PyQueryResult::getNumTuples() {
252+
return queryResult->getNumTuples();
253+
}

src_py/query_result.py

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,15 @@ class QueryResult:
4444
get_as_torch_geometric()
4545
Converts the nodes and rels in query result into a PyTorch Geometric graph representation
4646
torch_geometric.data.Data or torch_geometric.data.HeteroData.
47+
48+
get_execution_time()
49+
Get the time in ms which was required for executing the query.
50+
51+
get_compiling_time()
52+
Get the time in ms which was required for compiling the query.
53+
54+
def get_num_tuples(self):
55+
Get the number of tuples which the query returned.
4756
"""
4857

4958
def __init__(self, connection, query_result):
@@ -359,3 +368,39 @@ def get_as_torch_geometric(self):
359368

360369
converter = TorchGeometricResultConverter(self)
361370
return converter.get_as_torch_geometric()
371+
372+
def get_execution_time(self):
373+
"""
374+
Get the time in ms which was required for executing the query.
375+
376+
Returns
377+
-------
378+
double
379+
Query execution time as double in ms.
380+
"""
381+
self.check_for_query_result_close()
382+
return self._query_result.getExecutionTime()
383+
384+
def get_compiling_time(self):
385+
"""
386+
Get the time in ms which was required for compiling the query.
387+
388+
Returns
389+
-------
390+
double
391+
Query compile time as double in ms.
392+
"""
393+
self.check_for_query_result_close()
394+
return self._query_result.getCompilingTime()
395+
396+
def get_num_tuples(self):
397+
"""
398+
Get the number of tuples which the query returned.
399+
400+
Returns
401+
-------
402+
int
403+
Number of tuples.
404+
"""
405+
self.check_for_query_result_close()
406+
return self._query_result.getNumTuples()

test/test_main.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
from test_networkx import *
99
from test_parameter import *
1010
from test_prepared_statement import *
11+
from test_query_result import *
1112
from test_query_result_close import *
1213
from test_timeout import *
1314
from test_torch_geometric import *

test/test_query_result.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
def test_get_execution_time(establish_connection):
2+
conn, db = establish_connection
3+
result = conn.execute("MATCH (a:person) WHERE a.ID = 0 RETURN a")
4+
assert result.get_execution_time() > 0
5+
result.close()
6+
7+
8+
def test_get_compiling_time(establish_connection):
9+
conn, db = establish_connection
10+
result = conn.execute("MATCH (a:person) WHERE a.ID = 0 RETURN a")
11+
assert result.get_compiling_time() > 0
12+
result.close()
13+
14+
15+
def test_get_num_tuples(establish_connection):
16+
conn, db = establish_connection
17+
result = conn.execute("MATCH (a:person) WHERE a.ID = 0 RETURN a")
18+
assert result.get_num_tuples() == 1
19+
result.close()

0 commit comments

Comments
 (0)