Skip to content

Commit 4365442

Browse files
rsill-neo4jJPryce-AklundhNataliaIvakinarenetapopovarecrwplay
authored
Dev to cypher 25 (#1346)
Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: Jens Pryce-Åklundh <[email protected]> Co-authored-by: NataliaIvakina <[email protected]> Co-authored-by: Reneta Popova <[email protected]> Co-authored-by: Neil Dewhurst <[email protected]> Co-authored-by: Stefano Ottolenghi <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Nadja Müller <[email protected]> Co-authored-by: Therese Magnusson <[email protected]> Co-authored-by: Wilco <[email protected]> Co-authored-by: JoelBergstrand <[email protected]> Co-authored-by: Gem Lamont <[email protected]> Co-authored-by: Arne Fischereit <[email protected]>
1 parent 84507e7 commit 4365442

File tree

10 files changed

+1339
-986
lines changed

10 files changed

+1339
-986
lines changed

antora.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,4 @@ nav:
77
- modules/ROOT/content-nav.adoc
88
asciidoc:
99
attributes:
10-
neo4j-version: '2025.06'
10+
neo4j-version: '2025.07'

modules/ROOT/pages/clauses/filter.adoc

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,38 @@ RETURN p.name AS person,
9393
3+|Rows: 2
9494
|===
9595

96+
[[filter-on-dynamic-labels-and-types]]
97+
== Filter on dynamic labels and types
98+
99+
To filter on a label or relationship type using a dynamically computed value, use `$(<expr>)` where <expr> is any Cypher expression:
100+
101+
.Parameters
102+
[source, parameters]
103+
----
104+
{
105+
"label": "Swedish"
106+
}
107+
----
108+
109+
.Filter on a dynamically computed node label
110+
// tag::clauses_where_dynamic[]
111+
[source, cypher]
112+
----
113+
MATCH (n)
114+
FILTER n:$($label)
115+
RETURN labels(n) AS labels
116+
----
117+
// end::clauses_where_dynamic[]
118+
119+
.Result
120+
[role="queryresult",options="header,footer",cols="1*<m"]
121+
|===
122+
| labels
123+
| ["Person", "Swedish"]
124+
1+d|Rows: 1
125+
|===
126+
127+
96128
[[filter-on-dynamic-properties]]
97129
== Filter on dynamic properties
98130

modules/ROOT/pages/clauses/where.adoc

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,38 @@ RETURN f.name AS oldFriend
103103
|===
104104

105105

106+
[[filter-on-dynamic-labels-and-types]]
107+
== Filter on dynamic labels and types
108+
109+
To filter on a label or relationship type using a dynamically computed value, use `$(<expr>)` where <expr> is any Cypher expression:
110+
111+
.Parameters
112+
[source, parameters]
113+
----
114+
{
115+
"label": "Swedish"
116+
}
117+
----
118+
119+
.Filter on a dynamically computed node label
120+
// tag::clauses_where_dynamic[]
121+
[source, cypher]
122+
----
123+
MATCH (n)
124+
WHERE n:$($label)
125+
RETURN labels(n) AS labels
126+
----
127+
// end::clauses_where_dynamic[]
128+
129+
.Result
130+
[role="queryresult",options="header,footer",cols="1*<m"]
131+
|===
132+
| labels
133+
| ["Person", "Swedish"]
134+
1+d|Rows: 1
135+
|===
136+
137+
106138
[[filter-on-dynamic-properties]]
107139
== Filter on dynamic properties
108140

modules/ROOT/pages/deprecations-additions-removals-compatibility.adoc

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,31 @@ Cypher 25 was introduced in Neo4j 2025.06 and can only be used on Neo4j 2025.06+
2222
Features removed in Cypher 25 are still available on Neo4j 2025.06+ databases either by prepending a query with `CYPHER 5` or by having Cypher 5 as the default language for the database.
2323
For more information, see xref:queries/select-version.adoc[].
2424

25+
[[cypher-deprecations-additions-removals-2025.07]]
26+
== Neo4j 2025.07
27+
28+
=== Updated in Cypher 25
29+
30+
[cols="2", options="header"]
31+
|===
32+
| Feature
33+
| Details
34+
35+
a|
36+
label:functionality[]
37+
label:updated[]
38+
[source, cypher, role="noheader"]
39+
----
40+
MATCH (n)-[r]->()
41+
WHERE n:$(<expr1>)
42+
WITH n, r:$(<expr2>) AS hasType
43+
RETURN n:$(<expr3>)
44+
----
45+
46+
| Added the ability to dynamically reference node labels and relationship types in places where xref:patterns/reference.adoc#label-expressions[label expressions] are allowed.
47+
|===
48+
49+
2550
[[cypher-deprecations-additions-removals-2025.06]]
2651
== Neo4j 2025.06
2752

modules/ROOT/pages/patterns/reference.adoc

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -314,6 +314,19 @@ The following matches relationships that have a type that is neither `A` nor `B`
314314
-[:!A&!B]->
315315
----
316316

317+
[[dynamic-label-and-type-expressions]]
318+
=== Dynamic label and type expressions
319+
320+
Node labels and relationship types can be referenced dynamically in expressions, parameters, and variables within label expressions.
321+
322+
.Syntax for creating nodes and relationships dynamically
323+
[source, syntax]
324+
----
325+
dynamicLabelExpression ::= ":$(" + valueExpression ")"
326+
----
327+
328+
The `valueExpression` must evaluate to a `STRING NOT NULL | LIST<STRING NOT NULL> NOT NULL` value.
329+
317330
[[property-key-value-expressions]]
318331
== Property key-value expressions
319332

modules/ROOT/pages/planning-and-tuning/execution-plans.adoc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ The `id` column specifies a unique ID assigned to each operator.
141141
There are no guarantees about the order of the ids, although they will usually start with 0 at the root operator, and will increase until the leaf operator is reached at the beginning of the operator tree.
142142

143143
The `Details` column in the middle of the execution plan describes what task is performed by each operator.
144-
For example, the details column of the xref::planning-and-tuning/operators/operators-detail.adoc#query-plan-repeat[Repeat(Trail)] operator in the middle of the execution plan (`id 5`), specifies that the operator traverses a quantified path pattern without an upward limit.
144+
For example, the details column of the xref::planning-and-tuning/operators/operators-detail.adoc#query-plan-repeat[Repeat] operator in the middle of the execution plan (`id 5`), specifies that the operator traverses a quantified path pattern without an upward limit.
145145

146146
Finally, the `Estimated Rows` column details the number of rows that are expected to be produced by each operator.
147147
This estimate is an approximate number based on the available statistical information and the planner uses it to choose a suitable execution plan.footnote:[The statistical information maintained by Neo4j includes the following: the number of nodes having a certain label, the number of relationships by type, selectivity per index, and the number of relationships by type, ending with or starting from a node with a specific label.]

modules/ROOT/pages/planning-and-tuning/operators/index.adoc

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -423,8 +423,8 @@ Tests for the presence of a pattern predicate in queries containing multiple pat
423423
|
424424

425425
| xref::planning-and-tuning/operators/operators-detail.adoc#query-plan-nullify-metadata[NullifyMetadata]
426-
| responsible for cleaning up the state produced by xref:planning-and-tuning/operators/operators-detail.adoc#query-plan-repeat[`Repeat(Trail)`].
427-
It is only planned directly after `Repeat(Trail)`.
426+
| responsible for cleaning up the state produced by xref:planning-and-tuning/operators/operators-detail.adoc#query-plan-repeat[`Repeat`].
427+
It is only planned directly after `Repeat`.
428428
|
429429
|
430430
|
@@ -632,7 +632,7 @@ It also fetches the start and end nodes of those relationships.
632632
|
633633
|
634634

635-
| xref::planning-and-tuning/operators/operators-detail.adoc#query-plan-repeat[Repeat(Trail)]
635+
| xref::planning-and-tuning/operators/operators-detail.adoc#query-plan-repeat[Repeat]
636636
| Solves quantified path patterns.
637637
|
638638
|

modules/ROOT/pages/planning-and-tuning/operators/operators-detail.adoc

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4063,15 +4063,15 @@ Total database accesses: 49, total allocated memory: 1200
40634063

40644064

40654065
[[query-plan-repeat]]
4066-
=== Repeat (Trail)
4067-
// Repeat(Trail)
4066+
=== Repeat
4067+
// Repeat
40684068

4069-
Given a start node, the `Repeat(Trail)` operator will traverse xref::patterns/variable-length-patterns.adoc#quantified-path-patterns[quantified path patterns] that cannot be solved (or solved efficiently) with the xref::planning-and-tuning/operators/operators-detail.adoc#query-plan-varlength-expand-all[`VarLengthExpand(All)`] operator.
4069+
Given a start node, the `Repeat` operator will traverse xref::patterns/variable-length-patterns.adoc#quantified-path-patterns[quantified path patterns] that cannot be solved (or solved efficiently) with the xref::planning-and-tuning/operators/operators-detail.adoc#query-plan-varlength-expand-all[`VarLengthExpand(All)`] operator.
40704070
Similar to an xref::planning-and-tuning/operators/operators-detail.adoc#query-plan-apply[`Apply`] operator, it takes a single row from the left-hand side and applies the operators on the right-hand side.
40714071
In contrast to `Apply`, however, it repeatedly applies these operators in accordance with the quantifiers on the quantified path pattern.
40724072
In the following example, the operator will repeat twice and produce rows for both repetitions.
40734073

4074-
.Repeat(Trail)
4074+
.Repeat
40754075
======
40764076
40774077
.Query
@@ -4127,8 +4127,8 @@ Total database accesses: 747, total allocated memory: 45832
41274127
[[query-plan-nullify-metadata]]
41284128
=== Nullify Metadata
41294129

4130-
`NullifyMetadata` is responsible for cleaning up the state produced by xref:planning-and-tuning/operators/operators-detail.adoc#query-plan-repeat[`Repeat(Trail)`].
4131-
It is only planned directly after `Repeat(Trail)`.
4130+
`NullifyMetadata` is responsible for cleaning up the state produced by xref:planning-and-tuning/operators/operators-detail.adoc#query-plan-repeat[`Repeat`].
4131+
It is only planned directly after `Repeat`.
41324132

41334133
.NullifyMetadata
41344134
======

0 commit comments

Comments
 (0)