Skip to content

OpenCypher Operator Implementation Status

Implementation status of OpenCypher operators in GraphForge.

Legend: ✅ COMPLETE | ⚠️ PARTIAL | ❌ NOT_IMPLEMENTED


Summary

Category Complete Partial Not Implemented Total
Comparison 8 0 0 8
Logical 4 0 0 4
Arithmetic 6 0 0 6
String 5 0 0 5
List 5 0 0 5
Property 1 0 0 1
Pattern 5 0 0 5
TOTAL 34 0 0 34

Overall: 34/34 operators (100%) complete


Comparison Operators

= (Equals) ✅

Status: COMPLETE File: src/graphforge/executor/evaluator.py (binary op evaluation) Tests: Comparison1-4.feature

<> (Not Equals) ✅

Status: COMPLETE File: evaluator.py Tests: Comparison scenarios

< (Less Than) ✅

Status: COMPLETE File: evaluator.py Tests: Comparison scenarios

> (Greater Than) ✅

Status: COMPLETE File: evaluator.py Tests: Comparison scenarios

<= (Less Than or Equal) ✅

Status: COMPLETE File: evaluator.py Tests: Comparison scenarios

>= (Greater Than or Equal) ✅

Status: COMPLETE File: evaluator.py Tests: Comparison scenarios

IS NULL ✅

Status: COMPLETE File: evaluator.py (unary op evaluation) Tests: Null handling scenarios

IS NOT NULL ✅

Status: COMPLETE File: evaluator.py Tests: Null scenarios


Logical Operators

AND ✅

Status: COMPLETE File: evaluator.py Notes: Ternary logic (NULL propagation) Tests: Boolean1-5.feature

OR ✅

Status: COMPLETE File: evaluator.py Notes: Ternary logic Tests: Boolean scenarios

NOT ✅

Status: COMPLETE File: evaluator.py Notes: Ternary logic Tests: Boolean scenarios

XOR ✅

Status: COMPLETE File: evaluator.py Notes: Ternary logic (NULL propagation), precedence: NOT > AND > XOR > OR Tests: tests/integration/test_xor_operator.py, tests/unit/parser/test_parser.py


Arithmetic Operators

+ (Addition) ✅

Status: COMPLETE File: evaluator.py Notes: Supports numeric addition and string concatenation Tests: Mathematical scenarios

- (Subtraction) ✅

Status: COMPLETE File: evaluator.py Tests: Mathematical scenarios

* (Multiplication) ✅

Status: COMPLETE File: evaluator.py Tests: Mathematical scenarios

/ (Division) ✅

Status: COMPLETE File: evaluator.py Tests: Mathematical scenarios

% (Modulo) ✅

Status: COMPLETE File: evaluator.py Tests: Mathematical scenarios

^ (Power) ✅

Status: COMPLETE File: evaluator.py Notes: Right-associative (232 = 512). Highest arithmetic precedence (above , /). int^int returns int if result is whole, else float. Supports negative and fractional exponents. NULL propagation. **Tests:* tests/integration/test_power_operator.py (39 tests)


String Operators

+ (Concatenation) ✅

Status: COMPLETE File: evaluator.py (binary + op) Tests: String scenarios

=~ (Regex Match) ✅

Status: COMPLETE File: evaluator.py Tests: String pattern matching scenarios

STARTS WITH ✅

Status: COMPLETE File: evaluator.py Tests: String scenarios

ENDS WITH ✅

Status: COMPLETE File: evaluator.py Tests: String scenarios

CONTAINS ✅

Status: COMPLETE File: evaluator.py Tests: String scenarios


List Operators

IN (Membership) ✅

Status: COMPLETE File: evaluator.py Tests: List scenarios

[] (Index Access) ✅

Status: COMPLETE File: evaluator.py:1458 (_evaluate_subscript) Tests: List access scenarios

+ (List Concatenation) ✅

Status: COMPLETE File: evaluator.py Tests: List scenarios

[start..end] (Slicing) ✅

Status: COMPLETE File: evaluator.py:1458 (_evaluate_subscript) Signature: list[start..end] Tests: tests/integration/test_list_subscript.py (TestListSliceOperations) Examples: - RETURN [1, 2, 3, 4, 5][1..3][2, 3] - RETURN [1, 2, 3][..2][1, 2] - RETURN [1, 2, 3][1..][2, 3]

[] (Negative Indexing) ✅

Status: COMPLETE File: evaluator.py:1458 (_evaluate_subscript) Signature: list[-index] where -1 is last element, -2 is second-to-last, etc. Tests: tests/integration/test_list_subscript.py (TestListIndexAccess) Examples: - RETURN [1, 2, 3][-1]3 (last element) - RETURN [1, 2, 3][-2]2 (second-to-last) - RETURN [1, 2, 3, 4, 5][-3..][3, 4, 5] (last 3 elements)


Property Access

. (Property Access) ✅

Status: COMPLETE File: evaluator.py (PropertyAccess evaluation) Tests: Extensive property access scenarios


Pattern Operators

- (Undirected Relationship) ✅

Status: COMPLETE File: src/graphforge/parser/cypher.lark:115 Tests: Pattern matching scenarios

→ (Right Arrow) ✅

Status: COMPLETE File: cypher.lark:117 Tests: Pattern scenarios

← (Left Arrow) ✅

Status: COMPLETE File: cypher.lark:116 Tests: Pattern scenarios

-[*]- (Variable Length) ✅

Status: COMPLETE File: cypher.lark:121-124 Tests: Variable-length path scenarios

: (Label Check) ✅

Status: COMPLETE File: Parser and executor Tests: Label matching scenarios


Implementation Notes

Strengths

  • All comparison operators with proper NULL handling
  • All logical operators (AND, OR, XOR, NOT) with ternary logic
  • All arithmetic operators complete including power (^) with right-associativity
  • All string operators including regex matching
  • Pattern operators fully implemented
  • Property access complete
  • All list operators including slicing and negative indexing

Limitations

  • None - all 34 operators fully implemented

References

  • OpenCypher Specification: https://opencypher.org/resources/
  • GraphForge Evaluator: src/graphforge/executor/evaluator.py
  • GraphForge Grammar: src/graphforge/parser/cypher.lark