diff --git a/cypher/cypher-docs/src/docs/dev/deprecations-additions-and-compatibility.asciidoc b/cypher/cypher-docs/src/docs/dev/deprecations-additions-and-compatibility.asciidoc index c9850856c43..6d8198f65ee 100644 --- a/cypher/cypher-docs/src/docs/dev/deprecations-additions-and-compatibility.asciidoc +++ b/cypher/cypher-docs/src/docs/dev/deprecations-additions-and-compatibility.asciidoc @@ -12,6 +12,9 @@ Replacement syntax for deprecated and removed features are also indicated. [[cypher-deprecations-additions-removals-5.0]] == Version 5.0 + +=== Removed features + [cols="2", options="header"] |=== | Feature @@ -95,6 +98,9 @@ SHOW CONSTRAINTS YIELD * [[cypher-deprecations-additions-removals-4.4]] == Version 4.4 + +=== Deprecated features + [cols="2", options="header"] |=== | Feature @@ -137,16 +143,6 @@ CALL { } IN TRANSACTIONS ---- -a| -label:syntax[] -label:added[] -[source, cypher, role="noheader"] ----- -CREATE CONSTRAINT FOR ... REQUIRE ... ----- -a| -New syntax for creating constraints, applicable to all constraint types. - a| label:syntax[] label:deprecated[] @@ -161,230 +157,245 @@ Replaced by: CREATE CONSTRAINT FOR ... REQUIRE ... ---- - a| label:functionality[] -label:added[] +label:deprecated[] [source, cypher, role="noheader"] ---- -CREATE CONSTRAINT [constraint_name] [IF NOT EXISTS] -FOR (n:LabelName) -REQUIRE (n.propertyName_1, …, n.propertyName_n) IS UNIQUE -[OPTIONS "{" option: value[, ...] "}"] +CREATE BTREE INDEX ... ---- -a| -Unique property constraints now allow multiple properties, ensuring that the combination of property values are unique. +.2+.^a| +B-tree indexes are deprecated, partially replaced for now, and will be fully replaced in 5.0 by <>. +In 4.4, b-tree indexes are still the correct alternative to use. -a| -label:functionality[] -label:added[] -label:deprecated[] +B-tree indexes used for string queries are replaced by: [source, cypher, role="noheader"] ---- -DROP CONSTRAINT -ON (n:LabelName) -ASSERT (n.propertyName_1, …, n.propertyName_n) IS UNIQUE +CREATE TEXT INDEX ... ---- -a| -Unique property constraints now allow multiple properties. -Replaced by: +B-tree indexes used for spatial queries will be replaced by: [source, cypher, role="noheader"] ---- -DROP CONSTRAINT name [IF EXISTS] +CREATE POINT INDEX ... ---- - -a| -label:syntax[] -label:added[] +B-tree indexes used for general queries or property value types will be replaced by: [source, cypher, role="noheader"] ---- -CREATE CONSTRAINT [constraint_name] [IF NOT EXISTS] -FOR ... -REQUIRE ... IS NOT NULL -OPTIONS "{" "}" +CREATE RANGE INDEX ... ---- -a| -Existence constraints now allow an `OPTIONS` map, however, at this point there are no available values for the map. + +These new indexes may be combined for multiple use cases. a| label:functionality[] -label:added[] +label:deprecated[] [source, cypher, role="noheader"] ---- -CREATE LOOKUP INDEX [index_name] [IF NOT EXISTS] -FOR ... ON ... -OPTIONS "{" option: value[, ...] "}" +CREATE INDEX +... +OPTIONS "{" btree-option: btree-value[, ...] "}" ---- -a| -Token lookup indexes now allow an `OPTIONS` map to specify the index provider. a| label:functionality[] -label:added[] +label:deprecated[] [source, cypher, role="noheader"] ---- -CREATE TEXT INDEX ... +SHOW BTREE INDEXES ---- a| -Allows creating text indexes on nodes or relationships with a particular label or relationship type, and property combination. -They can be dropped by using their name. +B-tree indexes are deprecated, partially replaced for now, and will be fully replaced in 5.0 by <>. +In 4.4, b-tree indexes are still the correct alternative to use. + +Replaced by the new and future index types: +[source, cypher, role="noheader"] +---- +SHOW {POINT \| RANGE \| TEXT} INDEXES +---- a| label:functionality[] -label:added[] +label:deprecated[] [source, cypher, role="noheader"] ---- -CREATE RANGE INDEX ... +CREATE CONSTRAINT +... +OPTIONS "{" btree-option: btree-value[, ...] "}" ---- a| -<>: Allows creating range indexes on nodes or relationships with a particular label or relationship type, and properties combination. -They can be dropped by using their name. +Node key and uniqueness constraints with b-tree options are deprecated and will be replaced in 5.0 by range options, see <>. +In 4.4, the b-tree index-backed constraints are still the correct alternative to use. -a| -label:functionality[] -label:added[] +Will be replaced by: [source, cypher, role="noheader"] ---- CREATE CONSTRAINT ... -OPTIONS "{" indexProvider: 'range-1.0' "}" +OPTIONS "{" range-option: range-value[, ...] "}" ---- -a| -<>: Allows creating node key and uniqueness constraints backed by range indexes by providing the range index provider in the `OPTIONS` map. +Constraints used for string properties will also require an additional text index to cover the string queries properly. +Constraints used for point properties will also require an additional point index to cover the spatial queries properly, see <>. a| label:functionality[] -label:added[] +label:deprecated[] [source, cypher, role="noheader"] ---- -CREATE POINT INDEX ... +distance(n.prop, point({x:0, y:0}) ---- a| -<>: Allows creating point indexes on nodes or relationships with a particular label or relationship type, and property combination. -They can be dropped by using their name. - +Replaced by: +[source, cypher, role="noheader"] +---- +point.distance(n.prop, point({x:0, y:0}) +---- a| label:functionality[] label:deprecated[] [source, cypher, role="noheader"] ---- -CREATE BTREE INDEX ... +point({x:0, y:0}) <= point({x:1, y:1}) <= point({x:2, y:2}) ---- -.2+.^a| -B-tree indexes are deprecated, partially replaced for now, and will be fully replaced in 5.0 by <>. -In 4.4, b-tree indexes are still the correct alternative to use. - -B-tree indexes used for string queries are replaced by: +a| +Using inequality operators `<`, `<=`, `>`, and `>=` on spatial points is deprecated. +Please instead use: [source, cypher, role="noheader"] ---- -CREATE TEXT INDEX ... +point.withinBBox(point({x:1, y:1}), point({x:0, y:0}), point({x:2, y:2})) ---- +|=== -B-tree indexes used for spatial queries will be replaced by: -[source, cypher, role="noheader"] ----- -CREATE POINT INDEX ... ----- +=== New features -B-tree indexes used for general queries or property value types will be replaced by: +[cols="2", options="header"] +|=== +| Feature +| Details + +a| +label:syntax[] +label:new[] [source, cypher, role="noheader"] ---- -CREATE RANGE INDEX ... +CREATE CONSTRAINT FOR ... REQUIRE ... ---- - -These new indexes may be combined for multiple use cases. +a| +New syntax for creating constraints, applicable to all constraint types. a| label:functionality[] -label:deprecated[] +label:new[] [source, cypher, role="noheader"] ---- -CREATE INDEX -... -OPTIONS "{" btree-option: btree-value[, ...] "}" +CREATE CONSTRAINT [constraint_name] [IF NOT EXISTS] +FOR (n:LabelName) +REQUIRE (n.propertyName_1, …, n.propertyName_n) IS UNIQUE +[OPTIONS "{" option: value[, ...] "}"] ---- - +a| +Unique property constraints now allow multiple properties, ensuring that the combination of property values are unique. a| label:functionality[] +label:new[] label:deprecated[] [source, cypher, role="noheader"] ---- -SHOW BTREE INDEXES +DROP CONSTRAINT +ON (n:LabelName) +ASSERT (n.propertyName_1, …, n.propertyName_n) IS UNIQUE ---- a| -B-tree indexes are deprecated, partially replaced for now, and will be fully replaced in 5.0 by <>. -In 4.4, b-tree indexes are still the correct alternative to use. +Unique property constraints now allow multiple properties. -Replaced by the new and future index types: +Replaced by: [source, cypher, role="noheader"] ---- -SHOW {POINT \| RANGE \| TEXT} INDEXES +DROP CONSTRAINT name [IF EXISTS] ---- - a| -label:functionality[] -label:deprecated[] +label:syntax[] +label:new[] [source, cypher, role="noheader"] ---- -CREATE CONSTRAINT -... -OPTIONS "{" btree-option: btree-value[, ...] "}" +CREATE CONSTRAINT [constraint_name] [IF NOT EXISTS] +FOR ... +REQUIRE ... IS NOT NULL +OPTIONS "{" "}" ---- a| -Node key and uniqueness constraints with b-tree options are deprecated and will be replaced in 5.0 by range options, see <>. -In 4.4, the b-tree index-backed constraints are still the correct alternative to use. +Existence constraints now allow an `OPTIONS` map, however, at this point there are no available values for the map. -Will be replaced by: +a| +label:functionality[] +label:new[] [source, cypher, role="noheader"] ---- -CREATE CONSTRAINT -... -OPTIONS "{" range-option: range-value[, ...] "}" +CREATE LOOKUP INDEX [index_name] [IF NOT EXISTS] +FOR ... ON ... +OPTIONS "{" option: value[, ...] "}" ---- -Constraints used for string properties will also require an additional text index to cover the string queries properly. -Constraints used for point properties will also require an additional point index to cover the spatial queries properly, see <>. +a| +Token lookup indexes now allow an `OPTIONS` map to specify the index provider. a| label:functionality[] -label:deprecated[] +label:new[] [source, cypher, role="noheader"] ---- -distance(n.prop, point({x:0, y:0}) +CREATE TEXT INDEX ... ---- a| -Replaced by: +Allows creating text indexes on nodes or relationships with a particular label or relationship type, and property combination. +They can be dropped by using their name. + + +a| +label:functionality[] +label:new[] [source, cypher, role="noheader"] ---- -point.distance(n.prop, point({x:0, y:0}) +CREATE RANGE INDEX ... ---- +a| +<>: Allows creating range indexes on nodes or relationships with a particular label or relationship type, and properties combination. +They can be dropped by using their name. a| label:functionality[] -label:deprecated[] +label:new[] [source, cypher, role="noheader"] ---- -point({x:0, y:0}) <= point({x:1, y:1}) <= point({x:2, y:2}) +CREATE CONSTRAINT +... +OPTIONS "{" indexProvider: 'range-1.0' "}" ---- a| -Using inequality operators `<`, `<=`, `>`, and `>=` on spatial points is deprecated. -Please instead use: +<>: Allows creating node key and uniqueness constraints backed by range indexes by providing the range index provider in the `OPTIONS` map. + + +a| +label:functionality[] +label:new[] [source, cypher, role="noheader"] ---- -point.withinBBox(point({x:1, y:1}), point({x:0, y:0}), point({x:2, y:2})) +CREATE POINT INDEX ... ---- +a| +<>: Allows creating point indexes on nodes or relationships with a particular label or relationship type, and property combination. +They can be dropped by using their name. a| label:syntax[] -label:added[] + +label:new[] + New privilege: [source, cypher, role="noheader"] ---- @@ -395,7 +406,7 @@ New privilege that allows a user to assume privileges of another one. a| label:functionality[] -label:added[] +label:new[] [source, cypher, role="noheader"] ---- SHOW TRANSACTION[S] [transaction-id[,...]] @@ -410,7 +421,7 @@ The `transaction-id` is a comma-separated list of one or more quoted strings, a a| label:functionality[] -label:added[] +label:new[] [source, cypher, role="noheader"] ---- TERMINATE TRANSACTION[S] transaction-id[,...] @@ -423,7 +434,7 @@ The `transaction-id` is a comma-separated list of one or more quoted strings, a a| label:functionality[] -label:added[] +label:new[] [source, cypher, role="noheader"] ---- ALTER DATABASE ... [IF EXISTS] @@ -434,26 +445,28 @@ New Cypher command for modifying a database by changing its access mode. a| label:functionality[] -label:added[] +label:new[] + +New privilege: [source, cypher, role="noheader"] ---- ALTER DATABASE ---- a| -New Cypher command for administering privilege for modifying databases. +New privilege that allows a user to modify databases. a| label:functionality[] -label:added[] +label:new[] + +New privilege: [source, cypher, role="noheader"] ---- SET DATABASE ACCESS ---- a| -New Cypher command for administering the privilege for modifying database access mode. +New privilege that allows a user to modify database access mode. a| label:functionality[] -label:added[] +label:new[] [source, cypher, role="noheader"] ---- CREATE ALIAS ... [IF EXISTS] @@ -464,7 +477,7 @@ New Cypher command for creating an alias for a database name. a| label:functionality[] -label:added[] +label:new[] [source, cypher, role="noheader"] ---- ALTER ALIAS ... [IF NOT EXISTS] @@ -475,7 +488,7 @@ New Cypher command for altering an alias to target another database. a| label:functionality[] -label:added[] +label:new[] [source, cypher, role="noheader"] ---- DROP ALIAS ... [IF EXISTS] FOR DATABASE @@ -488,37 +501,14 @@ New Cypher command for dropping a database alias. [[cypher-deprecations-additions-removals-4.3]] == Version 4.3 + +=== Deprecated features + [cols="2", options="header"] |=== | Feature | Details -a| -label:syntax[] -label:added[] -[source, cypher, role="noheader"] ----- -CREATE CONSTRAINT [name] -ON (node:Label) -ASSERT node.property IS NOT NULL ----- -a| -New syntax for creating node property existence constraints. - - -a| -label:syntax[] -label:added[] -[source, cypher, role="noheader"] ----- -CREATE CONSTRAINT [name] -ON ()-[rel:REL]-() -ASSERT rel.property IS NOT NULL ----- -a| -New syntax for creating relationship property existence constraints. - - a| label:syntax[] label:deprecated[] @@ -532,8 +522,8 @@ a| Replaced by: [source, cypher, role="noheader"] ---- CREATE CONSTRAINT [name] -FOR (node:Label) -REQUIRE node.property IS NOT NULL +ON (node:Label) +ASSERT node.property IS NOT NULL ---- @@ -551,8 +541,8 @@ Replaced by: [source, cypher, role="noheader"] ---- CREATE CONSTRAINT [name] -FOR ()-[rel:REL]-() -REQUIRE rel.property IS NOT NULL +ON ()-[rel:REL]-() +ASSERT rel.property IS NOT NULL ---- @@ -585,18 +575,110 @@ Replaced by: prop IS NULL ---- - a| label:syntax[] -label:added[] -[source, cypher, role="noheader"] ----- -ALTER USER name IF EXISTS ... ----- +label:deprecated[] + +`BRIEF [OUTPUT]` for `SHOW INDEXES` and `SHOW CONSTRAINTS`. a| -Makes altering users idempotent. -If the specified name does not exists, no error is thrown. +Replaced by default output columns. + + +a| +label:syntax[] +label:deprecated[] + +`VERBOSE [OUTPUT]` for `SHOW INDEXES` and `SHOW CONSTRAINTS`. +a| +Replaced by: +[source, cypher, role="noheader"] +---- +YIELD * +---- + +a| +label:syntax[] +label:deprecated[] +[source, cypher, role="noheader"] +---- +SHOW EXISTS CONSTRAINTS +---- +a| +Replaced by: +[source, cypher, role="noheader"] +---- +SHOW [PROPERTY] EXIST[ENCE] CONSTRAINTS +---- +Still allows `BRIEF` and `VERBOSE` but not `YIELD` or `WHERE`. + + +a| +label:syntax[] +label:deprecated[] +[source, cypher, role="noheader"] +---- +SHOW NODE EXISTS CONSTRAINTS +---- +a| +Replaced by: +[source, cypher, role="noheader"] +---- +SHOW NODE [PROPERTY] EXIST[ENCE] CONSTRAINTS +---- +Still allows `BRIEF` and `VERBOSE` but not `YIELD` or `WHERE`. + + +a| +label:syntax[] +label:deprecated[] +[source, cypher, role="noheader"] +---- +SHOW RELATIONSHIP EXISTS CONSTRAINTS +---- +a| +Replaced by: +[source, cypher, role="noheader"] +---- +SHOW RELATIONSHIP [PROPERTY] EXIST[ENCE] CONSTRAINTS +---- +Still allows `BRIEF` and `VERBOSE` but not `YIELD` or `WHERE`. + +a| +label:syntax[] +label:deprecated[] + +For privilege commands: +[source, cypher, role="noheader"] +---- +ON DEFAULT DATABASE +---- +a| +Replaced by: +[source, cypher, role="noheader"] +---- +ON HOME DATABASE +---- + + +a| +label:syntax[] +label:deprecated[] + +For privilege commands: +[source, cypher, role="noheader"] +---- +ON DEFAULT GRAPH +---- +a| +Replaced by: +[source, cypher, role="noheader"] +---- +ON HOME GRAPH +---- +|=== + +=== Updated features +[cols="2", options="header"] +|=== +| Feature +| Details a| label:functionality[] @@ -654,26 +736,6 @@ a| Now allows `YIELD`, `WHERE`, and `RETURN` clauses to `SHOW CONSTRAINTS` to change the output. -a| -label:syntax[] -label:deprecated[] + -`BRIEF [OUTPUT]` for `SHOW INDEXES` and `SHOW CONSTRAINTS`. -a| -Replaced by default output columns. - - -a| -label:syntax[] -label:deprecated[] + -`VERBOSE [OUTPUT]` for `SHOW INDEXES` and `SHOW CONSTRAINTS`. -a| -Replaced by: -[source, cypher, role="noheader"] ----- -YIELD * ----- - - a| label:syntax[] label:updated[] @@ -711,56 +773,90 @@ Allows `YIELD` and `WHERE` but not `BRIEF` or `VERBOSE`. a| -label:syntax[] -label:deprecated[] +label:functionality[] +label:updated[] [source, cypher, role="noheader"] ---- -SHOW EXISTS CONSTRAINTS +SHOW FULLTEXT INDEXES ---- a| -Replaced by: +Now allows easy filtering for `SHOW INDEXES` on fulltext indexes. + +Allows `YIELD` and `WHERE` but not `BRIEF` or `VERBOSE`. + + +a| +label:functionality[] +label:updated[] [source, cypher, role="noheader"] ---- -SHOW [PROPERTY] EXIST[ENCE] CONSTRAINTS +SHOW LOOKUP INDEXES ---- -Still allows `BRIEF` and `VERBOSE` but not `YIELD` or `WHERE`. +a| +Now allows easy filtering for `SHOW INDEXES` on token lookup indexes. + +Allows `YIELD` and `WHERE` but not `BRIEF` or `VERBOSE`. +|=== + +=== New features +[cols="2", options="header"] +|=== +| Feature +| Details a| label:syntax[] -label:deprecated[] +label:new[] [source, cypher, role="noheader"] ---- -SHOW NODE EXISTS CONSTRAINTS +CREATE DATABASE ... +[OPTIONS {...}] ---- a| -Replaced by: +New syntax to pass options to `CREATE DATABASE`. +This can be used to specify a specific cluster node to seed data from. + + +a| +label:syntax[] +label:new[] [source, cypher, role="noheader"] ---- -SHOW NODE [PROPERTY] EXIST[ENCE] CONSTRAINTS +CREATE CONSTRAINT [name] +ON (node:Label) +ASSERT node.property IS NOT NULL ---- -Still allows `BRIEF` and `VERBOSE` but not `YIELD` or `WHERE`. +a| +New syntax for creating node property existence constraints. a| label:syntax[] -label:deprecated[] +label:new[] [source, cypher, role="noheader"] ---- -SHOW RELATIONSHIP EXISTS CONSTRAINTS +CREATE CONSTRAINT [name] +ON ()-[rel:REL]-() +ASSERT rel.property IS NOT NULL ---- a| -Replaced by: +New syntax for creating relationship property existence constraints. + + +a| +label:syntax[] +label:new[] [source, cypher, role="noheader"] ---- -SHOW RELATIONSHIP [PROPERTY] EXIST[ENCE] CONSTRAINTS +ALTER USER name IF EXISTS ... ---- -Still allows `BRIEF` and `VERBOSE` but not `YIELD` or `WHERE`. +a| +Makes altering users idempotent. +If the specified name does not exists, no error is thrown. a| label:syntax[] -label:added[] +label:new[] [source, cypher, role="noheader"] ---- ALTER USER ... @@ -772,7 +868,7 @@ Now allows setting home database for user. a| label:syntax[] -label:added[] +label:new[] [source, cypher, role="noheader"] ---- ALTER USER ... @@ -784,7 +880,7 @@ Now allows removing home database for user. a| label:syntax[] -label:added[] +label:new[] [source, cypher, role="noheader"] ---- CREATE USER ... @@ -796,7 +892,7 @@ a| a| label:syntax[] -label:added[] +label:new[] [source, cypher, role="noheader"] ---- SHOW HOME DATABASE @@ -807,7 +903,7 @@ New syntax for showing the home database of the current user. a| label:syntax[] -label:added[] + +label:new[] + New privilege: [source, cypher, role="noheader"] ---- @@ -819,7 +915,7 @@ New Cypher command for administering privilege for changing users home database. a| label:syntax[] -label:added[] + +label:new[] + For privilege commands: [source, cypher, role="noheader"] ---- @@ -831,7 +927,7 @@ New syntax for privileges affecting home database. a| label:syntax[] -label:added[] + +label:new[] + For privilege commands: [source, cypher, role="noheader"] ---- @@ -840,42 +936,20 @@ ON HOME GRAPH a| New syntax for privileges affecting home graph. - -a| -label:syntax[] -label:deprecated[] + -For privilege commands: -[source, cypher, role="noheader"] ----- -ON DEFAULT DATABASE ----- -a| -Replaced by: -[source, cypher, role="noheader"] ----- -ON HOME DATABASE ----- - - a| label:syntax[] -label:deprecated[] + -For privilege commands: +label:new[] [source, cypher, role="noheader"] ---- -ON DEFAULT GRAPH +CREATE FULLTEXT INDEX ... ---- a| -Replaced by: -[source, cypher, role="noheader"] ----- -ON HOME GRAPH ----- - +Allows creating fulltext indexes on nodes or relationships. +They can be dropped by using their name. a| label:functionality[] -label:added[] +label:new[] [source, cypher, role="noheader"] ---- CREATE INDEX FOR ()-[r:TYPE]-() ... @@ -887,7 +961,7 @@ They can be dropped by using their name. a| label:functionality[] -label:added[] +label:new[] [source, cypher, role="noheader"] ---- CREATE LOOKUP INDEX ... @@ -896,47 +970,9 @@ a| Create token lookup index for nodes with any labels or relationships with any relationship type. They can be dropped by using their name. - -a| -label:functionality[] -label:updated[] -[source, cypher, role="noheader"] ----- -SHOW FULLTEXT INDEXES ----- -a| -Now allows easy filtering for `SHOW INDEXES` on fulltext indexes. + -Allows `YIELD` and `WHERE` but not `BRIEF` or `VERBOSE`. - - -a| -label:functionality[] -label:updated[] -[source, cypher, role="noheader"] ----- -SHOW LOOKUP INDEXES ----- -a| -Now allows easy filtering for `SHOW INDEXES` on token lookup indexes. + -Allows `YIELD` and `WHERE` but not `BRIEF` or `VERBOSE`. - - -a| -label:syntax[] -label:added[] -[source, cypher, role="noheader"] ----- -CREATE DATABASE ... -[OPTIONS {...}] ----- -a| -New syntax to pass options to `CREATE DATABASE`. -This can be used to specify a specific cluster node to seed data from. - - a| label:functionality[] -label:added[] +label:new[] [source, cypher, role="noheader"] ---- RENAME ROLE @@ -947,7 +983,7 @@ New Cypher command for changing the name of a role. a| label:functionality[] -label:added[] +label:new[] [source, cypher, role="noheader"] ---- RENAME USER @@ -958,7 +994,7 @@ New Cypher command for changing the name of a user. a| label:functionality[] -label:added[] +label:new[] [source, cypher, role="noheader"] ---- SHOW PROCEDURE[S] @@ -973,7 +1009,7 @@ New Cypher commands for listing procedures. a| label:functionality[] -label:added[] +label:new[] [source, cypher, role="noheader"] ---- SHOW [ALL \| BUILT IN \| USER DEFINED] FUNCTION[S] @@ -985,39 +1021,150 @@ SHOW [ALL \| BUILT IN \| USER DEFINED] FUNCTION[S] a| New Cypher commands for listing functions. - -a| -label:syntax[] -label:added[] -[source, cypher, role="noheader"] ----- -CREATE FULLTEXT INDEX ... ----- -a| -Allows creating fulltext indexes on nodes or relationships. -They can be dropped by using their name. |=== - [[cypher-deprecations-additions-removals-4.2]] == Version 4.2 +=== Deprecated features + [cols="2", options="header"] |=== | Feature | Details a| -label:functionality[] -label:added[] +label:syntax[] +label:deprecated[] [source, cypher, role="noheader"] ---- -SHOW PRIVILEGES [AS [REVOKE] COMMAND[S]] +0... ---- a| -Privileges can now be shown as Cypher commands. +Replaced by `+0o...+`. + + +a| +label:syntax[] +label:deprecated[] +[source, cypher, role="noheader"] +---- +0X... +---- +a| +Only `+0x...+` (lowercase x) is supported. + +a| +label:procedure[] +label:deprecated[] +[source, role="noheader"] +---- +db.createIndex +---- +a| +Replaced by `CREATE INDEX` command. + + +a| +label:procedure[] +label:deprecated[] +[source, role="noheader"] +---- +db.createNodeKey +---- +a| +Replaced by: +[source, cypher, role="noheader"] +---- +CREATE CONSTRAINT ... IS NODE KEY +---- + + +a| +label:procedure[] +label:deprecated[] +[source, role="noheader"] +---- +db.createUniquePropertyConstraint +---- +a| +Replaced by: +[source, cypher, role="noheader"] +---- +CREATE CONSTRAINT ... IS UNIQUE +---- + +a| +label:procedure[] +label:deprecated[] +[source, role="noheader"] +---- +db.indexes +---- +a| +Replaced by: +[source, cypher, role="noheader"] +---- +SHOW INDEXES +---- + + +a| +label:procedure[] +label:deprecated[] +[source, role="noheader"] +---- +db.indexDetails +---- +a| +Replaced by: +[source, cypher, role="noheader"] +---- +SHOW INDEXES YIELD * +---- + + +a| +label:procedure[] +label:deprecated[] +[source, role="noheader"] +---- +db.constraints +---- +a| +Replaced by: +[source, cypher, role="noheader"] +---- +SHOW CONSTRAINTS +---- +a| +label:procedure[] +label:deprecated[] +[source, role="noheader"] +---- +db.schemaStatements +---- +a| +Replaced by: +[source, cypher, role="noheader"] +---- +SHOW INDEXES YIELD * +---- +[source, cypher, role="noheader"] +---- +SHOW CONSTRAINTS YIELD * +---- +|=== + +=== Updated features + +[cols="2", options="header"] +|=== +| Feature +| Details + a| label:functionality[] label:updated[] @@ -1068,55 +1215,49 @@ round(expression, precision, mode) ---- a| The `round()` function can now take two additional arguments to specify rounding precision and rounding mode. +|=== +=== New features -a| -label:syntax[] -label:added[] -[source, cypher, role="noheader"] ----- -DEFAULT GRAPH ----- -a| -New optional part of the Cypher commands for <>. - +[cols="2", options="header"] +|=== +| Feature +| Details a| -label:syntax[] -label:added[] +label:functionality[] +label:new[] [source, cypher, role="noheader"] ---- -0o... +SHOW PRIVILEGES [AS [REVOKE] COMMAND[S]] ---- a| -Cypher now interprets literals with prefix `0o` as an octal integer literal. - +Privileges can now be shown as Cypher commands. a| label:syntax[] -label:deprecated[] +label:new[] [source, cypher, role="noheader"] ---- -0... +DEFAULT GRAPH ---- a| -Replaced by `+0o...+` (see above). +New optional part of the Cypher commands for <>. a| label:syntax[] -label:deprecated[] +label:new[] [source, cypher, role="noheader"] ---- -0X... +0o... ---- a| -Only `+0x...+` (lowercase x) is supported. - +Cypher now interprets literals with prefix `0o` as an octal integer literal. a| label:syntax[] -label:added[] +label:new[] [source, cypher, role="noheader"] ---- SET [PLAINTEXT \| ENCRYPTED] PASSWORD @@ -1127,7 +1268,7 @@ For `CREATE USER` and `ALTER USER`, it is now possible to set (or update) a pass a| label:functionality[] -label:added[] + +label:new[] + New privilege: [source, cypher, role="noheader"] ---- @@ -1140,7 +1281,7 @@ See <>. a| label:syntax[] -label:added[] +label:new[] [source, cypher, role="noheader"] ---- CREATE [BTREE] INDEX ... [OPTIONS {...}] @@ -1151,7 +1292,7 @@ Allows setting index provider and index configuration when creating an index. a| label:syntax[] -label:added[] +label:new[] [source, cypher, role="noheader"] ---- CREATE CONSTRAINT ... IS NODE KEY [OPTIONS {...}] @@ -1162,7 +1303,7 @@ Allows setting index provider and index configuration for the backing index when a| label:syntax[] -label:added[] +label:new[] [source, cypher, role="noheader"] ---- CREATE CONSTRAINT ... IS UNIQUE [OPTIONS {...}] @@ -1170,255 +1311,729 @@ CREATE CONSTRAINT ... IS UNIQUE [OPTIONS {...}] a| Allows setting index provider and index configuration for the backing index when creating a uniqueness constraint. - a| -label:procedure[] -label:deprecated[] +label:syntax[] +label:new[] [source, cypher, role="noheader"] ---- -db.createIndex +SHOW CURRENT USER ---- a| -Replaced by `CREATE INDEX` command. +New Cypher command for showing current logged-in user and roles. a| -label:procedure[] -label:deprecated[] +label:functionality[] +label:new[] [source, cypher, role="noheader"] ---- -db.createNodeKey +SHOW [ALL \| BTREE] INDEX[ES] [BRIEF \| VERBOSE [OUTPUT]] ---- a| -Replaced by: -[source, cypher, role="noheader"] ----- -CREATE CONSTRAINT ... IS NODE KEY ----- +New Cypher commands for listing indexes. a| -label:procedure[] -label:deprecated[] +label:functionality[] +label:new[] [source, cypher, role="noheader"] ---- -db.createUniquePropertyConstraint +SHOW [ALL \| UNIQUE \| NODE EXIST[S] \| RELATIONSHIP EXIST[S] \| EXIST[S] \| NODE KEY] CONSTRAINT[S] [BRIEF \| VERBOSE [OUTPUT]] ---- a| -Replaced by: -[source, cypher, role="noheader"] ----- -CREATE CONSTRAINT ... IS UNIQUE ----- - +New Cypher commands for listing constraints. a| -label:syntax[] -label:added[] +label:functionality[] +label:new[] + +New privilege: [source, cypher, role="noheader"] ---- -SHOW CURRENT USER +SHOW INDEX ---- a| -New Cypher command for showing current logged-in user and roles. +New Cypher command for administering privilege for listing indexes. a| label:functionality[] -label:added[] +label:new[] + +New privilege: [source, cypher, role="noheader"] ---- -SHOW [ALL \| BTREE] INDEX[ES] [BRIEF \| VERBOSE [OUTPUT]] +SHOW CONSTRAINT ---- a| -New Cypher commands for listing indexes. +New Cypher command for administering privilege for listing constraints. +|=== + +[[cypher-deprecations-additions-removals-4.1.3]] +== Version 4.1.3 +=== New features + +[cols="2", options="header"] +|=== +| Feature +| Details + a| -label:functionality[] -label:added[] +label:syntax[] +label:new[] [source, cypher, role="noheader"] ---- -SHOW [ALL \| UNIQUE \| NODE EXIST[S] \| RELATIONSHIP EXIST[S] \| EXIST[S] \| NODE KEY] CONSTRAINT[S] [BRIEF \| VERBOSE [OUTPUT]] +CREATE INDEX [name] IF NOT EXISTS FOR ... ---- a| -New Cypher commands for listing constraints. - +Makes index creation idempotent. If an index with the name or schema already exists no error will be thrown. a| -label:procedure[] -label:deprecated[] +label:syntax[] +label:new[] [source, cypher, role="noheader"] ---- -db.indexes +DROP INDEX name IF EXISTS ---- a| -Replaced by: -[source, cypher, role="noheader"] ----- -SHOW INDEXES ----- - +Makes index deletion idempotent. If no index with the name exists no error will be thrown. a| -label:procedure[] -label:deprecated[] +label:syntax[] +label:new[] [source, cypher, role="noheader"] ---- -db.indexDetails +CREATE CONSTRAINT [name] IF NOT EXISTS ON ... ---- a| -Replaced by: +Makes constraint creation idempotent. If a constraint with the name or type and schema already exists no error will be thrown. + +a| +label:syntax[] +label:new[] [source, cypher, role="noheader"] ---- -SHOW INDEXES YIELD * +DROP CONSTRAINT name IF EXISTS ---- +a| +Makes constraint deletion idempotent. If no constraint with the name exists no error will be thrown. + +|=== + +[[cypher-deprecations-additions-removals-4.1]] +== Version 4.1 +=== Restricted features + +[cols="2", options="header"] +|=== +| Feature +| Details a| -label:procedure[] -label:deprecated[] +label:functionality[] +label:restricted[] [source, cypher, role="noheader"] ---- -db.constraints +REVOKE ... ---- a| -Replaced by: +No longer revokes sub-privileges when revoking a compound privilege, e.g. when revoking `INDEX MANAGEMENT`, any `CREATE INDEX` and `DROP INDEX` privileges will no longer be revoked. + +a| +label:functionality[] +label:restricted[] [source, cypher, role="noheader"] ---- -SHOW CONSTRAINTS +ALL DATABASE PRIVILEGES ---- +a| +No longer includes the privileges `START DATABASE` and `STOP DATABASE`. +|=== +=== Updated features + +[cols="2", options="header"] +|=== +| Feature +| Details a| label:procedure[] -label:deprecated[] +label:updated[] [source, cypher, role="noheader"] ---- -db.schemaStatements +queryId ---- a| -Replaced by: +The `queryId` procedure format has changed, and no longer includes the database name. For example, `mydb-query-123` is now `query-123`. This change affects built-in procedures `dbms.listQueries()`, `dbms.listActiveLocks(queryId)`, `dbms.killQueries(queryIds)` `and dbms.killQuery(queryId)`. + +a| +label:functionality[] +label:updated[] [source, cypher, role="noheader"] ---- -SHOW INDEXES YIELD * +SHOW PRIVILEGES ---- +a| +The returned privileges are a closer match to the original grants and denies, e.g. if granted `MATCH` the command will show that specific privilege and not the `TRAVERSE` and `READ` privileges. Added support for `YIELD` and `WHERE` clauses to allow filtering results. +|=== + +=== New features + +[cols="2", options="header"] +|=== +| Feature +| Details + +a| +label:functionality[] +label:new[] + +New role: [source, cypher, role="noheader"] ---- -SHOW CONSTRAINTS YIELD * +PUBLIC ---- +a| +The `PUBLIC` role is automatically assigned to all users, giving them a set of base privileges. +a| +label:syntax[] +label:new[] + +For privileges: +[source, cypher, role="noheader"] +---- +REVOKE MATCH +---- +a| +The `MATCH` privilege can now be revoked. a| label:functionality[] -label:added[] + -New privilege: +label:new[] [source, cypher, role="noheader"] ---- -SHOW INDEX +SHOW USERS ---- a| -New Cypher command for administering privilege for listing indexes. +New support for `YIELD` and `WHERE` clauses to allow filtering results. +a| +label:functionality[] +label:new[] +[source, cypher, role="noheader"] +---- +SHOW ROLES +---- +a| +New support for `YIELD` and `WHERE` clauses to allow filtering results. a| label:functionality[] -label:added[] + -New privilege: +label:new[] [source, cypher, role="noheader"] ---- -SHOW CONSTRAINT +SHOW DATABASES ---- a| -New Cypher command for administering privilege for listing constraints. +New support for `YIELD` and `WHERE` clauses to allow filtering results. + +a| +label:functionality[] +label:new[] + +<> privileges +a| +New Cypher commands for administering transaction management. + +a| +label:functionality[] +label:new[] + +DBMS <> privileges +a| +New Cypher commands for administering user management. + +a| +label:functionality[] +label:new[] + +DBMS <> privileges +a| +New Cypher commands for administering database management. + + +a| +label:functionality[] +label:new[] + +DBMS <> privileges +a| +New Cypher commands for administering privilege management. + +a| +label:functionality[] +label:new[] +[source, cypher, role="noheader"] +---- +ALL DBMS PRIVILEGES +---- +a| +New Cypher command for administering role, user, database and privilege management. + + +a| +label:functionality[] +label:new[] +[source, cypher, role="noheader"] +---- +ALL GRAPH PRIVILEGES +---- +a| +New Cypher command for administering read and write privileges. + +a| +label:functionality[] +label:new[] + +Write privileges +a| +New Cypher commands for administering write privileges. + +a| +label:functionality[] +label:new[] +[source, cypher, role="noheader"] +---- +ON DEFAULT DATABASE +---- +a| +New optional part of the Cypher commands for <>. |=== +[[cypher-deprecations-additions-removals-4.0]] +== Version 4.0 -[[cypher-deprecations-additions-removals-4.1.3]] -== Version 4.1.3 -[options="header"] +=== Removed features + +[cols="2", options="header"] |=== -| Feature | Type | Change | Details -| `CREATE INDEX [name] IF NOT EXISTS FOR ...` | Syntax | Added | Makes index creation idempotent. If an index with the name or schema already exists no error will be thrown -| `DROP INDEX name IF EXISTS` | Syntax | Added | Makes index deletion idempotent. If no index with the name exists no error will be thrown -| `CREATE CONSTRAINT [name] IF NOT EXISTS ON ...` | Syntax | Added | Makes constraint creation idempotent. If a constraint with the name or type and schema already exists no error will be thrown -| `DROP CONSTRAINT name IF EXISTS` | Syntax | Added | Makes constraint deletion idempotent. If no constraint with the name exists no error will be thrown +| Feature +| Details + +a| +label:function[] +label:removed[] +[source, cypher, role="noheader"] +---- +rels() +---- +a| +Replaced by <>. + +a| +label:function[] +label:removed[] +[source, cypher, role="noheader"] +---- +toInt() +---- +a| +Replaced by <>. + +a| +label:function[] +label:removed[] +[source, cypher, role="noheader"] +---- +lower() +---- +a| +Replaced by <>. + +a| +label:function[] +label:removed[] +[source, cypher, role="noheader"] +---- +upper() +---- +a| +Replaced by <>. + +a| +label:function[] +label:removed[] +[source, cypher, role="noheader"] +---- +extract() +---- +a| +Replaced by <>. + +a| +label:function[] +label:removed[] +[source, cypher, role="noheader"] +---- +filter() +---- +a| +Replaced by <>. + +a| +label:functionality[] +label:removed[] + +For Rule planner: +[source, cypher, role="noheader"] +---- +CYPHER planner=rule +---- +a| +The `RULE` planner was removed in 3.2, but still possible to trigger using `START` or `CREATE UNIQUE` clauses. Now it is completely removed. + + +a| +label:functionality[] +label:removed[] + +Explicit indexes +a| +The removal of the `RULE` planner in 3.2 was the beginning of the end for explicit indexes. Now they are completely removed, including the removal of the link:https://neo4j.com/docs/cypher-manual/3.5/schema/index/#explicit-indexes-procedures[built-in procedures for Neo4j 3.3 to 3.5]. + + +a| +label:functionality[] +label:removed[] + +For compiled runtime: +[source, cypher, role="noheader"] +---- +CYPHER runtime=compiled +---- +a| +Replaced by the new `pipelined` runtime which covers a much wider range of queries. + + +a| +label:clause[] +label:removed[] +[source, cypher, role="noheader"] +---- +CREATE UNIQUE +---- +a| +Running queries with this clause will cause a syntax error. Running with `CYPHER 3.5` will cause a runtime error due to the removal of the rule planner. + +a| +label:clause[] +label:removed[] +[source, cypher, role="noheader"] +---- +START +---- +a| +Running queries with this clause will cause a syntax error. Running with `CYPHER 3.5` will cause a runtime error due to the removal of the rule planner. + +a| +label:syntax[] +label:removed[] +[source, cypher, role="noheader"] +---- +MATCH (n)-[:A\|:B\|:C {foo: 'bar'}]-() RETURN n +---- +a| +Replaced by `MATCH (n)-[:A\|B\|C {foo: 'bar'}]-() RETURN n`. + +a| +label:syntax[] +label:removed[] +[source, cypher, role="noheader"] +---- +MATCH (n)-[x:A\|:B\|:C]-() RETURN n +---- +a| +Replaced by `MATCH (n)-[x:A\|B\|C]-() RETURN n`. + + +a| +label:syntax[] +label:removed[] +[source, cypher, role="noheader"] +---- +MATCH (n)-[x:A\|:B\|:C*]-() RETURN n +---- +a| +Replaced by `MATCH (n)-[x:A\|B\|C*]-() RETURN n`. + + +a| +label:syntax[] +label:removed[] +[source, cypher, role="noheader"] +---- +{parameter} +---- +a| +Replaced by <>. |=== -[[cypher-deprecations-additions-removals-4.1]] -== Version 4.1 -[options="header"] +=== Deprecated features + +[cols="2", options="header"] |=== -| Feature | Type | Change | Details -| `queryId` | Procedure | Updated | The `queryId` procedure format has changed, and no longer includes the database name. For example, `mydb-query-123` is now `query-123`. This change affects built-in procedures `dbms.listQueries()`, `dbms.listActiveLocks(queryId)`, `dbms.killQueries(queryIds)` `and dbms.killQuery(queryId)` -| `PUBLIC` role | Functionality | Added | The `PUBLIC` role is automatically assigned to all users, giving them a set of base privileges -| `REVOKE MATCH` | Syntax | Added | The `MATCH` privilege can now be revoked -| `REVOKE ...` | Functionality | Restricted | No longer revokes sub-privileges when revoking a compound privilege, e.g. when revoking `INDEX MANAGEMENT`, any `CREATE INDEX` and `DROP INDEX` privileges will no longer be revoked -| `SHOW PRIVILEGES` | Functionality | Updated | The returned privileges are a closer match to the original grants and denies, e.g. if granted `MATCH` the command will show that specific privilege and not the `TRAVERSE` and `READ` privileges. Added support for `YIELD` and `WHERE` clauses to allow filtering results. -| `SHOW USERS` | Functionality | Added | New support for `YIELD` and `WHERE` clauses to allow filtering results. -| `SHOW ROLES` | Functionality | Added | New support for `YIELD` and `WHERE` clauses to allow filtering results. -| `SHOW DATABASES` | Functionality | Added | New support for `YIELD` and `WHERE` clauses to allow filtering results. -| `ALL DATABASE PRIVILEGES` | Functionality | Restricted | No longer includes the privileges `START DATABASE` and `STOP DATABASE` -| <> privileges | Functionality | Added | New Cypher commands for administering transaction management -| DBMS <> privileges | Functionality | Added | New Cypher commands for administering user management -| DBMS <> privileges | Functionality | Added | New Cypher commands for administering database management -| DBMS <> privileges | Functionality | Added | New Cypher commands for administering privilege management -| `ALL DBMS PRIVILEGES` | Functionality | Added | New Cypher command for administering role, user, database and privilege management -| `ALL GRAPH PRIVILEGES` | Functionality | Added | New Cypher command for administering read and write privileges -| Write privileges | Functionality | Added | New Cypher commands for administering write privileges -| `ON DEFAULT DATABASE` | Syntax | Added | New optional part of the Cypher commands for <> +| Feature +| Details + +a| +label:syntax[] +label:deprecated[] +[source, cypher, role="noheader"] +---- +MATCH (n)-[rs*]-() RETURN rs +---- +a| +As in Cypher 3.2, this is replaced by: +[source, cypher, role="noheader"] +---- +MATCH p=(n)-[*]-() RETURN relationships(p) AS rs +---- + +a| +label:syntax[] +label:deprecated[] +[source, cypher, role="noheader"] +---- +CREATE INDEX ON :Label(prop) +---- +a| +Replaced by `CREATE INDEX FOR (n:Label) ON (n.prop)`. + +a| +label:syntax[] +label:deprecated[] +[source, cypher, role="noheader"] +---- +DROP INDEX ON :Label(prop) +---- +a| +Replaced by `DROP INDEX name`. + +a| +label:syntax[] +label:deprecated[] +[source, cypher, role="noheader"] +---- +DROP CONSTRAINT ON (n:Label) ASSERT (n.prop) IS NODE KEY +---- +a| +Replaced by `DROP CONSTRAINT name`. + +a| +label:syntax[] +label:deprecated[] +[source, cypher, role="noheader"] +---- +DROP CONSTRAINT ON (n:Label) ASSERT (n.prop) IS UNIQUE +---- +a| +Replaced by `DROP CONSTRAINT name`. + +a| +label:syntax[] +label:deprecated[] +[source, cypher, role="noheader"] +---- +DROP CONSTRAINT ON (n:Label) ASSERT exists(n.prop) +---- +a| +Replaced by `DROP CONSTRAINT name`. + +a| +label:syntax[] +label:deprecated[] +[source, cypher, role="noheader"] +---- +DROP CONSTRAINT ON ()-[r:Type]-() ASSERT exists(r.prop) +---- +a| +Replaced by `DROP CONSTRAINT name`. + |=== -[[cypher-deprecations-additions-removals-4.0]] -== Version 4.0 -[options="header"] +=== Restricted features + +[cols="2", options="header"] |=== -| Feature | Type | Change | Details -| `rels()` | Function | Removed | Replaced by <> -| `toInt()` | Function | Removed | Replaced by <> -| `lower()` | Function | Removed | Replaced by <> -| `upper()` | Function | Removed | Replaced by <> -| `extract()` | Function | Removed | Replaced by <> -| `filter()` | Function | Removed | Replaced by <> -| `length()` | Function | Restricted | Restricted to only work on paths. See <> for more details. -| `size()` | Function | Restricted | No longer works for paths. Only works for strings, lists and pattern expressions. See <> for more details. -| `CYPHER planner=rule` (Rule planner) | Functionality | Removed | The `RULE` planner was removed in 3.2, but still possible to trigger using `START` or `CREATE UNIQUE` clauses. Now it is completely removed. -| `CREATE UNIQUE` | Clause | Removed | Running queries with this clause will cause a syntax error. Running with `CYPHER 3.5` will cause a runtime error due to the removal of the rule planner. -| `START` | Clause | Removed | Running queries with this clause will cause a syntax error. Running with `CYPHER 3.5` will cause a runtime error due to the removal of the rule planner. -| Explicit indexes | Functionality | Removed | The removal of the `RULE` planner in 3.2 was the beginning of the end for explicit indexes. Now they are completely removed, including the removal of the link:https://neo4j.com/docs/cypher-manual/3.5/schema/index/#explicit-indexes-procedures[built-in procedures for Neo4j 3.3 to 3.5]. -| `MATCH (n)-[rs*]-() RETURN rs` | Syntax | Deprecated | As in Cypher 3.2, this is replaced by `MATCH p=(n)-[*]-() RETURN relationships(p) AS rs` -| `MATCH (n)-[:A\|:B\|:C {foo: 'bar'}]-() RETURN n` | Syntax | Removed | Replaced by `MATCH (n)-[:A\|B\|C {foo: 'bar'}]-() RETURN n` -| `MATCH (n)-[x:A\|:B\|:C]-() RETURN n` | Syntax | Removed | Replaced by `MATCH (n)-[x:A\|B\|C]-() RETURN n` -| `MATCH (n)-[x:A\|:B\|:C*]-() RETURN n` | Syntax | Removed | Replaced by `MATCH (n)-[x:A\|B\|C*]-() RETURN n` -| `+{parameter}+` | Syntax | Removed | Replaced by <> -| `CYPHER runtime=pipelined` (Pipelined runtime) | Functionality | Added| This Neo4j Enterprise Edition only feature involves a new runtime that has many performance enhancements. -| `CYPHER runtime=compiled` (Compiled runtime) | Functionality | Removed| Replaced by the new `pipelined` runtime which covers a much wider range of queries. -| `CREATE INDEX [name] FOR (n:Label) ON (n.prop)` | Syntax | Added | New syntax for creating indexes, which can include a name. -| `CREATE CONSTRAINT [name] ON ...` | Syntax | Extended | The create constraint syntax can now include a name. -| `DROP INDEX name` | Syntax | Added | <> for dropping an index by name. -| `DROP CONSTRAINT name` | Syntax | Added | <> for dropping a constraint by name, no matter the type. -| `CREATE INDEX ON :Label(prop)` | Syntax | Deprecated | Replaced by `CREATE INDEX FOR (n:Label) ON (n.prop)` -| `DROP INDEX ON :Label(prop)` | Syntax | Deprecated | Replaced by `DROP INDEX name` -| `DROP CONSTRAINT ON (n:Label) ASSERT (n.prop) IS NODE KEY` | Syntax | Deprecated | Replaced by `DROP CONSTRAINT name` -| `DROP CONSTRAINT ON (n:Label) ASSERT (n.prop) IS UNIQUE` | Syntax | Deprecated | Replaced by `DROP CONSTRAINT name` -| `DROP CONSTRAINT ON (n:Label) ASSERT exists(n.prop)` | Syntax | Deprecated | Replaced by `DROP CONSTRAINT name` -| `DROP CONSTRAINT ON ()-[r:Type]-() ASSERT exists(r.prop)` | Syntax | Deprecated | Replaced by `DROP CONSTRAINT name` -| `WHERE EXISTS {...}` | Clause | Added | Existential sub-queries are sub-clauses used to filter the results of a `MATCH`, `OPTIONAL MATCH`, or `WITH` clause. -| <> | 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 -| `USE neo4j` | Clause| Added | New clause to specify which graph a query, or query part, is executed against. +| Feature +| Details + +a| +label:function[] +label:restricted[] +[source, cypher, role="noheader"] +---- +length() +---- +a| +Restricted to only work on paths. See <> for more details. + +a| +label:function[] +label:restricted[] +[source, cypher, role="noheader"] +---- +size() +---- +a| +No longer works for paths. Only works for strings, lists and pattern expressions. See <> for more details. +|=== + +=== Updated features + +[cols="2", options="header"] +|=== +| Feature +| Details + +a| +label:syntax[] +label:extended[] +[source, cypher, role="noheader"] +---- +CREATE CONSTRAINT [name] ON ... +---- +a| +The create constraint syntax can now include a name. + +|=== +=== New features + +[cols="2", options="header"] +|=== +| Feature +| Details + +a| +label:functionality[] +label:new[] + +Pipelined runtime: +[source, cypher, role="noheader"] +---- +CYPHER runtime=pipelined +---- +a| +This Neo4j Enterprise Edition only feature involves a new runtime that has many performance enhancements. + +a| +label:functionality[] +label:new[] + +<> +a| +New Cypher commands for administering multiple databases. + +a| +label:functionality[] +label:new[] + +<> +a| +New Cypher commands for administering role-based access-control. + +a| +label:functionality[] +label:new[] + +<> +a| +New Cypher commands for administering dbms, database, graph and sub-graph access control. + +a| +label:syntax[] +label:new[] +[source, cypher, role="noheader"] +---- +CREATE INDEX [name] FOR (n:Label) ON (n.prop) +---- +a| +New syntax for creating indexes, which can include a name. + +a| +label:syntax[] +label:new[] +[source, cypher, role="noheader"] +---- +DROP INDEX name +---- +a| +<> for dropping an index by name. + + +a| +label:syntax[] +label:new[] +[source, cypher, role="noheader"] +---- +DROP CONSTRAINT name +---- +a| +<> for dropping a constraint by name, no matter the type. + + +a| +label:clause[] +label:new[] +[source, cypher, role="noheader"] +---- +WHERE EXISTS {...} +---- +a| +Existential sub-queries are sub-clauses used to filter the results of a `MATCH`, `OPTIONAL MATCH`, or `WITH` clause. + +a| +label:clause[] +label:new[] +[source, cypher, role="noheader"] +---- +USE neo4j +---- +a| +New clause to specify which graph a query, or query part, is executed against. + |=== [[cypher-deprecations-additions-removals-3.5]] == Version 3.5 -[options="header"] + +=== Deprecated features + +[cols="2", options="header"] |=== -| Feature | Type | Change | Details -| `CYPHER runtime=compiled` (Compiled runtime) | 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. -| `extract()` | Function | Deprecated | Replaced by <> -| `filter()` | Function | Deprecated | Replaced by <> +| Feature +| Details + +a| +label:functionality[] +label:deprecated[] + +Compiled runtime: +[source, cypher, role="noheader"] +---- +CYPHER runtime=compiled +---- +a| +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. + +a| +label:function[] +label:deprecated[] +[source, cypher, role="noheader"] +---- +extract() +---- +a| +Replaced by <>. + +a| +label:function[] +label:deprecated[] +[source, cypher, role="noheader"] +---- +filter() +---- +a| +Replaced by <>. |===