This is an automated email from the ASF dual-hosted git repository.

dlych pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/asterixdb.git


The following commit(s) were added to refs/heads/master by this push:
     new 7c6e7c0  [NO ISSUE][COMP] Improve error message when function not found
7c6e7c0 is described below

commit 7c6e7c0f38743b926020b403fcc0b30c690a3d35
Author: Dmitry Lychagin <[email protected]>
AuthorDate: Thu Jul 23 10:51:14 2020 -0700

    [NO ISSUE][COMP] Improve error message when function not found
    
    Details:
    - Remove arity from the error message raised when
      the function is not found
    - Also remove "null." prefix from that message if
      the function call did not specify a dataverse
    
    Change-Id: I384ca2af87078e72aab23dccd3651a8edf02a3b4
    Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/7307
    Integration-Tests: Jenkins <[email protected]>
    Tested-by: Jenkins <[email protected]>
    Reviewed-by: Dmitry Lychagin <[email protected]>
    Reviewed-by: Ali Alsuliman <[email protected]>
---
 .../asterix/translator/LangExpressionToPlanTranslator.java |  2 +-
 .../org/apache/asterix/app/translator/QueryTranslator.java |  2 +-
 .../parserts/results_parser_sqlpp/functionDecl1.ast        |  4 ++--
 .../src/test/resources/runtimets/testsuite_sqlpp.xml       | 14 +++++++-------
 .../apache/asterix/common/functions/FunctionSignature.java | 10 +++++++---
 .../org/apache/asterix/lang/common/util/FunctionUtil.java  |  2 +-
 6 files changed, 19 insertions(+), 15 deletions(-)

diff --git 
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/LangExpressionToPlanTranslator.java
 
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/LangExpressionToPlanTranslator.java
index 5cc30f3..eb4bfd4 100644
--- 
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/LangExpressionToPlanTranslator.java
+++ 
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/LangExpressionToPlanTranslator.java
@@ -845,7 +845,7 @@ abstract class LangExpressionToPlanTranslator
         AbstractFunctionCallExpression f = lookupFunction(signature, args, 
sourceLoc);
 
         if (f == null) {
-            throw new CompilationException(ErrorCode.UNKNOWN_FUNCTION, 
sourceLoc, signature.getName());
+            throw new CompilationException(ErrorCode.UNKNOWN_FUNCTION, 
sourceLoc, signature.toString(false));
         }
 
         if (fcall.hasAggregateFilterExpr()) {
diff --git 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java
 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java
index 39d9c48d..95fb793 100644
--- 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java
+++ 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java
@@ -2212,7 +2212,7 @@ public class QueryTranslator extends 
AbstractLangTranslator implements IStatemen
                     MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
                     return false;
                 } else {
-                    throw new CompilationException(ErrorCode.UNKNOWN_FUNCTION, 
sourceLoc, signature);
+                    throw new CompilationException(ErrorCode.UNKNOWN_FUNCTION, 
sourceLoc, signature.toString(false));
                 }
             }
 
diff --git 
a/asterixdb/asterix-app/src/test/resources/parserts/results_parser_sqlpp/functionDecl1.ast
 
b/asterixdb/asterix-app/src/test/resources/parserts/results_parser_sqlpp/functionDecl1.ast
index cc66f0a..43e1b02 100644
--- 
a/asterixdb/asterix-app/src/test/resources/parserts/results_parser_sqlpp/functionDecl1.ast
+++ 
b/asterixdb/asterix-app/src/test/resources/parserts/results_parser_sqlpp/functionDecl1.ast
@@ -52,7 +52,7 @@ FunctionDecl calculate([$events]) {
 
     Let Variable [ Name=$sig_sponsorship_count ]
       :=
-      FunctionCall null.count@1[
+      FunctionCall count@1[
         Variable [ Name=$es ]
       ]
     Let Variable [ Name=$by_chapter ]
@@ -68,7 +68,7 @@ FunctionDecl calculate([$events]) {
           (
             LiteralExpr [STRING] [escount]
             :
-            FunctionCall null.count@1[
+            FunctionCall count@1[
               Variable [ Name=$es ]
             ]
           )
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml 
b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
index 94d0335..7e389dc 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
@@ -3013,7 +3013,7 @@
     <test-case FilePath="array_fun">
       <compilation-unit name="array_slice/array_slice_exception_result">
         <output-dir 
compare="Text">array_slice/array_slice_exception_result</output-dir>
-        <expected-error>ASX1081: Cannot find function with name 
TinySocial.array_slice@0</expected-error>
+        <expected-error>ASX1081: Cannot find function with name 
TinySocial.array_slice</expected-error>
       </compilation-unit>
     </test-case>
     <test-case FilePath="array_fun">
@@ -11692,13 +11692,13 @@
     <test-case FilePath="user-defined-functions">
       <compilation-unit name="bad-function-ddl-5">
         <output-dir compare="Text">bad-function-ddl-5</output-dir>
-        <expected-error>ASX1081: Cannot find function with name 
experiments.function_that_does_not_exist@0</expected-error>
+        <expected-error>ASX1081: Cannot find function with name 
experiments.function_that_does_not_exist</expected-error>
       </compilation-unit>
     </test-case>
     <test-case FilePath="user-defined-functions">
       <compilation-unit name="bad-function-ddl-6">
         <output-dir compare="Text">bad-function-ddl-6</output-dir>
-        <expected-error>ASX1081: Cannot find function with name 
experiments.function_that_does_not_exist@2</expected-error>
+        <expected-error>ASX1081: Cannot find function with name 
experiments.function_that_does_not_exist</expected-error>
       </compilation-unit>
     </test-case>
     <test-case FilePath="user-defined-functions">
@@ -11716,13 +11716,13 @@
     <test-case FilePath="user-defined-functions">
       <compilation-unit name="bad-function-ddl-9">
         <output-dir compare="Text">bad-function-ddl-9</output-dir>
-        <expected-error>ASX1081: Cannot find function with name 
experiments.function_that_does_not_exist@0</expected-error>
+        <expected-error>ASX1081: Cannot find function with name 
experiments.function_that_does_not_exist</expected-error>
       </compilation-unit>
     </test-case>
     <test-case FilePath="user-defined-functions">
       <compilation-unit name="bad-function-ddl-10">
         <output-dir compare="Text">bad-function-ddl-10</output-dir>
-        <expected-error>ASX1081: Cannot find function with name 
experiments.f0@2</expected-error>
+        <expected-error>ASX1081: Cannot find function with name 
experiments.f0</expected-error>
       </compilation-unit>
     </test-case>
     <test-case FilePath="user-defined-functions">
@@ -11823,7 +11823,7 @@
     <test-case FilePath="user-defined-functions">
       <compilation-unit name="query-issue455">
         <output-dir compare="Text">query-issue455</output-dir>
-        <expected-error>ASX1081: Cannot find function with name 
test.printName@0</expected-error>
+        <expected-error>ASX1081: Cannot find function with name 
test.printName</expected-error>
       </compilation-unit>
     </test-case>
     <test-case FilePath="user-defined-functions">
@@ -11991,7 +11991,7 @@
     <test-case FilePath="user-defined-functions">
       <compilation-unit name="f01">
         <output-dir compare="Text">f01</output-dir>
-        <expected-error>ASX1081: Cannot find function with name 
test.tinyint@0</expected-error>
+        <expected-error>ASX1081: Cannot find function with name 
test.tinyint</expected-error>
       </compilation-unit>
     </test-case>
     <!-- This test case is not valid anymore since we do not required 
"IMPORT_PRIVATE_FUNCTIONS" flag anymore -->
diff --git 
a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/functions/FunctionSignature.java
 
b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/functions/FunctionSignature.java
index 9bbf2e7..0771645 100644
--- 
a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/functions/FunctionSignature.java
+++ 
b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/functions/FunctionSignature.java
@@ -61,11 +61,15 @@ public class FunctionSignature implements Serializable {
     }
 
     public String toString(boolean includeArity) {
-        String namespaceCanonicalForm = dataverseName != null ? 
dataverseName.getCanonicalForm() : null;
-        int len = (namespaceCanonicalForm != null ? 
namespaceCanonicalForm.length() : 4) + 1 + name.length()
+        boolean dataverseNameExists = dataverseName != null;
+        String dataverseCanonicalName = dataverseNameExists ? 
dataverseName.getCanonicalForm() : null;
+        int len = (dataverseNameExists ? dataverseCanonicalName.length() + 1 : 
0) + name.length()
                 + (includeArity ? 3 : 0);
         StringBuilder sb = new StringBuilder(len);
-        sb.append(namespaceCanonicalForm).append('.').append(name);
+        if (dataverseNameExists) {
+            sb.append(dataverseCanonicalName).append('.');
+        }
+        sb.append(name);
         if (includeArity) {
             sb.append('@').append(arity);
         }
diff --git 
a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/util/FunctionUtil.java
 
b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/util/FunctionUtil.java
index dee130c..60c1c3d 100644
--- 
a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/util/FunctionUtil.java
+++ 
b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/util/FunctionUtil.java
@@ -166,7 +166,7 @@ public class FunctionUtil {
         }
         FunctionSignature fsBuiltin = builtinFunctionResolver.apply(name, 
arity);
         if (fsBuiltin == null) {
-            throw new CompilationException(ErrorCode.UNKNOWN_FUNCTION, 
sourceLoc, fs);
+            throw new CompilationException(ErrorCode.UNKNOWN_FUNCTION, 
sourceLoc, fs.toString(false));
         }
         return fsBuiltin;
     }

Reply via email to