Использование псевдонимов в RQL-выражениях для работы с объектами доменов

В данном разделе описано использование псевдонимов при настройке правил данных и политик доступа.

Псевдонимы — это именованные ссылки на объекты, атрибуты или результаты вычисления функций, которые могут использоваться в RQL-выражениях.

В данном разделе при описании RQL-выражений приняты следующие соглашения:

  • Необязательные компоненты выражений заключаются в квадратные скобки.

  • Под обозначением <expression> понимается выражение, то есть применение оператора, функция, идентификатор, литерал, арифметическое выражение или выражение в скобках.

  • Имена функций и операторов RQL могут использоваться как в верхнем, так и в нижнем регистре. В этом разделе имена функций приведены в верхнем регистре, если они являются обертками или имеют прямой аналог среди нативных функций SQL.

Системные псевдонимы

Системные псевдонимы используются для обращения к специальным значениям в RQL. Все системные псевдонимы начинаются с символа @.

Объекты домена

Текущий объект (@doc)

Псевдоним @doc представляет текущий объект, участвующий в выражении. Этот псевдоним позволяет обращаться к атрибутам текущего объекта в компонентах WHERE, JOIN …​ ON, вложенных выражениях и функциях.

Текущая строка таблицы (@row)

Псевдоним @row используется при работе с атрибутами типа Table и представляет текущую строку таблицы. Позволяет обращаться к столбцам внутри этой строки при описании правил данных.

Примеры

Ссылка на столбец таблицы в текущей строке
condition: !rql |
  @row.tableEnum1 = 'monday'

Правило с таким условием выполняется, если в столбце tableEnum1 текущей строки указано "monday".

Приведение типа значения в столбце таблицы
condition: !rql |
  CAST(@row.tableTimestamp, 'Timestamp') > @CurrentDateTime

Правило с таким условием выполняется, если в столбце tableTimestamp указано более позднее время, чем текущее. Используется приведение типа значения в столбце с помощью функции CAST() и псевдоним @CurrentDateTime.

Текущий элемент массива или строки таблицы (@index)

Псевдоним @index используется при работе с атрибутами типов Table и Array. Содержит индекс текущего элемента массива или строки таблицы. Нумерация элементов начинается с нуля. Таким образом, в массиве из n элементов первый элемент имеет индекс array[0], а последний — array[n-1].

Пример
condition: !rql
  @index = 0

Правило с этим условием будет выполнено только для первого элемента массива или первой строки таблицы.

Идентификатор перечисления

В псевдонимах вида @<enum_id.enum_value_id> указываются:

  • <enum_id> — идентификатор перечисления, определенного в схеме домена;

  • <enum_value_id> — идентификатор значения в перечислении.

Система подставит конкретное значение при выполнении RQL-выражения.

Примеры

Допустим, в схеме домена определено перечисление enumIocTypes:

dataTypes:
  - id: enumIocTypes
    name: Типы индикаторов компрометации
    dataType: Enum
    values:
    - id: Account
      name: Аккаунт
    - id: File
      name: Файл
    ...
Использование перечисления в условии
condition: !rql iocType = @enumIocTypes.Account

Правило с этим условием будет применено, если значение атрибута iocType текущего объекта равно значению "Аккаунт" перечисления "Типы индикаторов компрометации".

Использование перечисления в списке допустимых значений
expression: !rql SELECT ARRAY(@enumIocTypes.Account, @enumIocTypes.File)

В данном примере функция ARRAY() используется, чтобы сформировать список допустимых значений из элементов перечисления. Атрибут объекта, на который действует эффект правила, может иметь одно из значений перечисления "Типы индикаторов компрометации" — "Аккаунт" или "Файл".

Идентификатор рабочего процесса

В псевдонимах вида @<workflow_id.workflow_status_id> указываются:

  • <workflow_id> — идентификатор рабочего процесса, определенного в схеме домена,

  • <workflow_status_id> — идентификатор статуса рабочего процесса.

Система подставит конкретное значение при выполнении RQL-выражения.

Текущие дата и время

@CurrentTimestamp (@CurrentDateTime)

Псевдонимы @CurrentTimestamp и @CurrentDateTime равнозначны и возвращают текущее значение даты и времени с точностью до миллисекунд.

@CurrentDate

Псевдоним @CurrentDate возвращает текущую дату.

При сравнении рекомендуется указывать дату в формате YYYY-MM-DD, например:

@CurrentDate >= '2025-09-01'

@CurrentTime

Псевдоним @CurrentTime возвращает текущее время в формате типа TIME.

Для корректного сравнения может потребоваться явное приведение типа с помощью функции CAST():

Пример
@CurrentTime <= CAST('20:00', 'Time')

@CurrentDayOfWeek

Псевдоним @CurrentDayOfWeek возвращает название текущего дня недели на английском языке в виде строки:

  • monday — понедельник;

  • tuesday — вторник;

  • wednesday — среда;

  • thursday — четверг;

  • friday — пятница;

  • saturday — суббота;

  • sunday — воскресенье.

Данные текущего пользователя (@CurrentUser)

Псевдоним @CurrentUser используется для обращения к данным текущего аутентифицированного пользователя.

Доступны следующие варианты использования:

  • @CurrentUser — ссылка на объект текущего пользователя. Используется для сравнения с полями типа Референс (Reference) или полем createdBy.

  • @CurrentUser.id — идентификатор текущего пользователя.

    При сравнении с полем createdBy важно учитывать типы операндов и их порядок. Допустимы следующие варианты синтаксиса:

    • createdBy = CurrentUser.id;

    • @CurrentUser = @doc.createdBy.

  • @CurrentUser.username — имя текущего пользователя.

Пример
expression: !rql SELECT @CurrentUser.username

В данном RQL-выражении в качестве значения атрибута по умолчанию устанавливается имя текущего пользователя.

Для проверки ролей пользователя используйте функцию hasRole().

Пользовательские псевдонимы (оператор AS)

При описании формата результата могут использоваться различные выражения, включая арифметические операции и встроенные функции. Чтобы использовать результат такого выражения, ему нужно присвоить псевдоним:

Синтаксис
SELECT <expression> AS alias_name

Псевдонимы могут использоваться в операторах связывания JOIN alias_name ON …​, условиях WHERE alias_name…​ и функциях someFunc(alias_name).

Пример использования псевдонима`
SELECT LENGTH(`objectString`) AS len

Здесь результату функции LENGTH() присваивается псевдоним len.

Была ли полезна эта страница?

Обратная связь