Skip to content

Commit 46e0250

Browse files
Cypher 5 2025.09 publish (#1397)
Co-authored-by: Pontus Melke <[email protected]>
1 parent 04442b4 commit 46e0250

File tree

4 files changed

+105
-1
lines changed

4 files changed

+105
-1
lines changed

antora.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,4 @@ nav:
66
- modules/ROOT/content-nav.adoc
77
asciidoc:
88
attributes:
9-
neo4j-version: '2025.08'
9+
neo4j-version: '2025.09'

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

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,26 @@ For more information, see:
2828
* link:https://neo4j.com/docs/cypher-manual/25/introduction/[Cypher 25 Manual]
2929
====
3030

31+
[[cypher-deprecations-additions-removals-2025.09]]
32+
== Neo4j 2025.09
33+
34+
=== New in Cypher 5
35+
36+
[cols="2", options="header"]
37+
|===
38+
| Feature
39+
| Details
40+
41+
a|
42+
label:functionality[]
43+
label:new[]
44+
45+
New operator: `LockNodes`
46+
47+
48+
a| Introduced xref::planning-and-tuning/operators/operators-detail.adoc#query-plan-lock-nodes[`LockNodes`] operator, sometimes used in conjunction with the `LockingMerge` operator to lock nodes.
49+
|===
50+
3151
[[cypher-deprecations-additions-removals-2025.08]]
3252
== Neo4j 2025.08
3353

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -345,6 +345,13 @@ Tests for the presence of a pattern predicate in queries containing multiple pat
345345
|
346346
|
347347

348+
| xref::planning-and-tuning/operators/operators-detail.adoc#query-plan-lock-nodes[LockNodes]
349+
| Sometimes used in conjunction with the xref:planning-and-tuning/operators/operators-detail.adoc#query-plan-locking-merge[`LockingMerge`] operator to lock nodes.
350+
|
351+
|
352+
| label:new[Introduced in Neo4j 2025.09]
353+
354+
348355
| xref::planning-and-tuning/operators/operators-detail.adoc#query-plan-merge[Merge]
349356
| The `Merge` operator will either read or create nodes and/or relationships.
350357
|

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

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6087,6 +6087,83 @@ Total database accesses: 15, total allocated memory: 2232
60876087
60886088
======
60896089

6090+
[role=label--new-2025.09]
6091+
[[query-plan-lock-nodes]]
6092+
=== Lock Nodes
6093+
6094+
The `LockNodes` operator is sometimes used in conjunction with the xref:planning-and-tuning/operators/operators-detail.adoc#query-plan-locking-merge[`LockingMerge`] operator to lock nodes.
6095+
6096+
6097+
.LockNodes
6098+
======
6099+
6100+
.Query
6101+
[source, cypher]
6102+
----
6103+
PROFILE
6104+
MATCH (s:Person {name: 'me'})
6105+
MERGE (s)-[:FRIENDS_WITH]->(t:Person {size: size([()-->()|1])})
6106+
----
6107+
6108+
.Query Plan
6109+
[role="queryplan", subs="attributes+"]
6110+
----
6111+
Planner COST
6112+
6113+
Runtime PIPELINED
6114+
6115+
Runtime version DEV
6116+
6117+
Batch size 4
6118+
6119+
+----------------------------------------+----+------------------------------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+
6120+
| Operator | Id | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Pipeline |
6121+
+----------------------------------------+----+------------------------------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+
6122+
| +ProduceResults | 0 | | 1 | 0 | 0 | 0 | 0/0 | 0.018 | |
6123+
| | +----+------------------------------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+ |
6124+
| +EmptyResult | 1 | | 1 | 0 | 0 | | 0/0 | 0.016 | In Pipeline 7 |
6125+
| | +----+------------------------------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+
6126+
| +Apply | 2 | | 1 | 0 | 0 | | 0/0 | | |
6127+
| |\ +----+------------------------------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+
6128+
| | +ArgumentTracker | 19 | | 1 | 0 | 0 | 240 | 0/0 | 0.000 | |
6129+
| | | +----+------------------------------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+ |
6130+
| | +LockingMerge | 3 | CREATE (t:Person {size: COUNT { MATCH (`anon_2`)-[`anon_3`]->(`anon_4`) RETURN $`autoint_1` AS ` | 1 | 1 | 3 | 400 | 0/0 | 15.340 | In Pipeline 7 |
6131+
| | | | | anon_0` }}), (s)-[anon_1:FRIENDS_WITH]->(t), LOCK(s) | | | | | | | |
6132+
| | | +----+------------------------------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+
6133+
| | +AntiConditionalApply | 18 | | | 0 | 0 | 384 | | 0.010 | In Pipeline 6 |
6134+
| | |\ +----+------------------------------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+
6135+
| | | +Filter | 17 | t.size = anon_5 AND t:Person | 0 | 0 | 4 | | | | |
6136+
| | | | +----+------------------------------------------------------------------------------------------------------+----------------+------+---------+----------------+ | | |
6137+
| | | +Apply | 16 | | 1 | 2 | 0 | | | | |
6138+
| | | |\ +----+------------------------------------------------------------------------------------------------------+----------------+------+---------+----------------+ | | |
6139+
| | | | +RelationshipCountFromCountStore | 15 | count( ()-[]->() ) AS anon_5 | 1 | 2 | 2 | 608 | 0/0 | 0.113 | Fused in Pipeline 5 |
6140+
| | | | +----+------------------------------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+
6141+
| | | +Expand(All) | 14 | (s)-[anon_1:FRIENDS_WITH]->(t) | 1 | 2 | 3 | | | | |
6142+
| | | | +----+------------------------------------------------------------------------------------------------------+----------------+------+---------+----------------+ | | |
6143+
| | | +LockNodes | 13 | s | 1 | 1 | 0 | | | | |
6144+
| | | | +----+------------------------------------------------------------------------------------------------------+----------------+------+---------+----------------+ | | |
6145+
| | | +Argument | 12 | s | 1 | 1 | 0 | 584 | 0/0 | 1.494 | Fused in Pipeline 4 |
6146+
| | | +----+------------------------------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+
6147+
| | +Optional | 11 | s | 0 | 1 | 0 | 528 | 0/0 | 2.057 | In Pipeline 3 |
6148+
| | | +----+------------------------------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+
6149+
| | +Filter | 5 | t.size = anon_5 AND t:Person | 0 | 0 | 4 | | | | |
6150+
| | | +----+------------------------------------------------------------------------------------------------------+----------------+------+---------+----------------+ | | |
6151+
| | +Apply | 6 | | 1 | 2 | 0 | | | | |
6152+
| | |\ +----+------------------------------------------------------------------------------------------------------+----------------+------+---------+----------------+ | | |
6153+
| | | +RelationshipCountFromCountStore | 7 | count( ()-[]->() ) AS anon_5 | 1 | 2 | 2 | 528 | 0/0 | 4.220 | Fused in Pipeline 2 |
6154+
| | | +----+------------------------------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+
6155+
| | +Expand(All) | 8 | (s)-[anon_1:FRIENDS_WITH]->(t) | 1 | 2 | 3 | | | | |
6156+
| | | +----+------------------------------------------------------------------------------------------------------+----------------+------+---------+----------------+ | | |
6157+
| | +Argument | 9 | s | 1 | 1 | 0 | 432 | 1/0 | 0.184 | Fused in Pipeline 1 |
6158+
| | +----+------------------------------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+
6159+
| +NodeIndexSeek | 10 | RANGE INDEX s:Person(name) WHERE name = $autostring_0 | 1 | 1 | 2 | 376 | 0/1 | 9.263 | In Pipeline 0 |
6160+
+----------------------------------------+----+------------------------------------------------------------------------------------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+
6161+
6162+
Total database accesses: 23, total allocated memory: 3248
6163+
----
6164+
6165+
======
6166+
60906167

60916168

60926169
[[query-plan-foreach]]

0 commit comments

Comments
 (0)