Функции общего назначения

Обзор

Функции применяются для построения фильтров на выборку элементов из коллекций через REST-API, а также функциональных значений полей, устанавливающих параметры агрегации.

Построение функции

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

Формат указания функции без параметров:
["FunctionName"]
Пример
["null"]
Формат указания функции c 1 параметром:
["FunctionName",Arg]
Примеры
["toYYYY","2021-12-01T13:08.25.22Z"]
["property","fieldname"]
Формат указания функции c 2 параметрами:
["FunctionName",Arg1,Arg2]
Примеры
["+",3,5]
["or","true","false"]
["like","abc","a*c"]
Формат указания функции c N параметрами:
["FunctionName",Arg1,Arg2,...]
Примеры
["+",3,5,6,8]
["list","a","bb","ccc","ddd"]
["join",", ","first","second","third"]
["like","abc","a*c"]

Построение суперпозиции функций

В качестве любого аргумента может быть задана вложенная функция. Допускается произвольный уровень вложенности.

Примеры
["+",["property","x"],["property","y"]]
["toYYYY",["property","datetime"]]
["like","abc","a*c"]

["and",
  ["or",
    ["==",["property","name"],"abc"],
    ["contains",["property","name"],"qwe"],
    ["in",["property","p"],["list",3,6,9,12]],
  ["==",["rem",["property","value"],10],0]]

Список поддерживаемых функций

  • isnull (arg)

  • isnotnull (arg)

  • not (arg), синонимы: !

  • bool (arg)

  • integer (arg)

  • float (arg)

  • string (arg)

  • uuid (arg)

  • const (arg)

  • lower (arg)

  • upper (arg)

  • year (arg), синонимы: toYYYY, toYear

  • quarter (arg)

  • month (arg)

  • day (arg)

  • hour (arg)

  • minute (arg)

  • second (arg)

  • weekday (arg)

  • toYYYYMM (arg)

  • toYYYYMMDD (arg)

  • concat (…​), синонимы: .

  • join (…​), синонимы: ..

  • list (…​), пример: '["list","a","b","c"]'. Для postgresql преобразуется в ('a','b','c').

  • array (…​), пример: '["list","a","b","c"]'. Для postgresql преобразуется в array['a','b','c'].

  • null ()

  • + (…​), синонимы: add

  • - (arg1, arg2), синонимы: sub

  • * (arg1, arg2), синонимы: mul

  • / (arg1, arg2), синонимы: div

  • // (arg1, arg2), синонимы: ddiv

  • % (arg1, arg2), синонимы: rem

  • && (…​), синонимы: and,

  • || (…​), синонимы: or,

  • == (arg1, arg2), синонимы: equal, equals

  • != (arg1, arg2), синонимы: notequal,notequals,<>

  • > (arg1, arg2), синонимы: greater,

  • >= (arg1, arg2), синонимы: notless, greaterorequal

  • < (arg1, arg2), синонимы: less

  • ⇐ (arg1, arg2), синонимы: notgreater, lessorequal

  • in (arg1, arg2), пример: '["in",["property","role"],["list","role1","role2"]]'

  • inlist (arg1, arg2), пример: '["inlist","admin",["property","roles"]]'

  • hasAny (arg1, arg2), пример: '["hasAny",["property","roles"],["array","role5","role7","role9"]]'

  • hasAll (arg1, arg2), пример: '["hasAll",["property","roles"],["array","role5","role7"]]'

  • contains (arg1, arg2)

  • like (arg1, arg2)

  • interval_in_minutes (arg1, arg2)

  • dateadd (arg1, arg2)

  • datediff (arg1, arg2)

  • between (arg1, arg2, arg3