-
Notifications
You must be signed in to change notification settings - Fork 494
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Fixes #4263: Adds docs for apoc triggers helper functions
- Loading branch information
Showing
18 changed files
with
194 additions
and
24 deletions.
There are no files selected for viewing
2 changes: 1 addition & 1 deletion
2
...oc/modules/ROOT/examples/generated-documentation/apoc.trigger.nodesByLabel.adoc
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,5 +1,5 @@ | ||
¦xref::overview/apoc.trigger/apoc.trigger.nodesByLabel.adoc[apoc.trigger.nodesByLabel icon:book[]] + | ||
|
||
`` | ||
`apoc.trigger.nodesByLabel(labelEntries, label)` - function to filter labelEntries by label, to be used within a trigger kernelTransaction with `$assignedLabels`, `$removedLabels`, `$assigned/removedNodeProperties`. | ||
¦label:function[] | ||
¦label:apoc-extended[] |
2 changes: 1 addition & 1 deletion
2
...modules/ROOT/examples/generated-documentation/apoc.trigger.propertiesByKey.adoc
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,5 +1,5 @@ | ||
¦xref::overview/apoc.trigger/apoc.trigger.propertiesByKey.adoc[apoc.trigger.propertiesByKey icon:book[]] + | ||
|
||
`` | ||
`apoc.trigger.propertiesByKey(propertyEntries, key)` - function to filter propertyEntries by property-key, to be used within a trigger kernelTransaction with `$assignedNode/RelationshipProperties` and `$removedNode/RelationshipProperties`. Returns [`old`,`new`,`key`,`node`,`relationship`]. | ||
¦label:function[] | ||
¦label:apoc-extended[] |
2 changes: 2 additions & 0 deletions
2
docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.trigger.toNode-lite.csv
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
¦signature | ||
¦apoc.trigger.nodesByLabel(labelEntries :: ANY?, label :: STRING?) :: (LIST? OF ANY?) |
5 changes: 5 additions & 0 deletions
5
...asciidoc/modules/ROOT/examples/generated-documentation/apoc.trigger.toNode.adoc
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
¦xref::overview/apoc.trigger/apoc.trigger.toNode.adoc[apoc.trigger.toNode icon:book[]] + | ||
|
||
`apoc.trigger.toNode(node, removedLabels, removedNodeProperties)` - function to rebuild a node as a virtual, to be used in triggers with a not 'afterAsync' phase. | ||
¦label:function[] | ||
¦label:apoc-extended[] |
2 changes: 2 additions & 0 deletions
2
docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.trigger.toNode.csv
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
¦type¦qualified name¦signature¦description | ||
¦function¦apoc.trigger.nodesByLabel¦apoc.trigger.nodesByLabel(labelEntries :: ANY?, label :: STRING?) :: (LIST? OF ANY?)¦ |
2 changes: 2 additions & 0 deletions
2
...ciidoc/modules/ROOT/examples/generated-documentation/apoc.trigger.toRelationship-lite.csv
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
¦signature | ||
¦apoc.trigger.nodesByLabel(labelEntries :: ANY?, label :: STRING?) :: (LIST? OF ANY?) |
5 changes: 5 additions & 0 deletions
5
.../modules/ROOT/examples/generated-documentation/apoc.trigger.toRelationship.adoc
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
¦xref::overview/apoc.trigger/apoc.trigger.toRelationship.adoc[apoc.trigger.toRelationship icon:book[]] + | ||
|
||
`apoc.trigger.toRelationship(rel, removedRelationshipProperties)` - function to rebuild a relationship as a virtual, to be used in triggers with a not 'afterAsync' phase. | ||
¦label:function[] | ||
¦label:apoc-extended[] |
2 changes: 2 additions & 0 deletions
2
docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.trigger.toRelationship.csv
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
¦type¦qualified name¦signature¦description | ||
¦function¦apoc.trigger.nodesByLabel¦apoc.trigger.nodesByLabel(labelEntries :: ANY?, label :: STRING?) :: (LIST? OF ANY?)¦ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
16 changes: 16 additions & 0 deletions
16
docs/asciidoc/modules/ROOT/pages/background-operations/triggers.adoc
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
APOC Core provides a set of procedures for running Cypher queries that are called when data in Neo4j is changed (created, updated, deleted). | ||
|
||
https://neo4j.com/docs/apoc/current/background-operations/triggers/[See here for more info]. | ||
|
||
In addition, APOC Extended provides some helper procedures to more easily manipulate Cypher queries and solve some transaction use cases that cannot be solved otherwise. | ||
|
||
== Helper Functions | ||
|
||
[separator=¦,opts=header,cols="5,1m,1m"] | ||
|=== | ||
¦Qualified Name¦Type¦Release | ||
include::example$generated-documentation/apoc.trigger.nodesByLabel.adoc[] | ||
include::example$generated-documentation/apoc.trigger.propertiesByKey.adoc[] | ||
include::example$generated-documentation/apoc.trigger.toNode.adoc[] | ||
include::example$generated-documentation/apoc.trigger.toRelationship.adoc[] | ||
|=== |
28 changes: 28 additions & 0 deletions
28
docs/asciidoc/modules/ROOT/pages/overview/apoc.trigger/apoc.trigger.toNode.adoc
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
|
||
= apoc.trigger.toNode | ||
:description: This section contains reference documentation for the apoc.trigger.toNode function. | ||
|
||
label:function[] label:apoc-extended[] | ||
|
||
== Signature | ||
|
||
[source] | ||
---- | ||
apoc.trigger.toNode(node :: NODE, removedLabels :: MAP, removedNodeProperties :: MAP) :: RELATIONSHIPH | ||
---- | ||
|
||
== Input parameters | ||
[.procedures, opts=header] | ||
|=== | ||
| Name | Type | Default | ||
|node|NODE|null | ||
|removedLabels|MAP|null | ||
|removedNodeProperties|MAP|null | ||
|=== | ||
|
||
[[usage-apoc.trigger.nodesByLabel]] | ||
== Usage Examples | ||
include::partial$usage/apoc.trigger.toNode.adoc[] | ||
|
||
xref::background-operations/triggers.adoc[More documentation of apoc.trigger.toNode,role=more information] | ||
|
27 changes: 27 additions & 0 deletions
27
...iidoc/modules/ROOT/pages/overview/apoc.trigger/apoc.trigger.toRelationship.adoc
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
|
||
= apoc.trigger.toRelationship | ||
:description: This section contains reference documentation for the apoc.trigger.toRelationship function. | ||
|
||
label:function[] label:apoc-extended[] | ||
|
||
== Signature | ||
|
||
[source] | ||
---- | ||
apoc.trigger.toRelationship(rel :: RELATIONSHIP, removedRelationshipProperties :: MAP) :: RELATIONSHIP | ||
---- | ||
|
||
== Input parameters | ||
[.procedures, opts=header] | ||
|=== | ||
| Name | Type | Default | ||
|rel|RELATIONSHIP|null | ||
|removedRelationshipProperties|MAP|null | ||
|=== | ||
|
||
[[usage-apoc.trigger.nodesByLabel]] | ||
== Usage Examples | ||
include::partial$usage/apoc.trigger.toRelationship.adoc[] | ||
|
||
xref::background-operations/triggers.adoc[More documentation of apoc.trigger.toNode,role=more information] | ||
|
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
5 changes: 3 additions & 2 deletions
5
docs/asciidoc/modules/ROOT/partials/usage/apoc.trigger.propertiesByKey.adoc
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
46 changes: 46 additions & 0 deletions
46
docs/asciidoc/modules/ROOT/partials/usage/apoc.trigger.toNode.adoc
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
This function is intended to be used within an `apoc.trigger.install` Cypher statement. | ||
|
||
If we want to create a 'before' or 'after' trigger query using `$deletedNodes`, and retrieve entity information such as labels and/or properties, we cannot use the classic Cypher functions labels() and properties(). | ||
Instead, we have to leverage virtual nodes through the function `apoc.trigger.toNode(node, $removedLabels, $removedNodeProperties)`. | ||
|
||
For example, to create a new `Report` node with a list of deleted node IDs and all the labels retrieved for each deleted node, we can execute: | ||
[source,cypher] | ||
---- | ||
CALL apoc.trigger.install( | ||
'neo4j', 'myTrigger', | ||
"UNWIND $deletedNodes as deletedNode | ||
WITH apoc.trigger.toNode(deletedNode, $removedLabels, $removedNodeProperties) AS deletedNode | ||
CALL apoc.merge.node( | ||
['Report'], | ||
{labels: apoc.node.labels(deletedNode)}, | ||
{created: datetime()}, | ||
{updated: datetime()} | ||
) YIELD node AS report | ||
WITH report, deletedNode | ||
SET report.deletedIds = coalesce(report.deletedIds, [])+[id(deletedNode)]" , | ||
{phase:'before'} | ||
); | ||
---- | ||
|
||
Now, let's create and delete a `Movie` node: | ||
|
||
[source,cypher] | ||
---- | ||
CREATE (:Movie {title: "The White Tiger"}); | ||
MATCH (movie:Movie {title: "The White Tiger"}) DELETE movie; | ||
---- | ||
|
||
Finally, let's check the `Report` node: | ||
|
||
[source,cypher] | ||
---- | ||
MATCH (report:Report {labels: ['Movie']}) | ||
RETURN report; | ||
---- | ||
|
||
.Results | ||
[opts="header"] | ||
|=== | ||
| report | ||
| (:Report {"created": "2024-12-12T08:33:27.188000000Z", "deletedIds": [12], "labels": ["Movie"]}) | ||
|=== |
48 changes: 48 additions & 0 deletions
48
docs/asciidoc/modules/ROOT/partials/usage/apoc.trigger.toRelationship.adoc
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
This function is intended to be used within an `apoc.trigger.install` Cypher statement. | ||
|
||
If we want to create a 'before' or 'after' trigger query using `$deletedRelationships`, and retrieve entity information such as the type and/or properties, we cannot use the classic Cypher functions type() and properties(). | ||
Instead, we have to leverage virtual relationships through the function `apoc.trigger.toRelationship(rel, $removedRelationshipProperties)`. | ||
|
||
For example, to create a new `Report` node with a list of deleted relationship IDs and the type retrieved for each deleted relationship, we can execute: | ||
[source,cypher] | ||
---- | ||
CALL apoc.trigger.install( | ||
'neo4j', 'myTrigger', | ||
"UNWIND $deletedRelationships as deletedRel | ||
WITH apoc.trigger.toRelationship(deletedRel, $removedRelationshipProperties) AS deletedRel | ||
CALL apoc.merge.node( | ||
['Report'], | ||
{type: apoc.rel.type(deletedRel)}, | ||
{created: datetime()}, | ||
{updated: datetime()} | ||
) YIELD node AS report | ||
WITH report, deletedRel | ||
SET report.deletedIds = coalesce(report.deletedIds, [])+[id(deletedRel)]" , | ||
{phase:'before'} | ||
); | ||
---- | ||
|
||
Now, let's create and delete a `IN_GENRE` relationship between a `Movie` node and a `Genre` node: | ||
|
||
[source,cypher] | ||
---- | ||
MERGE (movie:Movie {title: "The White Tiger"}) | ||
MERGE (genre:Genre {name: "Triller"}) | ||
MERGE (movie)-[IN_GENRE]->(genre); | ||
MATCH (movie:Movie {title: "The White Tiger"})-[r:IN_GENRE]->(genre:Genre {name: "Triller"}) DELETE r; | ||
---- | ||
|
||
Finally, let's check the `Report` node: | ||
|
||
[source,cypher] | ||
---- | ||
MATCH (report:Report {labels: ['IN_GENRE']}) | ||
RETURN report; | ||
---- | ||
|
||
.Results | ||
[opts="header"] | ||
|=== | ||
| report | ||
| (:Report {"created": "2024-12-12T08:33:27.188000000Z", "deletedIds": [12], "type": "IN_GENRE"}) | ||
|=== |