Cypher coverage

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
  • Relationships
  • Path variables (alternating sequence of nodes and relationships).

Composite types

  • Lists
  • 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, FalkorDB 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
  • OPTIONAL MATCH

    Unsupported:

  • Label expressions

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
  • REMOVE (to modify properties and labels). See REMOVE for details.

Reading/Writing Clauses

Set Operations

  • UNION
  • UNION ALL

Functions

The currently-supported functions are listed in the Functions documentation.

Unsupported:

  • Temporal arithmetic functions
  • User-defined functions

Operators

Mathematical operators

The currently-supported functions are listed in the mathematical operators documentation.

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:

CYPHER name_param = "Niccolò Machiavelli" birth_year_param = 1469 MATCH (p:Person {name: $name_param, birth_year: $birth_year_param}) RETURN p

The example above shows the syntax used by redis-cli to set parameters, but each FalkorDB client introduces a language-appropriate method for setting parameters, and is described in their documentation.

Non-Cypher queries

  • FalkorDB 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.
Frequently Asked Questions 5
What Cypher specification does FalkorDB follow?

FalkorDB is based on the OpenCypher Query Language Reference version 9, available at opencypher.org. It implements a growing subset of the specification with proprietary extensions.

Does FalkorDB support regular expressions?

No. The regex operator is not currently supported. Use the string operators STARTS WITH, ENDS WITH, and CONTAINS for pattern matching on strings.

Are user-defined functions supported?

Yes. FalkorDB supports user-defined functions through the Flex UDF library, which provides functions for text manipulation, collections, date/time, JSON, maps, bitwise operations, and similarity. See the UDFs documentation for the full list of available functions.

How do I use query parameters?

Use the CYPHER prefix: CYPHER name='Alice' MATCH (n {name: $name}) RETURN n. Each FalkorDB client library also provides its own method for passing parameters.

What data types are supported?

FalkorDB supports 64-bit doubles, 64-bit signed integers, strings, booleans, NULL, lists, maps, and temporal types (Date, DateTime, LocalDateTime, Time, LocalTime, Duration). Hexadecimal and octal numerics are not supported.