Neo4j Apo c Триггер «Фаза: после» никогда не заканчивается - PullRequest
0 голосов
/ 19 марта 2020

Я столкнулся с неожиданным поведением и не могу понять, каков его источник. Я использую apo c 3.5.0.9, и я пытаюсь иметь триггер в "фазе: после" , которая создает связь с узлом, который был обновлен с другим узлом, но это приводит к тому, что триггер никогда не заканчивается.

Например, с этим набором данных:

CREATE (:TEST {name:'x', _executed:0});
CREATE (:TEST {name:'y', _executed:0});

И этот простой триггер:

CALL apoc.trigger.add('triggerTest','UNWIND apoc.trigger.propertiesByKey({assignedNodeProperties},"_executed") as prop
    WITH prop.node as n
    CREATE (z:SON {father:id(n)})
    CREATE (n)-[:GENERATED]->(z)
    ',
{phase:'after'});

Который должен перехватить событие обновления и после транзакции, которая обновляет свойство _executed , создает новые отношения с обновленным узлом и новым узлом z .

И затем, если Я пытаюсь обновить это свойство _executed , например:

MATCH (a:TEST)
WHERE a.name = 'x'
SET a._executed = a._executed+1

Если я не завершу этот запрос, это никогда не закончится (круговой спиннер настольного приложения neo4j остается там навсегда), и если я его прерву, граф останется в том же состоянии, в котором находился до обновления, за исключением того, что свойство _executed действительно было обновлено ... Но ни новый узел, ни новое отношение не были созданы.

Если это указанный триггер находится в «фазе: до» или если в триггере не созданы новые отношения, касающиеся обновленного узла (т. е. если нет связи, созданной с использованием узла n ), это имеет ожидаемое поведение, и все идет гладко ...

Может кто-нибудь помочь мне понять, что вызывает это в фазе : после "?

...