Операторы и функции сравнения для работы с объектами доменов
В данном разделе описаны конструкции, используемые в условиях, а также комбинирование условий RQL-выражений при настройке правил данных и политик доступа.
|
В данном разделе при описании RQL-выражений приняты следующие соглашения:
|
Для конструкций описана как форма операторов SQL, так и функциональный стиль:
-
В основном выражении могут использоваться и операторы, и функции.
-
Во вложенных запросах, CTE и функциях соединения все операции должны быть выражены в виде функций.
Операторы и функции равенства и вхождения во множество
| Оператор | Функция | Описание |
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
| Для проверки того, что массив содержит указанные элементы, используйте функции поиска в массиве. |
Работа с операторами IN и NOT IN
Для работы с операторами IN и NOT IN используйте выражение с формированием массива функцией ARRAY() и преобразованием массива в коллекцию функцией UNNEST():
IN!rql <attribute> IN SELECT(UNNEST(ARRAY(<a1>, <a2>[, ...])))
Здесь:
-
<attribute>— атрибут, значение которого должно принадлежать к множеству; -
<a1>,<a2>…<aN>— элементы множества.
Пример
constraint: !rql iocType IS NULL OR iocType IN SELECT(UNNEST(ARRAY(@enumIocTypes.Account, @enumIocTypes.File)))
Данное RQL-выражение проверяет, что значение атрибута iocType либо отсутствует, либо входит в заданное множество, следующим образом:
-
Формируется массив допустимых значений из значений атрибута-перечисления
enumIocTypesс помощью функцииARRAY(). -
Массив преобразуется в коллекцию значений функцией
UNNEST(). -
Происходит обращение к коллекции с помощью функции
SELECT().
Операторы и функции сравнения с шаблоном
Операторы и функции сравнения с шаблоном используются со строковыми типами данных.
| В основном запросе | Во вложенном выражении | Описание |
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Шаблон сравнения
Шаблон может включать обычные символы и следующие метасимволы:
-
%— обозначает любое количество произвольных символов или отсутствие символов. -
_— обозначает один произвольный символ. -
\— используется для экранирования символов%,_и\.
Регулярные выражения
Регулярные выражения предоставляют более мощные средства поиска по шаблонам. В RQL поддерживаются POSIX-совместимые регулярные выражения.
Примеры
condition: !rql commonName LIKE '%менеджер%'
Правило с данным условием применяется, если значение поля commonName содержит подстроку "менеджер". Перед подстрокой и после нее может быть любое количество других символов или они могут отсутствовать.
condition: !rql field LIKE '100\%%'
Правило с данным условием применяется, если значение поля field начинается с подстроки "100%".
Операторы и функции сравнения порядка и нахождения в диапазоне
Операторы и функции сравнения порядка и нахождения в диапазоне используются с числовыми типами и датами.
| Оператор | Функция | Описание |
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
При проверке того, что значение выходит за пределы заданного диапазона, оператор Условие для проверки нахождения вне диапазона
|
Операторы и функции проверки на отсутствующее значение (IS NULL)
| Оператор | Функция | Описание |
|---|---|---|
|
|
Значение |
|
|
Значение |
|
При описании правил данных важно учитывать, что значение атрибута равно |
Примеры
condition: !rql catMac IS NULL OR catMac != '94:35:36:c5:71:01'
При данном условии правило применяется:
-
Если значение атрибута
catMacне задано. -
Если значение атрибут
catMacзаполнено и не равно 94:35:36:c5:71:01.
condition: !rql attributesVariable IS NOT NULL AND attributesVariable != ''
При данном условии правило применяется, если значение атрибута attributesVariable не NULL и не пустая строка.
Комбинирование условий (логические операторы и функции)
Совмещение нескольких условий происходит с использованием следующих операторов и функций:
| Оператор | Функция | Описание |
|---|---|---|
|
|
Конъюнкция ("И") |
|
|
Дизъюнкция ("ИЛИ") |
|
|
Логическое отрицание ("НЕ") |
Пример выражения с комбинированным условием
organizationName LIKE 'n%' AND LENGTH(raw) > 10
Данное RQL-выражение возвращает записи, у которых значения в поле organizationName начинаются с символа n, а количество символов в поле raw превышает 10.
Использование конструкции ANY()
Конструкция ANY() проверяет, что условие выполняется хотя бы для одного элемента массива. Если типы значения и элементов массива не совпадают, необходимо использовать функцию CAST().
ANY(<array>)
Здесь:
-
<array>— массив значений.
Пример
condition: !rql ip = ANY(CAST(ARRAY('192.168.1.10', '10.0.0.5', '172.16.0.1'), 'inet[]'))
В данном RQL-выражении задается условие применения правила:
-
Формируется массив строковых значений с помощью функции
ARRAY(). -
Массив строк приводится к типу массива IP-адресов (
inet[]) функциейCAST(). -
Значение атрибута
ipсравнивается с элементами массива конструкциейANY().
Таким образом, условие считается выполненным, если значение атрибута ip совпадает хотя бы с одним из указанных IP-адресов.
Была ли полезна эта страница?