Skip to content

Feature Request: Add string comparison operators (CONTAINS, STARTS WITH, ENDS WITH) #77

@youssef-tharwat

Description

@youssef-tharwat

Summary

The Cypher parser currently doesn't support string comparison operators like CONTAINS, STARTS WITH, and ENDS WITH. These are commonly used Cypher operators for filtering nodes/relationships by partial string matching.

Current Behavior

Queries using string operators fail with a parsing error:

MATCH (s:Symbol) WHERE s.name CONTAINS 'Auth' RETURN s.name LIMIT 5

Error:

Cypher query error: Failed to parse Cypher query: Cypher parse error at position 0: 
Failed to parse Cypher query: Parsing Error: Error { input: "WHERE s.name CONTAINS 'Auth' RETURN s.name LIMIT 5", code: Tag }

Expected Behavior

String comparison operators should be parsed and translated to SQL equivalents:

Cypher SQL Equivalent
CONTAINS 'foo' LIKE '%foo%'
STARTS WITH 'foo' LIKE 'foo%'
ENDS WITH 'foo' LIKE '%foo'

Technical Context

Looking at src/parser.rs, the comparison_operator function (lines 356-366) only handles:

  • =, <>, !=
  • <, >, <=, >=

And comparison_expression handles:

  • IN [...]
  • IS NULL, IS NOT NULL

String operators would need to be added as additional branches, likely with a new StringOperator enum or extending ComparisonOperator.

Use Case

We're using lance-graph for a code analysis tool where users query a knowledge graph of code symbols. Partial name matching is essential:

-- Find all authentication-related functions
MATCH (s:Symbol) WHERE s.name CONTAINS 'auth' RETURN s

-- Find all test files  
MATCH (f:File) WHERE f.path ENDS WITH '.test.ts' RETURN f

-- Find functions starting with 'handle'
MATCH (s:Symbol) WHERE s.name STARTS WITH 'handle' RETURN s

Workaround

Currently we're using exact matches or fetching all results and filtering client-side, which is inefficient.

References

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions