Перейти к основному содержимому
Версия: 2.0.x

Лямбда-выражения

Лямбда-выражения — это анонимные функции, которые можно передавать в качестве параметров в функции высшего порядка SQL. Лямбда-выражения позволяют разрабатывать более краткий, элегантный и расширяемый код.

Лямбда-выражения записываются с помощью оператора ->, который читается как "переходит к". Слева от -> располагаются входные параметры (если есть), а справа — выражение.

Начиная с версии 2.5, Selena поддерживает использование лямбда-выражений в следующих функциях высшего порядка SQL: array_map(), array_filter(), array_sum() и array_sortby().

Синтаксис​

parameter -> expression

Параметры​

  • parameter: входные параметры для лямбда-выражения, которые могут принимать ноль, один или несколько параметров. Два или более входных параметра заключаются в круглые скобки.

  • expression: простое выражение, которое ссылается на parameter. Выражение должно быть допустимым для входных параметров.

Возвращаемое значение​

Тип возвращаемого значения определяется типом результата expression.

Примечания по использованию​

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

  • Подзапросы не поддерживаются, например, x -> 5 + (SELECT 3).
  • Агрегатные функции не поддерживаются, например, x -> min(y).
  • Оконные функции не поддерживаются.
  • Табличные функции не поддерживаются.
  • Коррелированные столбцы не могут встречаться в лямбда-функциях.

Примеры​

Простые примеры лямбда-выражений:

-- Не принимает параметров и возвращает 5.
() -> 5
-- Принимает x и возвращает значение (x + 2).
x -> x + 2
-- Принимает x и y и возвращает их сумму.
(x, y) -> x + y
-- Принимает x и применяет функцию к x.
x -> COALESCE(x, 0)
x -> day(x)
x -> split(x,",")
x -> if(x>0,"positive","negative")

Пример использования лямбда-выражений в функциях высшего порядка:

select array_map((x,y,z) -> x + y, [1], [2], [4]);
+----------------------------------------------+
| array_map((x, y, z) -> x + y, [1], [2], [4]) |
+----------------------------------------------+
| [3] |
+----------------------------------------------+
1 row in set (0.01 sec)