2017-03-12 17:58:51 +00:00
Операторы
=========
В с е операторы преобразуются в соответствующие функции на этапе парсинга запроса, с учётом их приоритетов и ассоциативности.
Далее будут перечислены группы операторов в порядке их приоритета (чем выше, тем раньше оператор связывается с о своими аргументами).
Операторы доступа
-----------------
`` 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) ``
Следующие операторы не имеют приоритета, так как представляют собой скобки:
Оператор создания массива
2017-06-13 04:15:47 +00:00
-------------------------
2017-03-12 17:58:51 +00:00
`` [x1, ...] `` - функция `` array(x1, ...) ``
Оператор создания кортежа
-------------------------
`` (x1, x2, ...) `` - функция `` tuple(x2, x2, ...) ``
Ассоциативность
2017-06-13 04:15:47 +00:00
---------------
2017-03-12 17:58:51 +00:00
В с е бинарные операторы имеют левую ассоциативность. Например, `` 1 + 2 + 3 `` преобразуется в `` plus(plus(1, 2), 3) `` .
Иногда это работает не так, как ожидается. Например, `` SELECT 4 > 3 > 2 `` выдаст 0.
Для эффективности, реализованы функции `` and `` и `` or `` , принимающие произвольное количество аргументов. Соответствующие цепочки операторов `` AND `` и `` OR `` , преобразуются в один вызов этих функций.