FORMULA operator
The FORMULA operator creates a property that implements a custom formula.
Syntax
FORMULA [NULL] [className] [syntaxType1] text1, ..., [syntaxTypeN] textN
Description
The FORMULA operator creates a property that executes an arbitrary formula in SQL. It is possible to specify different formulas for different SQL dialects so that these properties are portable between different DBMSs.
This property operator cannot be used inside expressions.
Parameters
-
NULLKeyword specifying that the property being created may return
NULLif all parameter values are non-NULL. If not specified, then the property must be defined so that for non-NULLparameters it will always return a non-NULLvalue (failure to fulfill this condition may lead to unpredictable results) -
classNameThe name of the builtin class of the value returned by the property. If not specified, the resulting class is considered to be the common ancestor of all property operands.
-
syntaxType1, ..., syntaxTypeNKeywords defining SQL dialect types. The following types are currently supported:
PG- PostgreSQL syntaxMS- MS SQL Server syntax
If the dialect type is not specified explicitly, then the corresponding formula text is set as the default text. Each of the types (or the lack of a type) must appear in the operator no more than once.
-
text1, ..., textNString literals, each of which contains a formula in SQL syntax. The notation
$1,$2etc. is used to pass property parameters to the formula, where the number denotes the property parameter number. Parameter numbers start from1. The number of parameters in the created property will be equal to the maximum parameter number specified in the description of the formula.
Examples
// a property with two parameters: a rounded number and the number of decimal places
round(number, digits) = FORMULA 'round(CAST(($1) as numeric),$2)';
// a property that converts the value passed as an argument to a 15-character string.
toString15(str) = FORMULA BPSTRING[15] 'CAST($1 AS character(15))';
// a property with two different implementations for different SQL dialects
jumpWorkdays = FORMULA NULL DATE PG 'jumpWorkdays($1, $2, $3)', MS 'dbo.jumpWorkdays($1, $2, $3)';