Skip to content

Commit 8dd8a02

Browse files
committed
Removed implicit query fallback execution from query_database
1 parent d9b2d33 commit 8dd8a02

File tree

2 files changed

+12
-64
lines changed

2 files changed

+12
-64
lines changed

src/neo4j_graphrag/schema.py

Lines changed: 11 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818

1919
import neo4j
2020
from neo4j import Query
21-
from neo4j.exceptions import ClientError, CypherTypeError, Neo4jError
21+
from neo4j.exceptions import ClientError, CypherTypeError
2222

2323
BASE_KG_BUILDER_LABEL = "__KGBuilder__"
2424
BASE_ENTITY_LABEL = "__Entity__"
@@ -161,38 +161,16 @@ def query_database(
161161
list[dict[str, Any]]: the result of the query in json format.
162162
"""
163163
if not session_params:
164-
try:
165-
data = driver.execute_query(
166-
Query(text=query, timeout=timeout),
167-
database_=database,
168-
parameters_=params,
169-
)
170-
json_data = [r.data() for r in data.records]
171-
if sanitize:
172-
json_data = [_value_sanitize(el) for el in json_data]
173-
return json_data
174-
except Neo4jError as e:
175-
if not (
176-
(
177-
( # isCallInTransactionError
178-
e.code == "Neo.DatabaseError.Statement.ExecutionFailed"
179-
or e.code
180-
== "Neo.DatabaseError.Transaction.TransactionStartFailed"
181-
)
182-
and e.message is not None
183-
and "in an implicit transaction" in e.message
184-
)
185-
or ( # isPeriodicCommitError
186-
e.code == "Neo.ClientError.Statement.SemanticError"
187-
and e.message is not None
188-
and (
189-
"in an open transaction is not possible" in e.message
190-
or "tried to execute in an explicit transaction" in e.message
191-
)
192-
)
193-
):
194-
raise
195-
# Fallback to allow implicit transactions
164+
data = driver.execute_query(
165+
Query(text=query, timeout=timeout),
166+
database_=database,
167+
parameters_=params,
168+
)
169+
json_data = [r.data() for r in data.records]
170+
if sanitize:
171+
json_data = [_value_sanitize(el) for el in json_data]
172+
return json_data
173+
196174
session_params.setdefault("database", database)
197175
with driver.session(**session_params) as session:
198176
result = session.run(Query(text=query, timeout=timeout), params)

tests/unit/test_schema.py

Lines changed: 1 addition & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919

2020
import pytest
2121
from neo4j import Driver, Query
22-
from neo4j.exceptions import Neo4jError
2322
from neo4j_graphrag.schema import (
2423
BASE_ENTITY_LABEL,
2524
BASE_KG_BUILDER_LABEL,
@@ -30,12 +29,11 @@
3029
NODE_PROPERTIES_QUERY,
3130
REL_PROPERTIES_QUERY,
3231
REL_QUERY,
32+
_value_sanitize,
3333
format_schema,
3434
get_enhanced_schema_cypher,
3535
get_schema,
3636
get_structured_schema,
37-
query_database,
38-
_value_sanitize,
3937
)
4038

4139

@@ -212,34 +210,6 @@ def test__value_sanitize(
212210
), f"Failed test case: {description}"
213211

214212

215-
def test_query_fallback_execution(driver: MagicMock) -> None:
216-
"""Test the fallback to allow for implicit transactions in query."""
217-
err = Neo4jError()
218-
err.code = "Neo.DatabaseError.Statement.ExecutionFailed"
219-
err.message = "in an implicit transaction"
220-
driver.execute_query.side_effect = err
221-
mock_session = MagicMock()
222-
mock_result = MagicMock()
223-
mock_result.data.return_value = {
224-
"key1": "value1",
225-
"oversized_list": list(range(LIST_LIMIT + 1)),
226-
}
227-
mock_session.run.return_value = [mock_result]
228-
driver.session.return_value.__enter__.return_value = mock_session
229-
driver.session.return_value.__exit__.return_value = None
230-
query = "MATCH (n) RETURN n;"
231-
params = {"param1": "value1"}
232-
json_data = query_database(
233-
driver=driver, query=query, database="test_db", params=params, sanitize=True
234-
)
235-
driver.session.assert_called_with(database="test_db")
236-
called_args, _ = mock_session.run.call_args
237-
called_query = called_args[0]
238-
assert called_query.text == query
239-
assert called_args[1] == params
240-
assert json_data == [{"key1": "value1"}]
241-
242-
243213
@pytest.mark.parametrize(
244214
"description, schema, is_enhanced, expected_output",
245215
[

0 commit comments

Comments
 (0)