Skip to content

Commit a1457d0

Browse files
authored
Merge branch 'master' into GraphBLAS-5.1.9
2 parents bbc1210 + 762d849 commit a1457d0

File tree

4 files changed

+94
-5
lines changed

4 files changed

+94
-5
lines changed

.github/workflows/deploy-docs.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@ jobs:
1919
- name: Get all tags
2020
run: git fetch -t
2121
- name: Set up Python 3.x
22-
uses: actions/setup-python@v1
22+
uses: actions/setup-python@v2
2323
with:
24-
python-version: '3.x'
24+
python-version: '3.9'
2525
- name: Display Python version
2626
run: python -c "import sys; print(sys.version)"
2727
- name: Install docs dependencies

src/execution_plan/optimizations/utilize_indices.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -415,7 +415,7 @@ void reduce_cond_op(ExecutionPlan *plan, OpCondTraverse *cond) {
415415
const char *edge = AlgebraicExpression_Edge(cond->ae);
416416
if(!edge) return;
417417

418-
QGEdge *e = QueryGraph_GetEdgeByAlias(plan->query_graph, edge);
418+
QGEdge *e = QueryGraph_GetEdgeByAlias(cond->op.plan->query_graph, edge);
419419
if(QGEdge_RelationCount(e) != 1) return;
420420

421421
const char *label = QGEdge_Relation(e, 0);
@@ -446,7 +446,7 @@ void reduce_cond_op(ExecutionPlan *plan, OpCondTraverse *cond) {
446446

447447

448448
const char *other_alias = AlgebraicExpression_Dest(cond->ae);
449-
QGNode *other_node = QueryGraph_GetNodeByAlias(plan->query_graph, other_alias);
449+
QGNode *other_node = QueryGraph_GetNodeByAlias(cond->op.plan->query_graph, other_alias);
450450
ASSERT(other_node != NULL);
451451
uint other_label_count = QGNode_LabelCount(other_node);
452452
if(other_label_count > 0) {

tests/flow/test_edge_index_scans.py

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -375,3 +375,92 @@ def test_18_index_scan_and_label_filter(self):
375375
query_result = redis_graph.query(query)
376376
expected_result = ["Alon"]
377377
self.env.assertEquals(query_result.result_set[0], expected_result)
378+
379+
def test19_index_scan_and_with(self):
380+
query = "MATCH (n)-[f:friend]->(m) WHERE f.created_at = 1 WITH n RETURN n.name"
381+
plan = redis_graph.execution_plan(query)
382+
self.env.assertIn('Edge By Index Scan', plan)
383+
self.env.assertNotIn('All Node Scan', plan)
384+
self.env.assertNotIn('Filter', plan)
385+
query_result = redis_graph.query(query)
386+
expected_result = ["Roi"]
387+
self.env.assertEquals(query_result.result_set[0], expected_result)
388+
389+
query = "MATCH (n:person)-[f:friend]->(m) WHERE f.created_at = 1 WITH n RETURN n.name"
390+
plan = redis_graph.execution_plan(query)
391+
self.env.assertIn('Edge By Index Scan', plan)
392+
self.env.assertIn('Node By Label Scan', plan)
393+
self.env.assertNotIn('Filter', plan)
394+
query_result = redis_graph.query(query)
395+
expected_result = ["Roi"]
396+
self.env.assertEquals(query_result.result_set[0], expected_result)
397+
398+
query = "MATCH (n:person)-[f:friend]->(m:person) WHERE f.created_at = 1 WITH n RETURN n.name"
399+
plan = redis_graph.execution_plan(query)
400+
self.env.assertIn('Edge By Index Scan', plan)
401+
self.env.assertIn('Node By Label Scan', plan)
402+
self.env.assertIn('Filter', plan)
403+
query_result = redis_graph.query(query)
404+
expected_result = ["Roi"]
405+
self.env.assertEquals(query_result.result_set[0], expected_result)
406+
407+
query = "MATCH (n:person {name: 'Roi'})-[f:friend]->(m:person) WHERE f.created_at = 1 WITH n RETURN n.name"
408+
plan = redis_graph.execution_plan(query)
409+
self.env.assertIn('Edge By Index Scan', plan)
410+
self.env.assertIn('Node By Label Scan', plan)
411+
self.env.assertIn('Filter', plan)
412+
query_result = redis_graph.query(query)
413+
expected_result = ["Roi"]
414+
self.env.assertEquals(query_result.result_set[0], expected_result)
415+
416+
query = "MATCH (n:person {name: 'Alon'})-[f:friend]->(m:person) WHERE f.created_at = 1 WITH n RETURN n.name"
417+
plan = redis_graph.execution_plan(query)
418+
self.env.assertIn('Edge By Index Scan', plan)
419+
self.env.assertIn('Node By Label Scan', plan)
420+
self.env.assertIn('Filter', plan)
421+
query_result = redis_graph.query(query)
422+
self.env.assertEquals(query_result.result_set, [])
423+
424+
query = "MATCH (n)<-[f:friend]-(m) WHERE f.created_at = 1 WITH n RETURN n.name"
425+
plan = redis_graph.execution_plan(query)
426+
self.env.assertIn('Edge By Index Scan', plan)
427+
self.env.assertNotIn('All Node Scan', plan)
428+
self.env.assertNotIn('Filter', plan)
429+
query_result = redis_graph.query(query)
430+
expected_result = ["Alon"]
431+
self.env.assertEquals(query_result.result_set[0], expected_result)
432+
433+
query = "MATCH (n:person)<-[f:friend]-(m) WHERE f.created_at = 1 WITH n RETURN n.name"
434+
plan = redis_graph.execution_plan(query)
435+
self.env.assertIn('Edge By Index Scan', plan)
436+
self.env.assertIn('Node By Label Scan', plan)
437+
self.env.assertNotIn('Filter', plan)
438+
query_result = redis_graph.query(query)
439+
expected_result = ["Alon"]
440+
self.env.assertEquals(query_result.result_set[0], expected_result)
441+
442+
query = "MATCH (n:person)<-[f:friend]-(m:person) WHERE f.created_at = 1 WITH n RETURN n.name"
443+
plan = redis_graph.execution_plan(query)
444+
self.env.assertIn('Edge By Index Scan', plan)
445+
self.env.assertIn('Node By Label Scan', plan)
446+
self.env.assertIn('Filter', plan)
447+
query_result = redis_graph.query(query)
448+
expected_result = ["Alon"]
449+
self.env.assertEquals(query_result.result_set[0], expected_result)
450+
451+
query = "MATCH (n:person {name: 'Roi'})<-[f:friend]-(m:person) WHERE f.created_at = 1 WITH n RETURN n.name"
452+
plan = redis_graph.execution_plan(query)
453+
self.env.assertIn('Edge By Index Scan', plan)
454+
self.env.assertIn('Node By Label Scan', plan)
455+
self.env.assertIn('Filter', plan)
456+
query_result = redis_graph.query(query)
457+
self.env.assertEquals(query_result.result_set, [])
458+
459+
query = "MATCH (n:person {name: 'Alon'})<-[f:friend]-(m:person) WHERE f.created_at = 1 WITH n RETURN n.name"
460+
plan = redis_graph.execution_plan(query)
461+
self.env.assertIn('Edge By Index Scan', plan)
462+
self.env.assertIn('Node By Label Scan', plan)
463+
self.env.assertIn('Filter', plan)
464+
query_result = redis_graph.query(query)
465+
expected_result = ["Alon"]
466+
self.env.assertEquals(query_result.result_set[0], expected_result)

0 commit comments

Comments
 (0)