apoc.custom.asProcedure
Procedure APOC Full Deprecated
apoc.custom.asProcedure(name, statement, mode, outputs, inputs, description) - register a custom cypher procedure
Signature
apoc.custom.asProcedure(name :: STRING?, statement :: STRING?, mode = read :: STRING?, outputs = null :: LIST? OF LIST? OF STRING?, inputs = null :: LIST? OF LIST? OF STRING?, description = :: STRING?) :: VOID
Input parameters
Name | Type | Default |
---|---|---|
name |
STRING? |
null |
statement |
STRING? |
null |
mode |
STRING? |
read |
outputs |
LIST? OF LIST? OF STRING? |
null |
inputs |
LIST? OF LIST? OF STRING? |
null |
description |
STRING? |
Usage Examples
Please note that apoc.custom.asFunction
and apoc.custom.asProcedure
are deprecated in favor of apoc.custom.declareFunction
and apoc.custom.declareProcedure
.
See here for more info.
This is the list of input parameters, name
and statement
are mandatory fields:
name | default | description |
---|---|---|
|
|
dot-separated name, will be prefixed with |
|
|
cypher statement to run, can use $parameters |
|
|
execution mode of the procedure: read, write, or schema |
|
|
List of pairs of name-type to be used as output columns, need to be in-order with the cypher statement, the default is a special case, that will collect all columns of the statement result into a map |
|
|
Pairs or triples of name-type-default, to be used as input parameters. The default just takes an optional map, otherwise they will become proper paramters in order |
|
|
A general description about the business rules implemented into the procedure |
Given statement will be registered as a procedure, the results will be turned into a stream of records.
The type names can be the same as apoc.custom.declare*
analogues.
Here is a simple example:
CALL apoc.custom.asProcedure('answer','RETURN 42 as answer')
This registers the statement as procedure custom.answer
that you then can call.
As no information on a parameter and return types is given, it just returns a stream of columns of maps called row
.
CALL custom.answer() YIELD row
RETURN row.answer
CALL apoc.custom.asProcedure('neighbours',
'MATCH (n:Person {name:$name})-->(nb) RETURN nb as neighbour','read',
[['neighbour','NODE']],[['name','STRING']], 'get neighbours of a person');
CALL custom.neighbours('Keanu Reeves') YIELD neighbour;
We can create the function custom.powers
that returns a stream of the powers of the first parameter, up to and including the power provided by the second parameter:
CALL apoc.custom.asProcedure(
'powers',
'UNWIND range(0, $power) AS power
RETURN $input ^ power AS answer',
'read',
[['answer', 'long']],
[['input','long'], ['power', 'long']]
);
We can use this function, to return 9°, 9¹, 9², and 9³, as shown in the query below:
CALL custom.powers(9, 3);
answer |
---|
1.0 |
9.0 |
81.0 |
729.0 |