d573eda8bb
* Add API for batching from the procedure * Use PoolResource for batched procedures
144 lines
4.4 KiB
Python
144 lines
4.4 KiB
Python
# Copyright 2023 Memgraph Ltd.
|
|
#
|
|
# Use of this software is governed by the Business Source License
|
|
# included in the file licenses/BSL.txt; by using this file, you agree to be bound by the terms of the Business Source
|
|
# License, and you may not use this file except in compliance with the Business Source License.
|
|
#
|
|
# As of the Change Date specified in that file, in accordance with
|
|
# the Business Source License, use of this software will be governed
|
|
# by the Apache License, Version 2.0, included in the file
|
|
# licenses/APL.txt.
|
|
|
|
# isort: off
|
|
import sys
|
|
import pytest
|
|
|
|
from common import execute_and_fetch_all, has_n_result_row, has_one_result_row
|
|
from conftest import get_connection
|
|
from mgclient import DatabaseError
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"is_write",
|
|
[
|
|
True,
|
|
False,
|
|
],
|
|
)
|
|
def test_graph_mutability(is_write: bool, connection):
|
|
cursor = connection.cursor()
|
|
|
|
execute_and_fetch_all(cursor, f"MATCH (n) DETACH DELETE n")
|
|
assert has_n_result_row(cursor, "MATCH (n) RETURN n", 0)
|
|
|
|
module = "write" if is_write else "read"
|
|
|
|
result = list(
|
|
execute_and_fetch_all(
|
|
cursor,
|
|
f"CALL batch_py_{module}.graph_is_mutable() " "YIELD mutable, init_called RETURN mutable, init_called",
|
|
)
|
|
)
|
|
assert result == [(is_write, True)]
|
|
|
|
execute_and_fetch_all(cursor, "CREATE ()")
|
|
result = list(
|
|
execute_and_fetch_all(
|
|
cursor,
|
|
"MATCH (n) "
|
|
f"CALL batch_py_{module}.underlying_graph_is_mutable(n) "
|
|
"YIELD mutable, init_called RETURN mutable, init_called",
|
|
)
|
|
)
|
|
assert result == [(is_write, True)]
|
|
|
|
execute_and_fetch_all(cursor, "CREATE ()-[:TYPE]->()")
|
|
result = list(
|
|
execute_and_fetch_all(
|
|
cursor,
|
|
"MATCH (n)-[e]->(m) "
|
|
f"CALL batch_py_{module}.underlying_graph_is_mutable(e) "
|
|
"YIELD mutable, init_called RETURN mutable, init_called",
|
|
)
|
|
)
|
|
assert result == [(is_write, True)]
|
|
|
|
|
|
def test_batching_nums(connection):
|
|
cursor = connection.cursor()
|
|
execute_and_fetch_all(cursor, f"MATCH (n) DETACH DELETE n")
|
|
assert has_n_result_row(cursor, "MATCH (n) RETURN n", 0)
|
|
|
|
result = list(
|
|
execute_and_fetch_all(
|
|
cursor,
|
|
f"CALL batch_py_read.batch_nums() " "YIELD num, init_called, is_valid RETURN num, init_called, is_valid",
|
|
)
|
|
)
|
|
assert result == [(i, True, True) for i in range(1, 11)]
|
|
|
|
execute_and_fetch_all(cursor, "CREATE () CREATE ()")
|
|
assert has_n_result_row(cursor, "MATCH (n) RETURN n", 2)
|
|
result = list(
|
|
execute_and_fetch_all(
|
|
cursor,
|
|
"MATCH (n) "
|
|
"CALL batch_py_read.batch_nums() "
|
|
"YIELD num, init_called, is_valid RETURN num, init_called, is_valid ",
|
|
)
|
|
)
|
|
assert result == [(i, True, True) for i in range(1, 11)] * 2
|
|
|
|
|
|
def test_batching_vertices(connection):
|
|
cursor = connection.cursor()
|
|
execute_and_fetch_all(cursor, f"MATCH (n) DETACH DELETE n")
|
|
assert has_n_result_row(cursor, "MATCH (n) RETURN n", 0)
|
|
|
|
execute_and_fetch_all(cursor, f"CREATE () CREATE ()")
|
|
assert has_n_result_row(cursor, "MATCH (n) RETURN n", 2)
|
|
|
|
with pytest.raises(DatabaseError):
|
|
result = list(
|
|
execute_and_fetch_all(
|
|
cursor, f"CALL batch_py_read.batch_vertices() " "YIELD vertex, init_called RETURN vertex, init_called"
|
|
)
|
|
)
|
|
|
|
|
|
def test_batching_nums_c(connection):
|
|
cursor = connection.cursor()
|
|
execute_and_fetch_all(cursor, f"MATCH (n) DETACH DELETE n")
|
|
assert has_n_result_row(cursor, "MATCH (n) RETURN n", 0)
|
|
|
|
num_ints = 10
|
|
result = list(
|
|
execute_and_fetch_all(
|
|
cursor,
|
|
f"CALL batch_c_read.batch_nums({num_ints}) " "YIELD output RETURN output",
|
|
)
|
|
)
|
|
result_list = [item[0] for item in result]
|
|
print(result_list)
|
|
print([i for i in range(1, num_ints + 1)])
|
|
assert result_list == [i for i in range(1, num_ints + 1)]
|
|
|
|
|
|
def test_batching_strings_c(connection):
|
|
cursor = connection.cursor()
|
|
execute_and_fetch_all(cursor, f"MATCH (n) DETACH DELETE n")
|
|
assert has_n_result_row(cursor, "MATCH (n) RETURN n", 0)
|
|
|
|
num_strings = 10
|
|
result = list(
|
|
execute_and_fetch_all(
|
|
cursor,
|
|
f"CALL batch_c_read.batch_strings({num_strings}) " "YIELD output RETURN output",
|
|
)
|
|
)
|
|
assert len(result) == num_strings
|
|
|
|
|
|
if __name__ == "__main__":
|
|
sys.exit(pytest.main([__file__, "-rA"]))
|