[ 
https://issues.apache.org/jira/browse/CALCITE-5160?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Dmitry Sysolyatin updated CALCITE-5160:
---------------------------------------
    Description: 
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]

  was:
At the moment ANY, SOME functions support subquery:
{code}
SELECT 1 = SOME (SELECT * FROM UNNEST(ARRAY[1,2,3]))
{code}

But if input argument is array, then query fails
{code}
SELECT 1 = SOME (ARRAY[1,2,3])
SELECT 1 = SOME(<table>.<array_type_field>) FROM <table>
{code}
[https://www.postgresql.org/docs/current/functions-comparisons.html#id-1.5.8.30.16]

It is useful for checking if a value exists in an array.


> 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
>            Reporter: Dmitry Sysolyatin
>            Assignee: Dmitry Sysolyatin
>            Priority: Major
>              Labels: pull-request-available
>
> 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)

Reply via email to