Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Extension of PyQueryResult #1700

Merged
merged 3 commits into from
Jun 22, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ __pycache__/
*.py[cod]
*$py.class
cmake-build-debug/
cmake-build-release/
test/unittest_temp_*
dataset/parquet_temp_*
tools/python_api/test/test_PYTHON_CSV.csv
Expand Down
6 changes: 6 additions & 0 deletions tools/python_api/src_cpp/include/py_query_result.h
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,12 @@ class PyQueryResult {

bool isSuccess() const;

double getExecutionTime();

double getCompilingTime();

size_t getNumTuples();

private:
static py::dict getPyDictFromProperties(
const std::vector<std::pair<std::string, std::unique_ptr<kuzu::common::Value>>>&
Expand Down
17 changes: 16 additions & 1 deletion tools/python_api/src_cpp/py_query_result.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,10 @@ void PyQueryResult::initialize(py::handle& m) {
.def("getColumnNames", &PyQueryResult::getColumnNames)
.def("getColumnDataTypes", &PyQueryResult::getColumnDataTypes)
.def("resetIterator", &PyQueryResult::resetIterator)
.def("isSuccess", &PyQueryResult::isSuccess);
.def("isSuccess", &PyQueryResult::isSuccess)
.def("getCompilingTime", &PyQueryResult::getCompilingTime)
.def("getExecutionTime", &PyQueryResult::getExecutionTime)
.def("getNumTuples", &PyQueryResult::getNumTuples);
// PyDateTime_IMPORT is a macro that must be invoked before calling any other cpython datetime
// macros. One could also invoke this in a separate function like constructor. See
// https://docs.python.org/3/c-api/datetime.html for details.
Expand Down Expand Up @@ -236,3 +239,15 @@ py::dict PyQueryResult::convertNodeIdToPyDict(const nodeID_t& nodeId) {
idDict["table"] = py::cast(nodeId.tableID);
return idDict;
}

double PyQueryResult::getExecutionTime() {
return queryResult->getQuerySummary()->getExecutionTime();
}

double PyQueryResult::getCompilingTime() {
return queryResult->getQuerySummary()->getCompilingTime();
}

size_t PyQueryResult::getNumTuples() {
return queryResult->getNumTuples();
}
45 changes: 45 additions & 0 deletions tools/python_api/src_py/query_result.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,15 @@ class QueryResult:
get_as_torch_geometric()
Converts the nodes and rels in query result into a PyTorch Geometric graph representation
torch_geometric.data.Data or torch_geometric.data.HeteroData.

get_execution_time()
Get the time in ms which was required for executing the query.

get_compiling_time()
Get the time in ms which was required for compiling the query.

def get_num_tuples(self):
Get the number of tuples which the query returned.
"""

def __init__(self, connection, query_result):
Expand Down Expand Up @@ -359,3 +368,39 @@ def get_as_torch_geometric(self):

converter = TorchGeometricResultConverter(self)
return converter.get_as_torch_geometric()

def get_execution_time(self):
"""
Get the time in ms which was required for executing the query.

Returns
-------
double
Query execution time as double in ms.
"""
self.check_for_query_result_close()
return self._query_result.getExecutionTime()

def get_compiling_time(self):
"""
Get the time in ms which was required for compiling the query.

Returns
-------
double
Query compile time as double in ms.
"""
self.check_for_query_result_close()
return self._query_result.getCompilingTime()

def get_num_tuples(self):
"""
Get the number of tuples which the query returned.

Returns
-------
int
Number of tuples.
"""
self.check_for_query_result_close()
return self._query_result.getNumTuples()
1 change: 1 addition & 0 deletions tools/python_api/test/test_main.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
from test_networkx import *
from test_parameter import *
from test_prepared_statement import *
from test_query_result import *
from test_query_result_close import *
from test_timeout import *
from test_torch_geometric import *
Expand Down
19 changes: 19 additions & 0 deletions tools/python_api/test/test_query_result.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
def test_get_execution_time(establish_connection):
conn, db = establish_connection
result = conn.execute("MATCH (a:person) WHERE a.ID = 0 RETURN a")
assert result.get_execution_time() > 0
result.close()


def test_get_compiling_time(establish_connection):
conn, db = establish_connection
result = conn.execute("MATCH (a:person) WHERE a.ID = 0 RETURN a")
assert result.get_compiling_time() > 0
result.close()


def test_get_num_tuples(establish_connection):
conn, db = establish_connection
result = conn.execute("MATCH (a:person) WHERE a.ID = 0 RETURN a")
assert result.get_num_tuples() == 1
result.close()
Loading