Orientdb size () возвращает другой результат изнутри IF () - PullRequest
0 голосов
/ 14 мая 2018

В этом примере используется образец базы данных Tolkien-Arda и пакетный режим. Следующий скрипт

LET $1 = SELECT expand(bothE(Begets)) FROM Creature WHERE uniquename='hildigrimTook';
LET $2 = SELECT expand(bothE(Begets)) FROM Creature WHERE uniquename='adalgrimTook';
SELECT INTERSECT($1, $2).size();

Возвращает 7 (я добавил дополнения, я думаю, по умолчанию будет 2)

Однако при использовании в полном сценарии size () возвращает 0, поэтому он всегда создает новое ребро

LET $1 = SELECT expand(bothE(Begets)) FROM Creature WHERE uniquename='hildigrimTook';
LET $2 = SELECT expand(bothE(Begets)) FROM Creature WHERE uniquename='adalgrimTook';
LET $3 = SELECT INTERSECT($1, $2);
LET $4 = CREATE EDGE Begets FROM (SELECT FROM Creature WHERE uniquename='hildigrimTook') TO (SELECT FROM Creature WHERE uniquename='adalgrimTook');
IF($3.size() > 0) {
    return 'Already present';
}
IF($3.size() == 0) {
    return $4;
}

Предполагается, что этот скрипт проверяет ребра между hildigrimTook и adalgrimTook и создает ребро, если оно еще не существует. Кажется, что INTERSECT ($ 1, $ 2) .size () возвращает 0 при вызове изнутри оператора IF (), но возвращает 7, когда используется как часть SELECT.

Я пытался

LET $1 = SELECT expand(bothE(Begets)) FROM Creature WHERE uniquename='hildigrimTook';
LET $2 = SELECT expand(bothE(Begets)) FROM Creature WHERE uniquename='adalgrimTook';
LET $3 = SELECT INTERSECT($1, $2);
SELECT $3.size()

Но это тоже возвращает 0. Я также сделал

LET $1 = SELECT expand(bothE(Begets)) FROM Creature WHERE uniquename='hildigrimTook';
LET $2 = SELECT expand(bothE(Begets)) FROM Creature WHERE uniquename='adalgrimTook';
LET $3 = SELECT INTERSECT($1, $2).size();
SELECT $3;

Возвращает 7, как и ожидалось, но я получаю исключение пустого указателя Java, когда пытаюсь запустить его в операторе IF

IF($3 > 0) {
    return 'Already present';
}
IF($3 == 0) {
    return $4;
}

Ожидаемый вывод будет для сценария, чтобы вернуть либо «Уже присутствует» или @rid недавно созданного ребра. Спасибо за помощь, я попробовал все возможные способы, и документация не содержит подробностей IF.

...