[ 
https://issues.apache.org/jira/browse/CALCITE-6069?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17778817#comment-17778817
 ] 

Ran Tao edited comment on CALCITE-6069 at 10/23/23 8:34 PM:
------------------------------------------------------------

Frankly speaking, even if you give the correct method signature and the user 
uses it according to your method signature, it still won't work. Because 
ARRAY_JOIN in your example is a function of the Spark Library and is not 
enabled by default. 
see: 
https://github.com/apache/calcite/blob/c83ac69111fd9e75af5e3615af29a72284667a4a/core/src/main/java/org/apache/calcite/sql/fun/SqlLibraryOperators.java#L1193C28-L1193C28

Therefore, calcite cannot lookup more information. In fact, when spark is 
activated, its error message is "Invalid number of arguments to function 
'ARRAY_JOIN'. Was expecting 2 arguments"". 

think about this case:

{code:java}
Flink SQL> select array_aaa();
[ERROR] Could not execute SQL statement. Reason:
org.apache.calcite.sql.validate.SqlValidatorException: No match found for 
function signature array_aaa()
{code}




was (Author: lemonjing):
Frankly speaking, even if you give the correct method signature and the user 
uses it according to your method signature, it still won't work. Because 
ARRAY_JOIN in your example is a function of the Spark Library and is not 
enabled by default. Therefore, calcite cannot lookup more information. In fact, 
when spark is activated, its error message is "Invalid number of arguments to 
function 'ARRAY_JOIN'. Was expecting 2 arguments"". 

> Matching function without arguments are reported as UKNOWN function
> -------------------------------------------------------------------
>
>                 Key: CALCITE-6069
>                 URL: https://issues.apache.org/jira/browse/CALCITE-6069
>             Project: Calcite
>          Issue Type: Improvement
>            Reporter: Bonnie Varghese
>            Priority: Major
>
> In Flink, when I run a function without arguments I get the following error:
> {code:java}
> Flink SQL> SELECT ARRAY_JOIN(); [ERROR] Could not execute SQL statement. 
> Reason: org.apache.calcite.sql.validate.SqlValidatorException: No match found 
> for function signature ARRAY_JOIN{code}
> The function (handleUnresolvedFunction) 
> [https://github.com/apache/calcite/blob/main/core/src/main/java/org/apache/calcite/sql/validate/SqlValidatorImpl.java#L1982]
>  only deals with Invalid number of arguments and rest is classified as 
> Unknown functions.
> However, if the validation can report it as a No match found for function 
> signature and the expected signatures, it can help getting started with 
> functions without going to read the documentation.
> So, the proposal is to add a new CalciteException for No Function 
> Match(validatorNoMatchFunction) similar to validatorUnknownFunction  
> [https://github.com/apache/calcite/blob/main/core/src/main/java/org/apache/calcite/runtime/CalciteResource.java#L141]
>  and use that to improve the error message as follows:
> Suggested improved error message:
> {code:java}
> Flink SQL> SELECT ARRAY_JOIN();
> [ERROR] Could not execute SQL statement. Reason:
> org.apache.calcite.sql.validate.SqlValidatorException: No match found for 
> function signature ARRAY_JOIN().
> Supported signatures are:
> ARRAY_JOIN(ARRAY<STRING>, <CHARACTER_STRING>)
> ARRAY_JOIN(ARRAY<STRING>, <CHARACTER_STRING>, <CHARACTER_STRING>){code}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to