Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit e212cd4

Browse files
AviAvniswilly22
andauthored
bring back execution plan and introduce explain (#153)
* bring back execution plan and introduce explain * fix * keep graph function list minimal Co-authored-by: Roi Lipman <swilly22@users.noreply.github.com>
1 parent 4f61b1e commit e212cd4

File tree

2 files changed

+35
-7
lines changed

2 files changed

+35
-7
lines changed

‎redisgraph/graph.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,21 @@ def query(self, q, params=None, timeout=None, read_only=False):
217217
return self.query(q, params, timeout, read_only)
218218

219219
def execution_plan(self, query, params=None):
220+
"""
221+
Get the execution plan for given query,
222+
GRAPH.EXPLAIN returns an array of operations.
223+
224+
Args:
225+
query: the query that will be executed
226+
params: query parameters
227+
"""
228+
if params is not None:
229+
query = self._build_params_header(params) + query
230+
231+
plan = self.redis_con.execute_command("GRAPH.EXPLAIN", self.name, query)
232+
return "\n".join(plan)
233+
234+
def explain(self, query, params=None):
220235
"""
221236
Get the execution plan for given query,
222237
GRAPH.EXPLAIN returns ExecutionPlan object.

‎tests/functional/test_all.py

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,19 @@ def test_cached_execution(self):
245245
redis_graph.delete()
246246

247247
def test_execution_plan(self):
248+
redis_graph = Graph('execution_plan', self.r)
249+
create_query = """CREATE (:Rider {name:'Valentino Rossi'})-[:rides]->(:Team {name:'Yamaha'}),
250+
(:Rider {name:'Dani Pedrosa'})-[:rides]->(:Team {name:'Honda'}),
251+
(:Rider {name:'Andrea Dovizioso'})-[:rides]->(:Team {name:'Ducati'})"""
252+
redis_graph.query(create_query)
253+
254+
result = redis_graph.execution_plan("MATCH (r:Rider)-[:rides]->(t:Team) WHERE t.name = $name RETURN r.name, t.name, $params", {'name': 'Yehuda'})
255+
expected = "Results\n Project\n Conditional Traverse | (t:Team)->(r:Rider)\n Filter\n Node By Label Scan | (t:Team)"
256+
self.assertEqual(result, expected)
257+
258+
redis_graph.delete()
259+
260+
def test_explain(self):
248261
redis_graph = Graph('execution_plan', self.r)
249262
# graph creation / population
250263
create_query = """CREATE
@@ -253,13 +266,13 @@ def test_execution_plan(self):
253266
(:Rider {name:'Andrea Dovizioso'})-[:rides]->(:Team {name:'Ducati'})"""
254267
redis_graph.query(create_query)
255268

256-
result = redis_graph.execution_plan("""MATCH (r:Rider)-[:rides]->(t:Team)
257-
WHERE t.name = $name
258-
RETURN r.name, t.name
259-
UNION
260-
MATCH (r:Rider)-[:rides]->(t:Team)
261-
WHERE t.name = $name
262-
RETURN r.name, t.name""", {'name': 'Yamaha'})
269+
result = redis_graph.explain("""MATCH (r:Rider)-[:rides]->(t:Team)
270+
WHERE t.name = $name
271+
RETURN r.name, t.name
272+
UNION
273+
MATCH (r:Rider)-[:rides]->(t:Team)
274+
WHERE t.name = $name
275+
RETURN r.name, t.name""", {'name': 'Yamaha'})
263276
expected = '''\
264277
Results
265278
Distinct

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /