Skip to content

OpenCypher Pattern Implementation Status

Implementation status of OpenCypher pattern matching features in GraphForge.

Legend: ✅ COMPLETE | ⚠️ PARTIAL | ❌ NOT_IMPLEMENTED


Summary

Pattern Type Status Notes
Node Patterns ✅ COMPLETE All variations supported
Relationship Patterns ✅ COMPLETE Direction, types, properties
Variable-Length Paths ✅ COMPLETE All quantifier forms
Path Variables ✅ COMPLETE Path binding supported
Pattern Predicates ✅ COMPLETE WHERE predicates in patterns fully supported
Optional Patterns ✅ COMPLETE OPTIONAL MATCH
Pattern Comprehension ✅ COMPLETE All forms supported
Multiple Patterns ✅ COMPLETE Comma-separated patterns

Overall: 8/8 pattern types complete (100%)


Node Patterns

Empty Node () ✅

Status: COMPLETE Grammar: cypher.lark:109 Tests: Match scenarios

Node with Variable (n) ✅

Status: COMPLETE Grammar: cypher.lark:109 Tests: Match scenarios

Node with Label (:Label) ✅

Status: COMPLETE Grammar: cypher.lark:109 Tests: Extensive Match scenarios

Node with Variable and Label (n:Label) ✅

Status: COMPLETE Grammar: cypher.lark:109 Tests: Match scenarios

Multiple Labels (n:Label1:Label2) ✅

Status: COMPLETE Grammar: cypher.lark:109 Tests: Label scenarios

Node with Properties ({prop: value}) ✅

Status: COMPLETE Grammar: cypher.lark:109 Tests: Property matching scenarios

Combined (n:Label {prop: value}) ✅

Status: COMPLETE Grammar: cypher.lark:109 Tests: Match scenarios


Relationship Patterns

Undirected -[]- ✅

Status: COMPLETE Grammar: cypher.lark:115 Executor: executor.py:554 (_execute_expand) Tests: Match scenarios

Directed → ✅

Status: COMPLETE Grammar: cypher.lark:117 Tests: Match scenarios

Directed ← ✅

Status: COMPLETE Grammar: cypher.lark:116 Tests: Match scenarios

With Variable -[r]- ✅

Status: COMPLETE Grammar: cypher.lark:115 Tests: Match scenarios

With Type -[:TYPE]- ✅

Status: COMPLETE Grammar: cypher.lark:115 Tests: Match scenarios

With Variable and Type -[r:TYPE]- ✅

Status: COMPLETE Grammar: cypher.lark:115 Tests: Match scenarios

With Properties -[{prop: value}]- ✅

Status: COMPLETE Grammar: cypher.lark:115 Tests: Match scenarios

Multiple Types -[:TYPE1|TYPE2]- ✅

Status: COMPLETE Grammar: Relationship type parsing Tests: Type union scenarios


Variable-Length Paths

Unbounded -[*]- ✅

Status: COMPLETE Grammar: cypher.lark:124 Executor: executor.py:820 (_execute_variable_expand) Tests: Variable-length scenarios

Fixed Range -[*n..m]- ✅

Status: COMPLETE Grammar: cypher.lark:121 Tests: Variable-length scenarios

Min Only -[*n..]- ✅

Status: COMPLETE Grammar: cypher.lark:122 Tests: Variable-length scenarios

Max Only -[*..m]- ✅

Status: COMPLETE Grammar: cypher.lark:123 Tests: Variable-length scenarios

With Type -[:TYPE*]- ✅

Status: COMPLETE Grammar: Combined type and length Tests: Variable-length with type

With Properties -[*{prop: value}]- ✅

Status: COMPLETE Grammar: Combined properties and length Tests: Variable-length with properties


Path Variables

Path Binding (path = (a)-[]->(b)) ✅

Status: COMPLETE Grammar: cypher.lark:104 Tests: Path binding scenarios

Path Functions (length, nodes, relationships) ✅

Status: COMPLETE Executor: Path function evaluation Tests: Path function scenarios


Pattern Predicates

Inline WHERE (WHERE r.weight > 5) ✅

Status: COMPLETE Grammar: cypher.lark:119 (pattern_where rule) Parser: parser.py:481-484 (RelationshipPattern.predicate field) Executor: executor.py:617-622 (_execute_expand), executor.py:904-918 (_execute_variable_expand) Tests: tests/integration/test_pattern_predicates.py (16 comprehensive tests)

Supported features: - Property comparisons (r.since > 2020) - Complex expressions (AND, OR, NOT) - Function calls in predicates (length(r.name) = 3) - NULL handling (predicates with missing properties) - Variable-length paths with predicates - Undirected relationships with predicates - Multiple patterns with different predicates - Combination with external WHERE clauses

Notes: Full openCypher pattern predicate support implemented and tested. All 16 integration tests passing.


Optional Patterns

OPTIONAL MATCH ✅

Status: COMPLETE Grammar: cypher.lark:72 Executor: executor.py:483 (_execute_optional_scan) Tests: Optional match scenarios with NULL handling


Pattern Comprehension

[(pattern) WHERE condition | expression] ✅

Status: COMPLETE Grammar: cypher.lark:263 (pattern_comprehension rule) Parser: parser.py:1047-1068 (pattern_comprehension transformer) Evaluator: evaluator.py:559-591 (PatternComprehension evaluation) Tests: tests/integration/test_pattern_comprehension.py (15 comprehensive tests)

Supported features: - Simple node patterns: [(p:Person) | p.name] - Relationship patterns: [(p)-[:KNOWS]->(f) | f.name] - WITH WHERE filters: [(p:Person) WHERE p.age > 18 | p.name] - Complex expressions: [(p:Person) | p.age * 2] - Nested in RETURN, WHERE, WITH clauses - Multiple pattern comprehensions in one query - Correlated variables from outer scope - NULL property handling

Notes: Full pattern comprehension support implemented. Pattern matching is executed for each input row, with results collected into a list. All 15 integration tests passing.


Multiple Patterns

Comma-Separated Patterns ✅

Status: COMPLETE Grammar: cypher.lark:69 (MATCH supports multiple patterns) Tests: Multiple pattern scenarios

Multiple MATCH Clauses ✅

Status: COMPLETE Grammar: Query structure supports chaining Tests: Chained MATCH scenarios


Implementation Notes

Strengths

  • Comprehensive node matching: All label and property combinations
  • Full relationship support: All directions, types, and properties
  • Variable-length paths: All quantifier forms with proper termination
  • Path variables: Binding and path function support
  • Pattern predicates: Complete WHERE predicate support in patterns
  • Pattern comprehensions: Full support for pattern-based list operations
  • OPTIONAL patterns: Complete NULL-handling outer join semantics

Limitations

  • Quantified path patterns: New GQL spec feature not yet in OpenCypher

Implementation Quality

  • Parser: Comprehensive pattern grammar coverage
  • Planner: Efficient operator generation for patterns
  • Executor: Robust pattern matching with proper semantics
  • Tests: Extensive TCK coverage for all pattern types

Priority for v0.4.0+

  1. Low: Quantified path patterns (new GQL spec)

Version History

  • v0.1.0: Basic node and relationship patterns
  • v0.2.0: Variable-length paths, path variables
  • v0.3.0: OPTIONAL MATCH, pattern predicates (partial), multiple patterns
  • v0.3.3: Pattern predicates (complete), pattern comprehension (complete)

References

  • OpenCypher Specification: https://opencypher.org/resources/
  • GraphForge Grammar: src/graphforge/parser/cypher.lark
  • GraphForge Executor: src/graphforge/executor/executor.py
  • GraphForge Planner: src/graphforge/planner/planner.py