From 4a99c985937010af340c09531225508dc18fc10b Mon Sep 17 00:00:00 2001 From: Giuseppe Villani Date: Wed, 15 Jan 2025 17:11:02 +0100 Subject: [PATCH] [NOID] Fixes #4263: Adds docs for apoc triggers helper functions (#4311) (#4325) --- .../apoc.custom.dropAll.adoc | 2 +- .../apoc.custom.dropFunction.adoc | 2 +- .../apoc.custom.dropProcedure.adoc | 2 +- .../apoc.custom.installFunction.adoc | 2 +- .../apoc.custom.installProcedure.adoc | 2 +- .../apoc.custom.show.adoc | 2 +- .../apoc.trigger.nodesByLabel.adoc | 2 +- .../apoc.trigger.propertiesByKey.adoc | 2 +- .../apoc.trigger.toNode-lite.csv | 2 + .../apoc.trigger.toNode.adoc | 5 ++ .../apoc.trigger.toNode.csv | 2 + .../apoc.trigger.toRelationship-lite.csv | 2 + .../apoc.trigger.toRelationship.adoc | 5 ++ .../apoc.trigger.toRelationship.csv | 2 + docs/asciidoc/modules/ROOT/nav.adoc | 1 + .../pages/background-operations/triggers.adoc | 12 +++-- .../apoc.agg/apoc.agg.multiStats.adoc | 2 +- .../apoc.convert/apoc.convert.fromYaml.adoc | 2 +- .../apoc.custom/apoc.custom.dropAll.adoc | 2 +- .../apoc.custom/apoc.custom.dropFunction.adoc | 2 +- .../apoc.custom.dropProcedure.adoc | 2 +- .../apoc.custom.installFunction.adoc | 2 +- .../apoc.custom.installProcedure.adoc | 2 +- .../apoc.custom/apoc.custom.show.adoc | 2 +- .../apoc.import/apoc.import.arrow.adoc | 2 +- .../apoc.trigger/apoc.trigger.toNode.adoc | 28 +++++++++++ .../apoc.trigger.toRelationship.adoc | 27 +++++++++++ .../apoc.util/apoc.util.hashCode.adoc | 2 +- .../usage/apoc.trigger.nodesByLabel.adoc | 5 +- .../usage/apoc.trigger.propertiesByKey.adoc | 5 +- .../partials/usage/apoc.trigger.toNode.adoc | 46 ++++++++++++++++++ .../usage/apoc.trigger.toRelationship.adoc | 48 +++++++++++++++++++ 32 files changed, 199 insertions(+), 27 deletions(-) create mode 100644 docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.trigger.toNode-lite.csv create mode 100644 docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.trigger.toNode.adoc create mode 100644 docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.trigger.toNode.csv create mode 100644 docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.trigger.toRelationship-lite.csv create mode 100644 docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.trigger.toRelationship.adoc create mode 100644 docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.trigger.toRelationship.csv create mode 100644 docs/asciidoc/modules/ROOT/pages/overview/apoc.trigger/apoc.trigger.toNode.adoc create mode 100644 docs/asciidoc/modules/ROOT/pages/overview/apoc.trigger/apoc.trigger.toRelationship.adoc create mode 100644 docs/asciidoc/modules/ROOT/partials/usage/apoc.trigger.toNode.adoc create mode 100644 docs/asciidoc/modules/ROOT/partials/usage/apoc.trigger.toRelationship.adoc diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.custom.dropAll.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.custom.dropAll.adoc index 736df3a76e..fbef3d16ab 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.custom.dropAll.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.custom.dropAll.adoc @@ -2,4 +2,4 @@ `apoc.custom.list()` - provide a list of custom procedures/function registered ¦label:procedure[] -¦label:apoc-extended[] +¦label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.custom.dropFunction.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.custom.dropFunction.adoc index 736df3a76e..fbef3d16ab 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.custom.dropFunction.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.custom.dropFunction.adoc @@ -2,4 +2,4 @@ `apoc.custom.list()` - provide a list of custom procedures/function registered ¦label:procedure[] -¦label:apoc-extended[] +¦label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.custom.dropProcedure.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.custom.dropProcedure.adoc index 736df3a76e..fbef3d16ab 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.custom.dropProcedure.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.custom.dropProcedure.adoc @@ -2,4 +2,4 @@ `apoc.custom.list()` - provide a list of custom procedures/function registered ¦label:procedure[] -¦label:apoc-extended[] +¦label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.custom.installFunction.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.custom.installFunction.adoc index 736df3a76e..fbef3d16ab 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.custom.installFunction.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.custom.installFunction.adoc @@ -2,4 +2,4 @@ `apoc.custom.list()` - provide a list of custom procedures/function registered ¦label:procedure[] -¦label:apoc-extended[] +¦label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.custom.installProcedure.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.custom.installProcedure.adoc index 736df3a76e..fbef3d16ab 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.custom.installProcedure.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.custom.installProcedure.adoc @@ -2,4 +2,4 @@ `apoc.custom.list()` - provide a list of custom procedures/function registered ¦label:procedure[] -¦label:apoc-extended[] +¦label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.custom.show.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.custom.show.adoc index 736df3a76e..fbef3d16ab 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.custom.show.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.custom.show.adoc @@ -2,4 +2,4 @@ `apoc.custom.list()` - provide a list of custom procedures/function registered ¦label:procedure[] -¦label:apoc-extended[] +¦label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.trigger.nodesByLabel.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.trigger.nodesByLabel.adoc index 787ce587d2..5250536983 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.trigger.nodesByLabel.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.trigger.nodesByLabel.adoc @@ -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-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.trigger.propertiesByKey.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.trigger.propertiesByKey.adoc index 9024d16fbc..7acd35a4bc 100644 --- a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.trigger.propertiesByKey.adoc +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.trigger.propertiesByKey.adoc @@ -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-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.trigger.toNode-lite.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.trigger.toNode-lite.csv new file mode 100644 index 0000000000..f9dce372d0 --- /dev/null +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.trigger.toNode-lite.csv @@ -0,0 +1,2 @@ +¦signature +¦apoc.trigger.nodesByLabel(labelEntries :: ANY?, label :: STRING?) :: (LIST? OF ANY?) diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.trigger.toNode.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.trigger.toNode.adoc new file mode 100644 index 0000000000..d69a6d6841 --- /dev/null +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.trigger.toNode.adoc @@ -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 one, to be used in triggers with a not 'afterAsync' phase. +¦label:function[] +¦label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.trigger.toNode.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.trigger.toNode.csv new file mode 100644 index 0000000000..7db479ced3 --- /dev/null +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.trigger.toNode.csv @@ -0,0 +1,2 @@ +¦type¦qualified name¦signature¦description +¦function¦apoc.trigger.nodesByLabel¦apoc.trigger.nodesByLabel(labelEntries :: ANY?, label :: STRING?) :: (LIST? OF ANY?)¦ diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.trigger.toRelationship-lite.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.trigger.toRelationship-lite.csv new file mode 100644 index 0000000000..f9dce372d0 --- /dev/null +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.trigger.toRelationship-lite.csv @@ -0,0 +1,2 @@ +¦signature +¦apoc.trigger.nodesByLabel(labelEntries :: ANY?, label :: STRING?) :: (LIST? OF ANY?) diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.trigger.toRelationship.adoc b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.trigger.toRelationship.adoc new file mode 100644 index 0000000000..7a756ec102 --- /dev/null +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.trigger.toRelationship.adoc @@ -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 one, to be used in triggers with a not 'afterAsync' phase. +¦label:function[] +¦label:apoc-full[] diff --git a/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.trigger.toRelationship.csv b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.trigger.toRelationship.csv new file mode 100644 index 0000000000..7db479ced3 --- /dev/null +++ b/docs/asciidoc/modules/ROOT/examples/generated-documentation/apoc.trigger.toRelationship.csv @@ -0,0 +1,2 @@ +¦type¦qualified name¦signature¦description +¦function¦apoc.trigger.nodesByLabel¦apoc.trigger.nodesByLabel(labelEntries :: ANY?, label :: STRING?) :: (LIST? OF ANY?)¦ diff --git a/docs/asciidoc/modules/ROOT/nav.adoc b/docs/asciidoc/modules/ROOT/nav.adoc index 7186fb4109..5ed19558f7 100644 --- a/docs/asciidoc/modules/ROOT/nav.adoc +++ b/docs/asciidoc/modules/ROOT/nav.adoc @@ -142,6 +142,7 @@ include::partial$generated-documentation/nav.adoc[] * xref:background-operations/index.adoc[] ** xref::background-operations/periodic-background.adoc[] ** xref::background-operations/triggers.adoc[] + ** xref::background-operations/apoc-load-directory-async.adoc[] * xref:database-introspection/index.adoc[] ** xref::database-introspection/meta.adoc[] diff --git a/docs/asciidoc/modules/ROOT/pages/background-operations/triggers.adoc b/docs/asciidoc/modules/ROOT/pages/background-operations/triggers.adoc index ebb65480e1..d34e4b60cd 100644 --- a/docs/asciidoc/modules/ROOT/pages/background-operations/triggers.adoc +++ b/docs/asciidoc/modules/ROOT/pages/background-operations/triggers.adoc @@ -21,6 +21,7 @@ include::example$generated-documentation/apoc.trigger.stop.adoc[] include::example$generated-documentation/apoc.trigger.start.adoc[] include::example$generated-documentation/apoc.trigger.show.adoc[] include::example$generated-documentation/apoc.trigger.list.adoc[] + |=== @@ -53,12 +54,13 @@ Otherwise, it has the value `-1`. You can use these helper functions to extract nodes or relationships by label/relationship-type or updated property key. .Helper Functions -[cols="5m,5"] +[separator=¦,opts=header,cols="5,1m,1m"] |=== -| apoc.trigger.nodesByLabel($assignedLabels/$assignedNodeProperties,'Label') | function to filter entries by label, to be used within a trigger statement with `$assignedLabels` and `$removedLabels` -| apoc.trigger.propertiesByKey($assignedNodeProperties,'key') | function to filter propertyEntries by property-key, to be used within a trigger statement with $assignedNode/RelationshipProperties and $removedNode/RelationshipProperties. Returns [{old,[new],key,node,relationship}] -| apoc.trigger.toNode(node, $removedLabels, $removedNodeProperties) | function to rebuild a node as a virtual, to be used in triggers with a not 'afterAsync' phase -| apoc.trigger.toRelationship(rel, $removedRelationshipProperties) | function to rebuild a relationship as a virtual, to be used in triggers with a not 'afterAsync' phase +¦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[] |=== The 3rd parameter of the `apoc.trigger.install()` is a map `{phase: PHASE}`, where `PHASE` is a string which can have one of the following values: diff --git a/docs/asciidoc/modules/ROOT/pages/overview/apoc.agg/apoc.agg.multiStats.adoc b/docs/asciidoc/modules/ROOT/pages/overview/apoc.agg/apoc.agg.multiStats.adoc index 929484fd20..8d00f303bd 100644 --- a/docs/asciidoc/modules/ROOT/pages/overview/apoc.agg/apoc.agg.multiStats.adoc +++ b/docs/asciidoc/modules/ROOT/pages/overview/apoc.agg/apoc.agg.multiStats.adoc @@ -2,7 +2,7 @@ = apoc.agg.multiStats :description: This section contains reference documentation for the apoc.agg.multiStats function. -label:function[] label:apoc-extended[] +label:function[] label:apoc-full[] [.emphasis] apoc.agg.multiStats(nodeOrRel, keys) - Return a multi-dimensional aggregation diff --git a/docs/asciidoc/modules/ROOT/pages/overview/apoc.convert/apoc.convert.fromYaml.adoc b/docs/asciidoc/modules/ROOT/pages/overview/apoc.convert/apoc.convert.fromYaml.adoc index 3c5b0ad15f..8e551cba92 100644 --- a/docs/asciidoc/modules/ROOT/pages/overview/apoc.convert/apoc.convert.fromYaml.adoc +++ b/docs/asciidoc/modules/ROOT/pages/overview/apoc.convert/apoc.convert.fromYaml.adoc @@ -1,7 +1,7 @@ = apoc.convert.fromYaml :description: This section contains reference documentation for the apoc.convert.fromYaml function. -label:function[] label:apoc-extended[] +label:function[] label:apoc-full[] [.emphasis] apoc.convert.fromYaml(value, $config) - Deserializes the YAML string to Neo4j value diff --git a/docs/asciidoc/modules/ROOT/pages/overview/apoc.custom/apoc.custom.dropAll.adoc b/docs/asciidoc/modules/ROOT/pages/overview/apoc.custom/apoc.custom.dropAll.adoc index 5f7249a159..923d295fba 100644 --- a/docs/asciidoc/modules/ROOT/pages/overview/apoc.custom/apoc.custom.dropAll.adoc +++ b/docs/asciidoc/modules/ROOT/pages/overview/apoc.custom/apoc.custom.dropAll.adoc @@ -2,7 +2,7 @@ = apoc.custom.dropAll :description: This section contains reference documentation for the apoc.custom.dropAll procedure. -label:procedure[] label:apoc-extended[] +label:procedure[] label:apoc-full[] [.emphasis] Eventually drops all previously added custom procedures/functions and returns info diff --git a/docs/asciidoc/modules/ROOT/pages/overview/apoc.custom/apoc.custom.dropFunction.adoc b/docs/asciidoc/modules/ROOT/pages/overview/apoc.custom/apoc.custom.dropFunction.adoc index fc90b812a3..970d388006 100644 --- a/docs/asciidoc/modules/ROOT/pages/overview/apoc.custom/apoc.custom.dropFunction.adoc +++ b/docs/asciidoc/modules/ROOT/pages/overview/apoc.custom/apoc.custom.dropFunction.adoc @@ -2,7 +2,7 @@ = apoc.custom.dropFunction :description: This section contains reference documentation for the apoc.custom.dropFunction procedure. -label:procedure[] label:apoc-extended[] +label:procedure[] label:apoc-full[] [.emphasis] Eventually drops the targeted custom function diff --git a/docs/asciidoc/modules/ROOT/pages/overview/apoc.custom/apoc.custom.dropProcedure.adoc b/docs/asciidoc/modules/ROOT/pages/overview/apoc.custom/apoc.custom.dropProcedure.adoc index 16d12e818d..9d0ea5e52f 100644 --- a/docs/asciidoc/modules/ROOT/pages/overview/apoc.custom/apoc.custom.dropProcedure.adoc +++ b/docs/asciidoc/modules/ROOT/pages/overview/apoc.custom/apoc.custom.dropProcedure.adoc @@ -2,7 +2,7 @@ = apoc.custom.dropProcedure :description: This section contains reference documentation for the apoc.custom.dropProcedure procedure. -label:procedure[] label:apoc-extended[] +label:procedure[] label:apoc-full[] [.emphasis] Eventually drops the targeted custom procedure diff --git a/docs/asciidoc/modules/ROOT/pages/overview/apoc.custom/apoc.custom.installFunction.adoc b/docs/asciidoc/modules/ROOT/pages/overview/apoc.custom/apoc.custom.installFunction.adoc index 040fe54691..444037fa9c 100644 --- a/docs/asciidoc/modules/ROOT/pages/overview/apoc.custom/apoc.custom.installFunction.adoc +++ b/docs/asciidoc/modules/ROOT/pages/overview/apoc.custom/apoc.custom.installFunction.adoc @@ -2,7 +2,7 @@ = apoc.custom.installFunction :description: This section contains reference documentation for the apoc.custom.installFunction procedure. -label:procedure[] label:apoc-extended[] +label:procedure[] label:apoc-full[] [.emphasis] Eventually registers a custom cypher function diff --git a/docs/asciidoc/modules/ROOT/pages/overview/apoc.custom/apoc.custom.installProcedure.adoc b/docs/asciidoc/modules/ROOT/pages/overview/apoc.custom/apoc.custom.installProcedure.adoc index 4b2fa09ff7..f7f0158254 100644 --- a/docs/asciidoc/modules/ROOT/pages/overview/apoc.custom/apoc.custom.installProcedure.adoc +++ b/docs/asciidoc/modules/ROOT/pages/overview/apoc.custom/apoc.custom.installProcedure.adoc @@ -2,7 +2,7 @@ = apoc.custom.installProcedure :description: This section contains reference documentation for the apoc.custom.installProcedure procedure. -label:procedure[] label:apoc-extended[] +label:procedure[] label:apoc-full[] [.emphasis] Eventually registers a custom cypher procedure diff --git a/docs/asciidoc/modules/ROOT/pages/overview/apoc.custom/apoc.custom.show.adoc b/docs/asciidoc/modules/ROOT/pages/overview/apoc.custom/apoc.custom.show.adoc index e3c0d0f638..00c9acc354 100644 --- a/docs/asciidoc/modules/ROOT/pages/overview/apoc.custom/apoc.custom.show.adoc +++ b/docs/asciidoc/modules/ROOT/pages/overview/apoc.custom/apoc.custom.show.adoc @@ -2,7 +2,7 @@ = apoc.custom.show :description: This section contains reference documentation for the apoc.custom.show procedure. -label:procedure[] label:apoc-extended[] +label:procedure[] label:apoc-full[] [.emphasis] Provides a list of custom procedures/function registered diff --git a/docs/asciidoc/modules/ROOT/pages/overview/apoc.import/apoc.import.arrow.adoc b/docs/asciidoc/modules/ROOT/pages/overview/apoc.import/apoc.import.arrow.adoc index a90843e536..bd3ab296a3 100644 --- a/docs/asciidoc/modules/ROOT/pages/overview/apoc.import/apoc.import.arrow.adoc +++ b/docs/asciidoc/modules/ROOT/pages/overview/apoc.import/apoc.import.arrow.adoc @@ -1,7 +1,7 @@ = apoc.import.arrow :description: This section contains reference documentation for the apoc.import.arrow procedure. -label:procedure[] label:apoc-extended[] +label:procedure[] label:apoc-full[] [.emphasis] apoc.import.arrow(input, $config) - Imports arrow from the provided arrow file or byte array diff --git a/docs/asciidoc/modules/ROOT/pages/overview/apoc.trigger/apoc.trigger.toNode.adoc b/docs/asciidoc/modules/ROOT/pages/overview/apoc.trigger/apoc.trigger.toNode.adoc new file mode 100644 index 0000000000..6701f80c8f --- /dev/null +++ b/docs/asciidoc/modules/ROOT/pages/overview/apoc.trigger/apoc.trigger.toNode.adoc @@ -0,0 +1,28 @@ + += apoc.trigger.toNode +:description: This section contains reference documentation for the apoc.trigger.toNode function. + +label:function[] label:apoc-full[] + +== 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] + diff --git a/docs/asciidoc/modules/ROOT/pages/overview/apoc.trigger/apoc.trigger.toRelationship.adoc b/docs/asciidoc/modules/ROOT/pages/overview/apoc.trigger/apoc.trigger.toRelationship.adoc new file mode 100644 index 0000000000..da93ba58ca --- /dev/null +++ b/docs/asciidoc/modules/ROOT/pages/overview/apoc.trigger/apoc.trigger.toRelationship.adoc @@ -0,0 +1,27 @@ + += apoc.trigger.toRelationship +:description: This section contains reference documentation for the apoc.trigger.toRelationship function. + +label:function[] label:apoc-full[] + +== 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] + diff --git a/docs/asciidoc/modules/ROOT/pages/overview/apoc.util/apoc.util.hashCode.adoc b/docs/asciidoc/modules/ROOT/pages/overview/apoc.util/apoc.util.hashCode.adoc index f101935f89..3a7239d05d 100644 --- a/docs/asciidoc/modules/ROOT/pages/overview/apoc.util/apoc.util.hashCode.adoc +++ b/docs/asciidoc/modules/ROOT/pages/overview/apoc.util/apoc.util.hashCode.adoc @@ -2,7 +2,7 @@ = apoc.util.hashCode :description: This section contains reference documentation for the apoc.util.hashCode function. -label:function[] label:apoc-extended[] +label:function[] label:apoc-full[] [.emphasis] apoc.util.hashCode(value) - Returns the java.lang.Object#hashCode() of the value diff --git a/docs/asciidoc/modules/ROOT/partials/usage/apoc.trigger.nodesByLabel.adoc b/docs/asciidoc/modules/ROOT/partials/usage/apoc.trigger.nodesByLabel.adoc index 46ab58a5d5..7efe999d58 100644 --- a/docs/asciidoc/modules/ROOT/partials/usage/apoc.trigger.nodesByLabel.adoc +++ b/docs/asciidoc/modules/ROOT/partials/usage/apoc.trigger.nodesByLabel.adoc @@ -6,14 +6,15 @@ create constraint on (p:Person) assert p.id is unique; ---- -This function is used inside a xref::overview/apoc.trigger/apoc.trigger.add.adoc[] Cypher statement. +This function is used inside a xref::overview/apoc.trigger/apoc.trigger.install.adoc[] Cypher statement. We can use it to conditionally run Cypher statements when labels are added or removed or when properties are added or removed. For example, we add an `id` property to all `Person` nodes that is the lower case value of the `name` property of that node, by defining the following trigger: [source,cypher] ---- -CALL apoc.trigger.add( +CALL apoc.trigger.install( + 'neo4j', 'lowercase', 'UNWIND apoc.trigger.nodesByLabel($assignedLabels,"Person") AS n SET n.id = toLower(n.name)', diff --git a/docs/asciidoc/modules/ROOT/partials/usage/apoc.trigger.propertiesByKey.adoc b/docs/asciidoc/modules/ROOT/partials/usage/apoc.trigger.propertiesByKey.adoc index 522a976b7a..824a1de373 100644 --- a/docs/asciidoc/modules/ROOT/partials/usage/apoc.trigger.propertiesByKey.adoc +++ b/docs/asciidoc/modules/ROOT/partials/usage/apoc.trigger.propertiesByKey.adoc @@ -1,11 +1,12 @@ -This function is used inside a xref::overview/apoc.trigger/apoc.trigger.add.adoc[] Cypher statement. +This function is intended to be used within an xref::overview/apoc.trigger/apoc.trigger.install.adoc[] Cypher statement. We can use it to conditionally run Cypher statements when properties are added or removed. For example, we can connect nodes with a `genre` property to a `Genre` node, with the following trigger: [source,cypher] ---- -CALL apoc.trigger.add( +CALL apoc.trigger.install( + 'neo4j', 'triggerTest', 'UNWIND apoc.trigger.propertiesByKey($assignedNodeProperties, "genre") as prop WITH prop.node as n diff --git a/docs/asciidoc/modules/ROOT/partials/usage/apoc.trigger.toNode.adoc b/docs/asciidoc/modules/ROOT/partials/usage/apoc.trigger.toNode.adoc new file mode 100644 index 0000000000..7ab9559a2b --- /dev/null +++ b/docs/asciidoc/modules/ROOT/partials/usage/apoc.trigger.toNode.adoc @@ -0,0 +1,46 @@ +This function is intended to be used within an xref::overview/apoc.trigger/apoc.trigger.install.adoc[] 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"]}) +|=== diff --git a/docs/asciidoc/modules/ROOT/partials/usage/apoc.trigger.toRelationship.adoc b/docs/asciidoc/modules/ROOT/partials/usage/apoc.trigger.toRelationship.adoc new file mode 100644 index 0000000000..fa8e84c574 --- /dev/null +++ b/docs/asciidoc/modules/ROOT/partials/usage/apoc.trigger.toRelationship.adoc @@ -0,0 +1,48 @@ +This function is intended to be used within an xref::overview/apoc.trigger/apoc.trigger.install.adoc[] 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"}) +|===