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

Пользовательская формула (FORMULA)

Оператор пользовательской формулы позволяет создавать свойство, вычисляющее некоторую формулу на языке SQL. При этом, можно задавать различные реализации формулы для различных SQL серверов. Формула задается в виде строки, внутри которой для обращения к параметру используется спецсимвол $ и номер этого параметра (начиная с 1). Соответственно, количество параметров у полученного свойства будет равно максимальному из номеров использованных параметров.

Использовать оператор рекомендуется, только если задачу невозможно решить при помощи других операторов, а также если гарантированно известно, какие конкретно SQL сервера могут быть использованы, или используемые синтаксические конструкции соответствуют одному из последних стандартов SQL.

Определение класса результата

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

Язык

Для объявления свойства с помощью пользовательской формулы используется оператор FORMULA.

Примеры

// свойство с двумя параметрами: округляемым числом и количеством знаков после запятой
round(number, digits) = FORMULA 'round(CAST(($1) as numeric),$2)';

// свойство, преобразовывающее значение, переданное в качестве аргумента, к строковому типу длиной в 15 символов.
toString15(str) = FORMULA BPSTRING[15] 'CAST($1 AS character(15))';

// свойство с двумя различными реализациями для разных диалектов SQL
jumpWorkdays = FORMULA NULL DATE PG 'jumpWorkdays($1, $2, $3)', MS 'dbo.jumpWorkdays($1, $2, $3)';