apoc.custom.declareFunction
Procedure APOC Full
apoc.custom.declareFunction(signature, statement, forceSingle, description) - register a custom cypher function
Signature
apoc.custom.declareFunction(signature :: STRING?, statement :: STRING?, forceSingle = false :: BOOLEAN?, description = :: STRING?) :: VOID
This procedure is not intended to be used in a cluster environment, and may act unpredictably. |
Input parameters
Name | Type | Default |
---|---|---|
signature |
STRING? |
null |
statement |
STRING? |
null |
forceSingle |
BOOLEAN? |
false |
description |
STRING? |
Usage Examples
Here is a simple example:
CALL apoc.custom.declareFunction('answerFun() :: INT', 'RETURN 42 as answer')
This registers the statement as procedure custom.answer
that you then can call.
RETURN custom.answerFun()
answer |
---|
42 |
Or you can also write in this way:
CALL apoc.custom.declareFunction('answerFunMap() :: MAP', 'RETURN 42 as answer')
In this case the result is wrapped in a stream of maps called row
. Therefore, you can do:
WITH custom.answerFunMap() YIELD row
RETURN row.answer
answer |
---|
42 |
which is equivalent to deprecated one:
CALL apoc.custom.asFunction('answer','RETURN 42 as answer')
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.declareProcedure(
'powers(input::INT, power::INT) :: (answer::INT)',
'UNWIND range(0, $power) AS power
RETURN $input ^ power AS answer'
);
We can create the function custom.double
, that doubles the provided value, by running the following function:
CALL apoc.custom.declareFunction(
'double(input::INT) :: INT',
'RETURN $input*2 as answer'
);
Function, input and output names must have at least 2 characters. |
We can use this function, as shown in the query below:
RETURN custom.double(83) AS value;
value |
---|
166 |
Furthermore, we can pass as a 3rd parameter a boolean (with default false) which, if true, in case the function returns a list of a single element, it will return only the single element itself and not the list.
For example:
CALL apoc.custom.declareFunction('forceSingleTrue(input::ANY) :: LIST OF INT',
'RETURN 1',
true
);
value |
---|
1 |
otherwise with false the result will be a singleton list:
CALL apoc.custom.declareFunction('forceSingleFalse(input::ANY) :: LIST OF INT',
'RETURN 1',
false
);
value |
---|
[1] |
Moreover, we can pass a description
parameter as the 4th parameter,
which will be returned by the call apoc.custom.list
and SHOW FUNCTIONS
.