Оператор FORMULA
Оператор FORMULA - создание свойства, реализующего пользовательскую формулу.
Синтаксис
FORMULA [NULL] [className] [syntaxType1] text1, ..., [syntaxTypeN] textN
Описание
Оператор FORMULA создает свойство, выполняющее произвольную формулу на языке SQL. При этом есть возможность задать формулу отдельно для различных диалектов SQL, для того, чтобы эти свойства были переносимы между различными СУБД.
Этот оператор-свойство не может использоваться внутри выражений.
Параметры
-
NULLКлючевое слово, указывающее на то, что создаваемое свойство может возвращать
NULL, если все значения параметров не равныNULL. Если оно не указано, то свойство должно быть определено так, чтобы для неNULLпараметров всегда возвращать неNULLзначение (невыполнение этого условия может привести к непредсказуемым результатам) -
classNameИмя встроенного класса возвращаемого свойством значения. Если не задано, результирующим классом считается общий предок всех операндов свойства.
-
syntaxType1, ..., syntaxTypeNКлючевые слова, определяющие типы диалектов SQL. На данный момент поддерживаются следующие типы:
PG- синтаксис PostgreSQLMS- синтаксис MS SQL Server
Если тип диалекта не задан явно, то соответствующий текст формулы устанавливается, как текст по умолчанию. Каждый из типов (или отсутствие типа) должен встречаться в операторе не более одного раза.
-
text1, ..., textNСтроковые литералы, каждый из которых содержит формулу в SQL синтаксисе. Для передачи параметров свойства в формулу используется обозначения
$1,$2и т.д., где число обозначает номер параметра свойства. Номера параметров начинаются с единицы. Количество параметров в создаваемом свойстве будет равняться максимальному номеру параметра, указанному в описании формулы.
Примеры
// свойство с двумя параметрами: округляемым числом и количеством знаков после запятой
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)';