EQL allows users to write sets directly in queries.
The syntax of the set constructor is:
{<expr1> [,<expr2>]*}
where the curly braces enclose a comma-separated list of one or
more expressions.
For example, this is an integer set:
{ 1, 4, 7, 10 }
while this is a string set:
{ 'Red', 'White', 'Merlot', 'Chardonnay' }
Keep the following in mind when using set constructors:
- Set constructors may
appear anywhere in a query where an expression is legal. (Because set
constructors have a set type, you will get an EQL checking error if you use a
set constructor in a context that expects an atomic value.)
- The individual elements of
the set constructor may be arbitrary expressions, as long as they have the
correct type. For instance, you may write the following as long as x, y, and z
are integers:
{ x, y + z, 3 }
- All of the expressions
within the curly braces must have the same type. For example, you cannot mix
integers and strings.
- Empty set constructors are
not allowed; there must be at least one expression within the curly braces.
Note that EQL promotes integers to doubles in a set constructor as
needed. Therefore, writing
{1, 2} results in an
mdex:long-set type while
{1, 2.5} results in an
mdex:double-set type.
Set constructor examples
In this first example, the
SELECT clause constructs a string-type set (named
selectWines) that contains 'Red' and 'White' as its two elements. The
selectWines set is then used in a
HAVING clause to limit the returned records to those
have WineType assignments of either 'Red' or 'White'.
RETURN results AS
SELECT
{'Red', 'White'} AS selectWines,
WineID AS idRec,
WineType AS wines,
Body AS bodyAttr
FROM WineState
HAVING wines IN selectWines
ORDER BY idRec
This second example is similar to the first example, except that the
set is used in a
WHERE clause:
RETURN results AS
SELECT
WineID AS idRec,
WineType AS wines,
Body AS bodyAttr
FROM WineState
WHERE WineType IN {'Red', 'White'}
ORDER BY idRec
Both queries would return only records with a WineType of 'Red' or
'White'.