[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 <jenkins@fulliautomatix.ics.uci.edu>
Tested-by: Jenkins <jenkins@fulliautomatix.ics.uci.edu>
Reviewed-by: Dmitry Lychagin <dmitry.lychagin@couchbase.com>
Reviewed-by: Ali Alsuliman <ali.al.solaiman@gmail.com>
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 @@
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 @@
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 @@
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 @@
(
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 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 @@
}
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;
}