Details
Description
Support quantified comparison predicates (SOME, ANY, ALL), per the SQL standard.
<comp op> ::=
<equals operator>
 <not equals operator>
 <less than operator>
 <greater than operator>
 <less than or equals operator>
 <greater than or equals operator><quantifier> ::=
<all>
 <some><all> ::= ALL
<some> ::=
SOME
 ANYThe result of “R <comp op> <quantifier> T” is derived by the application of the implied <comparison predicate> “R <comp op> RT” to every row RT in T.
Case:
 a) If T is empty or if the implied <comparison predicate> is True for every row RT in T, then “R <comp op> <all> T” is True.
 b) If the implied <comparison predicate> is False for at least one row RT in T, then “R <comp op> <all> T” is False.
 c) If the implied <comparison predicate> is True for at least one row RT in T, then “R <comp op> <some> T” is True.
 d) If T is empty or if the implied <comparison predicate> is False for every row RT in T, then “R <comp op> <some> T” is False.
 e) If “R <comp op> <quantifier> T” is neither True nor False, then it is Unknown.
Issue Links
 is depended upon by

CALCITE530 Phoenix support
 Open
Activity
 All
 Comments
 Work Log
 History
 Activity
 Transitions
Fixed in http://gitwipus.apache.org/repos/asf/calcite/commit/f4746523.
The fix is nullsafe (i.e. returns unknown, as required by the standard, in certain situations where the subquery returns null values) and could be made a bit more efficient if certain columns have NOT NULL constraints (we could make do with one count rather than two, because the counts will always be the same).