criteria AND|OR criteria
Criteria
Criteria can be any of the following items:
-
Predicates that evaluate to true or false.
-
Logical criteria that combine criteria (AND, OR, NOT).
-
A value expression of type Boolean.
NOT criteria
(criteria)
expression (=|<>|!=|<|>|<=|>=) (expression|((ANY|ALL|SOME) subquery|(array_expression)))
expression IS [NOT] DISTINCT FROM expression
IS DISTINCT FROM
considers null values to be equivalent and never produces an UNKNOWN value.
Note
|
Because the optimizer is not tuned to handle IS DISTINCT FROM , if you use it in a join predicate that is not pushed down,
the resulting plan does not perform as well a regular comparison.
|
expression [NOT] IS NULL
expression [NOT] IN (expression [,expression]*)|subquery
expression [NOT] LIKE pattern [ESCAPE char]
LIKE
matches the string expression against the given string pattern.
The pattern may contain %
to match any number of characters, and to match any single character.
The escape character can be used to escape the match characters
%
and .
expression [NOT] SIMILAR TO pattern [ESCAPE char]
SIMILAR TO
is a cross between LIKE and standard regular expression syntax. %
and _
are still used, rather than .*
and .
, respectively.
Note
|
Teiid does not exhaustively validate SIMILAR TO pattern values.
Instead, the pattern is converted to an equivalent regular expression.
Do not rely on general regular expression features when using SIMILAR TO .
If additional features are needed, use LIKE_REGEX .
Avoid the use of non-literal patterns, because pushdown support is limited.
|
expression [NOT] LIKE_REGEX pattern
You can use LIKE_REGEX
with standard regular expression syntax for matching.
This differs from SIMILAR TO
and LIKE
in that the escape character is no longer used.
\
is already the standard escape mechanism in regular expressions, and %`
and _
have no special meaning.
The runtime engine uses the JRE implementation of regular expressions.
For more information, see the java.util.regex.Pattern class.
Note
|
Teiid does not exhaustively validate LIKE_REGEX pattern values.
It is possible to use JRE-only regular expression features that are not specified by the SQL specification.
Additionally, not all sources support the same regular expression flavor or extensions.
In pushdown situations, be careful to ensure that the pattern that you use has the same meaning in Teiid,
and across all applicable sources.
|
EXISTS (subquery)
expression [NOT] BETWEEN minExpression AND maxExpression
Teiid converts BETWEEN
into the equivalent form expression >= minExpression AND expression ⇐ maxExpression
.
expression
Where expression
has type Boolean.
-
The precedence ordering from lowest to highest is comparison, NOT, AND, OR.
-
Criteria nested by parenthesis will be logically evaluated prior to evaluating the parent criteria.
Some examples of valid criteria are:
-
(balance > 2500.0)
-
100*(50 - x)/(25 - y) > z
-
concat(areaCode,concat('-',phone)) LIKE '314%1'
Tip
|
Comparing null values
Null values represent an unknown value. Comparison with a null value will evaluate to unknown , which can never be true even if not is used.
|
Teiid parses and evaluates conditions with higher precedence before those with lower precedence. Conditions with equal precedence are left-associative. The following table lists condition precedence from high to low:
Condition | Description |
---|---|
SQL operators |
See Expressions |
EXISTS, LIKE, SIMILAR TO, LIKE_REGEX, BETWEEN, IN, IS NULL, IS DISTINCT, <, ⇐, >, >=, =, <> |
Comparison |
NOT |
Negation |
AND |
Conjunction |
OR |
Disjunction |
Note
|
To prevent lookaheads, the parser does not accept all possible criteria sequences.
For example, a = b is null is not accepted, because by the left-associative parsing we first recognize a = ,
then look for a common value expression.
b is null is not a valid common value expression.
Thus, nesting must be used, for example, (a = b) is null .
For more information about parsing rules, see BNF for SQL grammar.
|