[ https://issues.apache.org/jira/browse/CALCITE-5160?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Dmitry Sysolyatin updated CALCITE-5160: --------------------------------------- Summary: ANY/SOME, ALL operators should support collection expressions (was: ANY/SOME, ALL operators should support collection expressions) > ANY/SOME, ALL operators should support collection expressions > ------------------------------------------------------------- > > Key: CALCITE-5160 > URL: https://issues.apache.org/jira/browse/CALCITE-5160 > Project: Calcite > Issue Type: Bug > Components: core > Affects Versions: 1.34.0 > Reporter: Dmitry Sysolyatin > Assignee: Dmitry Sysolyatin > Priority: Major > Labels: pull-request-available > Time Spent: 10m > Remaining Estimate: 0h > > At the moment ANY, SOME functions support subquery: > {code:java} > SELECT 1 = SOME (SELECT * FROM UNNEST(ARRAY[1,2,3])) > {code} > But if input argument is array, then query fails > {code:java} > SELECT 1 = SOME (ARRAY[1,2,3]) > SELECT 1 = SOME(<table>.<array_type_field>) FROM <table> > {code} > > Specification for ANY/SOME [1]: > {code:java} > expression binary_comparison_operator ANY (collection expression) > expression binary_comparison_operator SOME (collection expression) > {code} > The right-hand side is a parenthesized expression, which must yield an > collection value. The left-hand expression is evaluated and compared to each > element of the collection using the given binary comparison operator. The > result of ANY is “true” if any true result is obtained. The result is “false” > if no true result is found. > If the collection expression yields a null collection, the result of ANY will > be null. If the left-hand expression yields null, the result of ANY is > ordinarily null (though a non-strict comparison operator could possibly yield > a different result). Also, if the right-hand collection contains any null > elements and no true comparison result is obtained, the result of ANY will be > null, not false (again, assuming a strict comparison operator). This is in > accordance with SQL's normal rules for Boolean combinations of null values. > SOME is a synonym for ANY. > > Specification for ALL [2]: > {code:java} > expression binary_comparison_operator ALL (collection expression) > {code} > The right-hand side is a parenthesized expression, which must yield an > collection value. The left-hand expression is evaluated and compared to each > element of the collection using the given binary comparison operator. The > result of ALL is “true” if all comparisons yield true. The result is “false” > if any false result is found. > If the array expression yields a null collection, the result of ALL will be > null. If the left-hand expression yields null, the result of ALL is > ordinarily null (though a non-strict comparison operator could possibly yield > a different result). Also, if the right-hand collection contains any null > elements and no false comparison result is obtained, the result of ALL will > be null, not true (again, assuming a strict comparison operator). This is in > accordance with SQL's normal rules for Boolean combinations of null values. > > > [1] > [https://www.postgresql.org/docs/current/functions-comparisons.html#id-1.5.8.30.16] > [2] > [https://www.postgresql.org/docs/current/functions-comparisons.html#id-1.5.8.30.17] -- This message was sent by Atlassian Jira (v8.20.10#820010)