Skip to content

Cypher Coverage

RedisGraph implements a subset of the Cypher language, which is growing as development continues. This document is based on the Cypher Query Language Reference (version 9), available at OpenCypher Resources.

Patterns

Patterns are fully supported.

Types

Structural types

  • Nodes
    • Nodes are fully supported save that a node can only be associated with a single label.
  • Relationships
  • Path variables (alternating sequence of nodes and relationships).

Composite types

  • Lists

Unsupported:

  • Maps
  • Temporal types (Date, DateTime, LocalDateTime, Time, LocalTime, Duration)

Literal types

  • Numeric types (64-bit doubles and 64-bit signed integer representations)
  • String literals
  • Booleans

Unsupported:

  • Hexadecimal and octal numerics

Other

NULL is supported as a representation of a missing or undefined value.

Comparability, equality, orderability, and equivalence

This is a somewhat nebulous area in Cypher itself, with a lot of edge cases. Broadly speaking, RedisGraph behaves as expected with string and numeric values. There are likely some behaviors involving the numerics NaN, -inf, inf, and possibly -0.0 that deviate from the Cypher standard. We do not support any of these properties at the type level, meaning nodes and relationships are not internally comparable.

Clauses

Reading Clauses

  • MATCH

Unsupported:

  • OPTIONAL MATCH
  • MANDATORY MATCH

Projecting Clauses

  • RETURN
  • AS
  • WITH
  • UNWIND

Reading sub-clauses

  • WHERE
  • ORDER BY
  • SKIP
  • LIMIT

Writing Clauses

  • CREATE
  • DELETE
    • We actually implement DETACH DELETE, the distinction being that relationships invalidated by node deletions are automatically deleted.
  • SET

Unsupported:

  • REMOVE (to modify properties)
    • Properties can be deleted with SET [prop] = NULL.

Reading/Writing Clauses

Set Operations

  • UNION
  • UNION ALL

Functions

Scalar functions

  • id
  • labels
  • timestamp
  • type
  • coalesce

Unsupported:

  • Some casting functions (toBoolean, toFloat)
  • Relationship functions (startNode, endNode)
  • Temporal arithmetic functions

Aggregating functions

  • avg
  • collect
  • count
  • max
  • min
  • percentileCont
  • percentileDist
  • stDev
  • stDevP
  • sum

List functions

  • head
  • range
  • reverse
  • size
  • tail

Math functions - numeric

  • abs
  • ceil
  • floor
  • sign
  • round
  • rand
  • toInteger

String functions

  • left
  • right
  • trim
  • lTrim
  • rTrim
  • reverse
  • substring
  • toLower
  • toUpper
  • toString

Unsupported:

  • replace
  • split

Predicate functions

  • exists

Expression functions

  • case...when

Unsupported function classes

  • Logarithmic math functions
  • Trigonometric math functions
  • User-defined functions

Operators

Mathematical operators

  • Multiplication, addition, subtraction, division, modulo

Unsupported:

  • Exponentiation

String operators

  • String operators (STARTS WITH, ENDS WITH, CONTAINS) are supported.

Unsupported:

  • Regex operator

Boolean operators

  • AND
  • OR
  • NOT
  • XOR

Parameters

Parameters may be specified to allow for more flexible query construction:

MATCH (p:Person {name: $name_param}) RETURN p

Each RedisGraph client introduces a language-appropriate method for setting parameters, and is described in their documentation.

Non-Cypher queries

  • RedisGraph provides the GRAPH.EXPLAIN command to print the execution plan of a provided query.
  • GRAPH.DELETE will remove a graph and all Redis keys associated with it.
  • We do not currently provide support for queries that retrieve schemas, though the LABELS and TYPE scalar functions may be used to get a graph overview.