Как обнаружить неудачную транзакцию в neo4j-php-client

Я использую graphaware/neo4j-php-client 4.5.1 с Neo4j 3.0.4 на PHP 5.6.24.

Я не понимаю, как узнать, не прошла ли транзакция.

Например, я пытаюсь удалить узел, который все еще имеет отношения. Если я запускаю DELETE в этом простом запросе:

$client->run
(
    'MATCH (node { name: {name} }) DELETE node',
    [ 'name' => 'Fred' ]
);

… Я получаю это исключение, которое я и ожидал:

[GraphAware\Neo4j\Client\Exception\Neo4jException]
  org.neo4j.kernel.api.exceptions.ConstraintViolationTransactionFailureException: 
  Cannot delete node<31>, because it still has relationships. 
  To delete this node, you must first delete its relationships.

Но когда я оборачиваю тот же запрос в транзакцию:

$transaction = $client->transaction();

$transaction->push
(
    'MATCH (node { name: {name} }) DELETE node',
    [ 'name' => 'Fred' ]
);

$results = $transaction->commit();

foreach ($results as $result)
{
    $summary = $result->summarize();
    $stats = $summary->updateStatistics();
    printf("Nodes deleted: %d\n", $stats->nodesDeleted());
}

printf("Transaction status: %s\n", $transaction->status());

… Neo4j не удаляет узел, но я вижу это (предполагая успех) вместо исключения:

Nodes deleted: 1
Transaction status: COMMITED

Я что-то пропустил, или это баг? Заранее спасибо!


person Tim Strehle    schedule 04.09.2016    source источник


Ответы (1)


Спасибо,

На самом деле это ошибка, и я исправил ее в https://github.com/graphaware/neo4j-php-client/commit/af8f01475a3cf63549498449574eb9c4bb8e7254

Версия 4.5.3, включающая это исправление, должна появиться на сайте packagist через пару минут.

Пожалуйста, проверьте и сообщите.

person Christophe Willemsen    schedule 04.09.2016
comment
Отлично, работает как положено с 4.5.3! Спасибо за очень быстрый ответ и решение! - person Tim Strehle; 06.09.2016