У меня есть общий сценарий с сотрудниками, занятыми в отделах:
- У сотрудника есть родительский отдел, установленный отношением
MY_PARENT_IS
- такое же отношение используется отделами по отношению к их родительским отделам.
Руководителем конкретного сотрудника может быть:
- установить напрямую с помощью
IS_SPECIFIED_LEADER_FOR
- первое лицо, которое установлено как
IN_CHARGE_PERSON
в родительском отделе сотрудника (мы идем вверх по структуре от данного сотрудника, пока не найдем отдел с набором отношенийIN_CHARGE_PERSON
).
Пример структуры:
Для достижения этой цели у меня есть 2 запроса:
1-й запрос для получения указанного лидера для человека:
SELECT expand(manager) FROM (MATCH {class:HRUnitPersonCompany,
where: (Name = 'Sales Berseker 1' AND in('IS_SPECIFIED_LEADER_FOR').size() > 0)}.in('IS_SPECIFIED_LEADER_FOR')
{as: manager} RETURN manager)
2-й запрос находит первого менеджера вверх по структуре (IN_CHARGE_PERSON
)
SELECT expand(manager) FROM (MATCH {class:HRUnitPersonCompany,
where: (Name = 'Sales Berseker 1')}.out('MY_PARENT_IS')
{while: (out('IN_CHARGE_PERSON').size() == 0),
where: (out('IN_CHARGE_PERSON').size() > 0)}.out('IN_CHARGE_PERSON')
{as: manager} RETURN manager)
Вопрос в том, как объединить эти 2 запроса в 1 оператор, который либо вернет результаты первого, либо второго, но только в том случае, если первый не вернул результатов?
Я поиграл с LET, но не могу заставить это работать на 100% (это приводит к ошибке синтаксического анализа запроса):
SELECT if($specMgr.size()>0,$specMgr,$depMgr)
LET $specMgr = (SELECT expand(manager) FROM (MATCH {class:HRUnitPersonCompany,
where: (Name = 'Sales Berseker 1' AND in('IS_SPECIFIED_LEADER_FOR').size() > 0)}.in('IS_SPECIFIED_LEADER_FOR')
{as: manager} RETURN manager)),
$depMgr = (SELECT expand(manager) FROM (MATCH {class:HRUnitPersonCompany,
where: (Name = 'Sales Berseker 1')}.out('MY_PARENT_IS')
{while: (out('IN_CHARGE_PERSON').size() == 0),
where: (out('IN_CHARGE_PERSON').size() > 0)}.out('IN_CHARGE_PERSON')
{as: manager} RETURN manager))
Проблема с условием, когда я убираю сравнение, то хоть об ошибке не сообщается, но работает не так, как ожидалось. Почему я не могу использовать сравнение .size() > 0
в операторе if?