Deprecations, additions and compatibility
Cypher is a language that is constantly evolving. New features get added to the language continuously, and occasionally, some features become deprecated and are subsequently removed.
1. Removals, deprecations, additions, and extensions
The following tables list all of the features which have been removed, deprecated, added, or extended in Cypher. Replacement syntax for deprecated and removed features are also indicated.
1.1. Version 4.2
Feature | Type | Change | Details |
---|---|---|---|
|
Functionality |
Added |
Privileges can now be shown as Cypher commands |
|
Functionality |
Updated |
Can now handle multiple roles, |
|
Functionality |
Updated |
Can now handle multiple users, |
|
Functionality |
Updated |
round()-function can now take an additional argument to specify rounding precision. |
|
Functionality |
Updated |
round()-function can now take two additional arguments to specify rounding precision, and rounding mode. |
|
Syntax |
Added |
New optional part of the Cypher commands for database privileges |
|
Syntax |
Added |
Cypher will now interpret literals with prefix |
|
Syntax |
Deprecated |
Replaced by |
|
Syntax |
Deprecated |
Only |
|
Syntax |
Added |
For |
EXECUTE privileges |
Functionality |
Added |
New Cypher commands for administering privileges for executing procedures and user defined functions. |
|
Syntax |
Added |
Allows setting index provider and index configuration when creating an index. |
|
Syntax |
Added |
Allows setting index provider and index configuration for the backing index when creating a node key constraint. |
|
Syntax |
Added |
Allows setting index provider and index configuration for the backing index when creating a uniqueness constraint. |
|
Procedure |
Deprecated |
Replaced by |
|
Procedure |
Deprecated |
Replaced by |
|
Procedure |
Deprecated |
Replaced by |
|
Syntax |
Added |
New Cypher command for showing current logged-in user and roles. |
|
Functionality |
Added |
New Cypher commands for listing indexes. |
|
Functionality |
Added |
New Cypher commands for listing constraints. |
|
Procedure |
Deprecated |
Replaced by |
|
Procedure |
Deprecated |
Replaced by |
|
Procedure |
Deprecated |
Replaced by |
|
Procedure |
Deprecated |
Replaced by |
|
Functionality |
Added |
New Cypher command for administering privilege for listing indexes. |
|
Functionality |
Added |
New Cypher command for administering privilege for listing constraints. |
1.2. Version 4.1.3
Feature | Type | Change | Details |
---|---|---|---|
|
Syntax |
Added |
Makes index creation idempotent. If an index with the name or schema already exists no error will be thrown |
|
Syntax |
Added |
Makes index deletion idempotent. If no index with the name exists no error will be thrown |
|
Syntax |
Added |
Makes constraint creation idempotent. If a constraint with the name or type and schema already exists no error will be thrown |
|
Syntax |
Added |
Makes constraint deletion idempotent. If no constraint with the name exists no error will be thrown |
1.3. Version 4.1
Feature | Type | Change | Details |
---|---|---|---|
|
Procedure |
Updated |
The |
|
Functionality |
Added |
The |
|
Syntax |
Added |
The |
|
Functionality |
Restricted |
No longer revokes sub-privileges when revoking a compound privilege, e.g. when revoking |
|
Functionality |
Updated |
The returned privileges are a closer match to the original grants and denies, e.g. if granted |
|
Functionality |
Added |
New support for |
|
Functionality |
Added |
New support for |
|
Functionality |
Added |
New support for |
|
Functionality |
Restricted |
No longer includes the privileges |
TRANSACTION MANAGEMENT privileges |
Functionality |
Added |
New Cypher commands for administering transaction management |
DBMS USER MANAGEMENT privileges |
Functionality |
Added |
New Cypher commands for administering user management |
DBMS DATABASE MANAGEMENT privileges |
Functionality |
Added |
New Cypher commands for administering database management |
DBMS PRIVILEGE MANAGEMENT privileges |
Functionality |
Added |
New Cypher commands for administering privilege management |
|
Functionality |
Added |
New Cypher command for administering role, user, database and privilege management |
|
Functionality |
Added |
New Cypher command for administering read and write privileges |
Write privileges |
Functionality |
Added |
New Cypher commands for administering write privileges |
|
Syntax |
Added |
New optional part of the Cypher commands for database privileges |
1.4. Version 4.0
Feature | Type | Change | Details |
---|---|---|---|
|
Function |
Removed |
Replaced by relationships() |
|
Function |
Removed |
Replaced by toInteger() |
|
Function |
Removed |
Replaced by toLower() |
|
Function |
Removed |
Replaced by toUpper() |
|
Function |
Removed |
Replaced by list comprehension |
|
Function |
Removed |
Replaced by list comprehension |
|
Function |
Restricted |
Restricted to only work on paths. See length() for more details. |
|
Function |
Restricted |
No longer works for paths. Only works for strings, lists and pattern expressions. See size() for more details. |
|
Functionality |
Removed |
The |
|
Clause |
Removed |
Running queries with this clause will cause a syntax error. Running with |
|
Clause |
Removed |
Running queries with this clause will cause a syntax error. Running with |
Explicit indexes |
Functionality |
Removed |
The removal of the |
|
Syntax |
Deprecated |
As in Cypher 3.2, this is replaced by |
|
Syntax |
Removed |
Replaced by |
|
Syntax |
Removed |
Replaced by |
|
Syntax |
Removed |
Replaced by |
|
Syntax |
Removed |
Replaced by $parameter |
|
Functionality |
Added |
This Neo4j Enterprise Edition only feature involves a new runtime that has many performance enhancements. |
|
Functionality |
Removed |
Replaced by the new |
|
Syntax |
Added |
New syntax for creating indexes, which can include a name. |
|
Syntax |
Extended |
The create constraint syntax can now include a name. |
|
Syntax |
Added |
New command for dropping an index by name. |
|
Syntax |
Added |
New command for dropping a constraint by name, no matter the type. |
|
Syntax |
Deprecated |
Replaced by |
|
Syntax |
Deprecated |
Replaced by |
|
Syntax |
Deprecated |
Replaced by |
|
Syntax |
Deprecated |
Replaced by |
|
Syntax |
Deprecated |
Replaced by |
|
Syntax |
Deprecated |
Replaced by |
|
Clause |
Added |
Existential sub-queries are sub-clauses used to filter the results of a |
Functionality |
Added |
New Cypher commands for administering multiple databases |
|
Functionality |
Added |
New Cypher commands for administering role-based access-control |
|
Functionality |
Added |
New Cypher commands for administering dbms, database, graph and sub-graph access control |
|
|
Clause |
Added |
New clause to specify which graph a query, or query part, is executed against. |
1.5. Version 3.5
Feature | Type | Change | Details |
---|---|---|---|
|
Functionality |
Deprecated |
The compiled runtime will be discontinued in the next major release. It might still be used for default queries in order to not cause regressions, but explicitly requesting it will not be possible. |
|
Function |
Deprecated |
Replaced by list comprehension |
|
Function |
Deprecated |
Replaced by list comprehension |
1.6. Version 3.4
Feature | Type | Change | Details |
---|---|---|---|
Functionality |
Amendment |
A point — irrespective of which Coordinate Reference System is used — can be stored as a property and is able to be backed by an index. Prior to this, a point was a virtual property only. |
|
Function |
Added |
||
Function |
Added |
||
Function |
Added |
||
Functionality |
Added |
Supports storing, indexing and working with the following temporal types: Date, Time, LocalTime, DateTime, LocalDateTime and Duration. |
|
Functionality |
Added |
Functions allowing for the creation and manipulation of values for each temporal type — Date, Time, LocalTime, DateTime, LocalDateTime and Duration. |
|
Functionality |
Added |
Operators allowing for the manipulation of values for each temporal type — Date, Time, LocalTime, DateTime, LocalDateTime and Duration. |
|
Function |
Extended |
Now also allows temporal values as input (i.e. values of type Date, Time, LocalTime, DateTime, LocalDateTime or Duration). |
1.7. Version 3.3
Feature | Type | Change | Details |
---|---|---|---|
|
Clause |
Removed |
As in Cypher 3.2, any queries using the |
|
Functionality |
Added |
Neo4j Enterprise Edition only |
Function |
Extended |
Now also supports aggregation over sets containing lists of strings and/or numbers, as well as over sets containing strings, numbers, and lists of strings and/or numbers |
1.8. Version 3.2
Feature | Type | Change | Details |
---|---|---|---|
|
Functionality |
Removed |
All queries now use the cost planner. Any query prepended thus will fall back to using Cypher 3.1. |
|
Clause |
Removed |
Running such queries will fall back to using Cypher 3.1 (and use the rule planner) |
|
Clause |
Removed |
Running such queries will fall back to using Cypher 3.1 (and use the rule planner) |
|
Syntax |
Deprecated |
Replaced by |
|
Syntax |
Deprecated |
Replaced by |
|
Syntax |
Deprecated |
Replaced by |
|
Syntax |
Deprecated |
Replaced by |
Functionality |
Added |
||
Index |
Added |
||
Index |
Added |
Neo4j Enterprise Edition only |
|
|
Functionality |
Added |
Neo4j Enterprise Edition only |
Function |
Extended |
Now also allows a list as input |
|
Function |
Extended |
Now also supports aggregation over a set containing both strings and numbers |
1.9. Version 3.1
Feature | Type | Change | Details |
---|---|---|---|
|
Function |
Deprecated |
Replaced by relationships() |
|
Function |
Deprecated |
Replaced by toInteger() |
|
Function |
Deprecated |
Replaced by toLower() |
|
Function |
Deprecated |
Replaced by toUpper() |
Function |
Added |
||
Syntax |
Added |
||
Syntax |
Added |
||
Functionality |
Added |
||
Clause |
Extended |
Records returned by |
1.10. Version 3.0
Feature | Type | Change | Details |
---|---|---|---|
|
Function |
Removed |
Replaced by exists() |
|
Function |
Removed |
Replaced by toString() |
|
Syntax |
Deprecated |
Replaced by $parameter |
Function |
Added |
||
Clause |
Added |
||
Function |
Added |
||
Function |
Added |
||
Function |
Added |
||
Functionality |
Added |
||
Function |
Extended |
Now also allows Boolean values as input |
2. Compatibility
The ability of Neo4j to support multiple older versions of the Cypher language has been changing.
In versions of Neo4j before 3.5 the backwards compatibility layer included the Cypher language parser, planner and runtime.
All supported versions of Cypher would run on the same Neo4j kernel.
In Neo4j 3.4, however, this was changed such that the compatibility layer no longer included the runtime.
This meant that running, for example, a CYPHER 3.1 query inside Neo4j 3.5 would plan the query using the 3.1 planner, and run it using the 3.5 runtime and kernel.
In Neo4j 4.0 this was changed again, such that the compatibility layer includes only the parser.
For example, running a CYPHER 3.5 query inside Neo4j will parse older language features, but plan using the 4.2 planner, and run using the 4.2 runtime and kernel.
The primary reason for this change has been optimizations in the Cypher runtime to allow Cypher query to perform better.
|
Older versions of the language can still be accessed if required. There are two ways to select which version to use in queries.
-
Setting a version for all queries: You can configure your database with the configuration parameter
cypher.default_language_version
, and enter which version you’d like to use (see Supported language versions). Every Cypher query will use this version, provided the query hasn’t explicitly been configured as described in the next item below. -
Setting a version on a query by query basis: The other method is to set the version for a particular query. Prepending a query with
CYPHER 3.5
will execute the query with the version of Cypher included in Neo4j 3.5.
Below is an example using the older parameter syntax {param}
:
CYPHER 3.5
MATCH (n:Person)
WHERE n.age > {agelimit}
RETURN n.name, n.age
Without the CYPHER 3.5
prefix this query would fail with a syntax error. With CYPHER 3.5
however, it will only generate a warning and still work.
In Neo4j 4.2 some older language features are understood by the Cypher parser even if they are no longer supported by the Neo4j kernel. These features will result in runtime errors. See the table at Cypher Version 4.0 for the list of affected features. |
3. Supported language versions
Neo4j 4.2 supports the following versions of the Cypher language:
-
Neo4j Cypher 3.5
-
Neo4j Cypher 4.1
-
Neo4j Cypher 4.2
Each release of Neo4j supports a limited number of old Cypher Language Versions. When you upgrade to a new release of Neo4j, please make sure that it supports the Cypher language version you need. If not, you may need to modify your queries to work with a newer Cypher language version. |
Was this page helpful?