Операторы ========= Все операторы преобразуются в соответствующие функции на этапе парсинга запроса, с учётом их приоритетов и ассоциативности. Далее будут перечислены группы операторов в порядке их приоритета (чем выше, тем раньше оператор связывается со своими аргументами). Операторы доступа ----------------- ``a[N]`` - доступ к элементу массива, функция ``arrayElement(a, N)``. ``a.N`` - доступ к элементу кортежа, функция ``tupleElement(a, N)``. Оператор числового отрицания ---------------------------- ``-a`` - функция ``negate(a)``. Операторы умножения и деления ----------------------------- ``a * b`` - функция ``multiply(a, b)`` ``a / b`` - функция ``divide(a, b)`` ``a % b`` - функция ``modulo(a, b)`` Операторы сложения и вычитания ------------------------------ ``a + b`` - функция ``plus(a, b)`` ``a - b`` - функция ``minus(a, b)`` Операторы сравнения ------------------- ``a = b`` - функция ``equals(a, b)`` ``a == b`` - функция ``equals(a, b)`` ``a != b`` - функция ``notEquals(a, b)`` ``a <> b`` - функция ``notEquals(a, b)`` ``a <= b`` - функция ``lessOrEquals(a, b)`` ``a >= b`` - функция ``greaterOrEquals(a, b)`` ``a < b`` - функция ``less(a, b)`` ``a > b`` - функция ``greater(a, b)`` ``a LIKE s`` - функция ``like(a, b)`` ``a NOT LIKE s`` - функция ``notLike(a, b)`` ``a BETWEEN b AND c`` - равнозначно ``a >= b AND a <= c`` Операторы для работы с множествами ---------------------------------- *Смотрите раздел "Операторы IN".* ``a IN ...`` - функция ``in(a, b)`` ``a NOT IN ...`` - функция ``notIn(a, b)`` ``a GLOBAL IN ...`` - функция ``globalIn(a, b)`` ``a GLOBAL NOT IN ...`` - функция ``globalNotIn(a, b)`` Оператор логического отрицания ------------------------------ ``NOT a`` - функция ``not(a)`` Оператор логического "И". ------------------------- ``a AND b`` - функция ``and(a, b)`` Оператор логического "ИЛИ". --------------------------- ``a OR b`` - функция ``or(a, b)`` Условный оператор ----------------- ``a ? b : c`` - функция ``if(a, b, c)`` Условное выражение ------------------ .. code-block:: sql CASE [x] WHEN a THEN b [WHEN ... THEN ...] ELSE c END В случае указания x - функция transform(x, [a, ...], [b, ...], c). Иначе - multiIf(a, b, ..., c). Оператор склеивания строк ------------------------- ``s1 || s2`` - функция ``concat(s1, s2)`` Оператор создания лямбда-выражения ---------------------------------- ``x -> expr`` - функция ``lambda(x, expr)`` Следующие операторы не имеют приоритета, так как представляют собой скобки: Оператор создания массива ------------------------- ``[x1, ...]`` - функция ``array(x1, ...)`` Оператор создания кортежа ------------------------- ``(x1, x2, ...)`` - функция ``tuple(x2, x2, ...)`` Ассоциативность --------------- Все бинарные операторы имеют левую ассоциативность. Например, ``1 + 2 + 3`` преобразуется в ``plus(plus(1, 2), 3)``. Иногда это работает не так, как ожидается. Например, ``SELECT 4 > 3 > 2`` выдаст 0. Для эффективности, реализованы функции ``and`` и ``or``, принимающие произвольное количество аргументов. Соответствующие цепочки операторов ``AND`` и ``OR``, преобразуются в один вызов этих функций.