The language supports set operators, logical operators, and value operators.
Set operators combine two set expressions or two transforms in different ways:
The union
operator combines all the elements of two sets. The following
transform will return all method calls or field references to members of a class:
set CallOrRefTransform to ( calls to methods in ) union ( references to fields in )
The intersection
operator creates a set containing only those elements that appear in both
operand sets. The following set expression will return calls to a class that come from methods in the class:
( calls to intersection calls from ) methods in class "ObjectDB"
The without
operator creates a set containing only those elements in the first operand
set that do not also exist in the second operand set. This operation is sometimes referred to as "difference".
The following set expression will return calls to class that come from methods outside the class:
( calls to without calls from ) methods in class "ObjectDB"
The deintersection
operator creates a set containing only those elements that appear
in one of the operand sets that don't appear in both operand sets. This operation is sometimes referred to as "symmetric difference".
Logical operators let you combine filters into different filters.
The and
operator results in a filter that passes a value only
if it passes both operand filters.
The or
operator results in a filter that passes a value if either
of the operand filters pass the value.
The xor
operator results in a filter that passes a value if either
of the operand filters, but not both, pass the value.
The not
operator applies to a single filter and
changes its sense, so that it rejects values it would pass and passes values
it would reject.
There are two kinds of operators that work only with value expressions: relational operators and value operators.
BBQ supports relational operators that compare two value expressions; the result of
the comparison is a filter. The =
and !=
operators can compare any value expression type;
the relational operators < <= >= >
can only compare values of type integer,
string, or date.
There is an additional relational operator ~=
that produces a filter by
matching a string value
with a second string value interpreted as a Java regular expression. The following set expression
looks for strings that match "select", regardless of case:
to string ~= //(?i)select/ all strings
Value operators combine two value expressions into a single value expression.
BBQ currently defines only one value operator, &
.
This operator concatenates two string-type expressions.
browse-by-query home | antlersoft free software | sourceforge project page |