[NO ISSUE][COMP] Support SQL++ varargs UDFs
- user model changes: yes
- storage format changes: no
- interface changes: no
Details:
- Support SQL++ user defined functions with
variable number of arguments
- Add testcases
Change-Id: Icd4257c77d33d69f0018424922b2e8112b8d7eed
Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/8803
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: Ian Maxon <imaxon@uci.edu>
Reviewed-by: Ali Alsuliman <ali.al.solaiman@gmail.com>
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 ec43870..607e23a 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
@@ -207,6 +207,7 @@
import org.apache.hyracks.algebricks.common.utils.Pair;
import org.apache.hyracks.algebricks.common.utils.Triple;
import org.apache.hyracks.algebricks.core.algebra.expressions.AbstractFunctionCallExpression.FunctionKind;
+import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
import org.apache.hyracks.algebricks.data.IAWriterFactory;
import org.apache.hyracks.algebricks.data.IResultSerializerFactoryProvider;
import org.apache.hyracks.algebricks.runtime.serializer.ResultSerializerFactoryProvider;
@@ -2040,6 +2041,10 @@
Map<TypeSignature, Datatype> newInlineTypes;
Function function;
if (cfs.isExternal()) {
+ if (functionSignature.getArity() == FunctionIdentifier.VARARGS) {
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, cfs.getSourceLocation(),
+ "Variable number of parameters is not supported for external functions");
+ }
List<Pair<VarIdentifier, TypeExpression>> paramList = cfs.getParameters();
int paramCount = paramList.size();
List<String> paramNames = new ArrayList<>(paramCount);
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-5/drop-dependency.5.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-library/bad-ext-function-ddl-1/bad-ext-function-ddl-1.1.ddl.sqlpp
similarity index 65%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-5/drop-dependency.5.ddl.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-library/bad-ext-function-ddl-1/bad-ext-function-ddl-1.1.ddl.sqlpp
index f301fc6..76cc70d 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-5/drop-dependency.5.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-library/bad-ext-function-ddl-1/bad-ext-function-ddl-1.1.ddl.sqlpp
@@ -1,5 +1,5 @@
/*
- * Licensed to the Apache Software Foundation (ASF) under A
+ * Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
@@ -16,23 +16,5 @@
* specific language governing permissions and limitations
* under the License.
*/
-
-/*
- * Description : Try to drop a functional dependency
- * Expected Res : Error
- */
-
-drop dataverse B if exists;
-drop dataverse C if exists;
-create dataverse C;
-use C;
-
-create function f1(message, text){
- contains(message,text)
-};
-
-create function f0(message, text){
- C.f1(message,text)
-};
-
-drop function f1(message, text);
\ No newline at end of file
+DROP DATAVERSE externallibtest if exists;
+CREATE DATAVERSE externallibtest;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-5/drop-dependency.5.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-library/bad-ext-function-ddl-1/bad-ext-function-ddl-1.2.lib.sqlpp
similarity index 65%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-5/drop-dependency.5.ddl.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-library/bad-ext-function-ddl-1/bad-ext-function-ddl-1.2.lib.sqlpp
index f301fc6..3dc6eb6 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-5/drop-dependency.5.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-library/bad-ext-function-ddl-1/bad-ext-function-ddl-1.2.lib.sqlpp
@@ -1,5 +1,5 @@
/*
- * Licensed to the Apache Software Foundation (ASF) under A
+ * Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
@@ -16,23 +16,4 @@
* specific language governing permissions and limitations
* under the License.
*/
-
-/*
- * Description : Try to drop a functional dependency
- * Expected Res : Error
- */
-
-drop dataverse B if exists;
-drop dataverse C if exists;
-create dataverse C;
-use C;
-
-create function f1(message, text){
- contains(message,text)
-};
-
-create function f0(message, text){
- C.f1(message,text)
-};
-
-drop function f1(message, text);
\ No newline at end of file
+install externallibtest testlib admin admin target/data/externallib/asterix-external-data-testlib.zip
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-5/drop-dependency.5.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-library/bad-ext-function-ddl-1/bad-ext-function-ddl-1.3.ddl.sqlpp
similarity index 66%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-5/drop-dependency.5.ddl.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-library/bad-ext-function-ddl-1/bad-ext-function-ddl-1.3.ddl.sqlpp
index f301fc6..dd90769 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-5/drop-dependency.5.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/external-library/bad-ext-function-ddl-1/bad-ext-function-ddl-1.3.ddl.sqlpp
@@ -1,5 +1,5 @@
/*
- * Licensed to the Apache Software Foundation (ASF) under A
+ * Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
@@ -18,21 +18,8 @@
*/
/*
- * Description : Try to drop a functional dependency
- * Expected Res : Error
+ * Error: External varargs functions are not yet supported
*/
-drop dataverse B if exists;
-drop dataverse C if exists;
-create dataverse C;
-use C;
-
-create function f1(message, text){
- contains(message,text)
-};
-
-create function f0(message, text){
- C.f1(message,text)
-};
-
-drop function f1(message, text);
\ No newline at end of file
+create function externallibtest.f(...)
+ as "org.apache.asterix.external.library.OpenCapitalFinderFactory" at testlib;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/bad-function-ddl-1/bad-function-ddl-1.1.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/bad-function-ddl-1/bad-function-ddl-1.1.ddl.sqlpp
index 36eed22..bd20a74 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/bad-function-ddl-1/bad-function-ddl-1.1.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/bad-function-ddl-1/bad-function-ddl-1.1.ddl.sqlpp
@@ -18,7 +18,7 @@
*/
/*
- * Description : Declare a UDF on a dataset that does not exist
+ * Description : Declare a non-varargs UDF on a dataset that does not exist
* Expected Res : Error
*/
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-5/drop-dependency.5.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/bad-function-ddl-1/bad-function-ddl-1.2.ddl.sqlpp
similarity index 65%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-5/drop-dependency.5.ddl.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/bad-function-ddl-1/bad-function-ddl-1.2.ddl.sqlpp
index f301fc6..c4b5967 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-5/drop-dependency.5.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/bad-function-ddl-1/bad-function-ddl-1.2.ddl.sqlpp
@@ -1,5 +1,5 @@
/*
- * Licensed to the Apache Software Foundation (ASF) under A
+ * Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
@@ -18,21 +18,17 @@
*/
/*
- * Description : Try to drop a functional dependency
+ * Description : Declare a varargs UDF on a dataset that does not exist
* Expected Res : Error
*/
-drop dataverse B if exists;
-drop dataverse C if exists;
-create dataverse C;
-use C;
+drop dataverse experiments2 if exists;
+create dataverse experiments2;
+use experiments2;
-create function f1(message, text){
- contains(message,text)
+create function bad_function2(...) {
+ (select m.message_text
+ from TweetMessages2 m
+ where contains(m.message_text,args[1])
+ and spatial_intersect(m.sender_location, args[0]))
};
-
-create function f0(message, text){
- C.f1(message,text)
-};
-
-drop function f1(message, text);
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-5/drop-dependency.5.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/bad-function-ddl-11/bad-function-ddl-11.3.ddl.sqlpp
similarity index 68%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-5/drop-dependency.5.ddl.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/bad-function-ddl-11/bad-function-ddl-11.3.ddl.sqlpp
index f301fc6..6f92b84 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-5/drop-dependency.5.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/bad-function-ddl-11/bad-function-ddl-11.3.ddl.sqlpp
@@ -1,5 +1,5 @@
/*
- * Licensed to the Apache Software Foundation (ASF) under A
+ * Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
@@ -18,21 +18,14 @@
*/
/*
- * Description : Try to drop a functional dependency
+ * Description : Return type definition is prohibited for inline varargs functions
* Expected Res : Error
*/
-drop dataverse B if exists;
-drop dataverse C if exists;
-create dataverse C;
-use C;
+drop dataverse experiments3 if exists;
+create dataverse experiments3;
+use experiments3;
-create function f1(message, text){
- contains(message,text)
-};
-
-create function f0(message, text){
- C.f1(message,text)
-};
-
-drop function f1(message, text);
\ No newline at end of file
+create function myfn003(...) returns string {
+ args[0]
+};
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/bad-function-ddl-5/bad-function-ddl-5.1.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/bad-function-ddl-5/bad-function-ddl-5.1.ddl.sqlpp
index f3b0c0f..5418988 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/bad-function-ddl-5/bad-function-ddl-5.1.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/bad-function-ddl-5/bad-function-ddl-5.1.ddl.sqlpp
@@ -18,7 +18,7 @@
*/
/*
- * Description : Declare a UDF that uses a function that does not exist
+ * Description : Declare a non-varargs UDF that uses a function that does not exist
* Expected Res : Error
*/
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-5/drop-dependency.5.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/bad-function-ddl-5/bad-function-ddl-5.2.ddl.sqlpp
similarity index 68%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-5/drop-dependency.5.ddl.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/bad-function-ddl-5/bad-function-ddl-5.2.ddl.sqlpp
index f301fc6..59ea86c 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-5/drop-dependency.5.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/bad-function-ddl-5/bad-function-ddl-5.2.ddl.sqlpp
@@ -1,5 +1,5 @@
/*
- * Licensed to the Apache Software Foundation (ASF) under A
+ * Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
@@ -18,21 +18,15 @@
*/
/*
- * Description : Try to drop a functional dependency
+ * Description : Declare a varargs UDF that uses a function that does not exist
* Expected Res : Error
*/
-drop dataverse B if exists;
-drop dataverse C if exists;
-create dataverse C;
-use C;
+drop dataverse experiments2 if exists;
+create dataverse experiments2;
+use experiments2;
-create function f1(message, text){
- contains(message,text)
-};
-create function f0(message, text){
- C.f1(message,text)
-};
-
-drop function f1(message, text);
\ No newline at end of file
+create function bad_function2(...) {
+ function_that_does_not_exist()
+};
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-5/drop-dependency.5.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/check-dependencies-1/check-dependencies-1.4.ddl.sqlpp
similarity index 64%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-5/drop-dependency.5.ddl.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/check-dependencies-1/check-dependencies-1.4.ddl.sqlpp
index f301fc6..0fe609b 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-5/drop-dependency.5.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/check-dependencies-1/check-dependencies-1.4.ddl.sqlpp
@@ -16,23 +16,36 @@
* specific language governing permissions and limitations
* under the License.
*/
-
/*
- * Description : Try to drop a functional dependency
- * Expected Res : Error
+ * Description : Verify Function Dependency Metadata for vararg functions
+ * Expected Res : Success
*/
-drop dataverse B if exists;
-drop dataverse C if exists;
-create dataverse C;
-use C;
+drop dataverse X if exists;
+drop dataverse Y if exists;
+create dataverse X;
+create dataverse Y;
-create function f1(message, text){
- contains(message,text)
+use X;
+
+create function fx1(a) {
+ upper(a)
};
-create function f0(message, text){
- C.f1(message,text)
+create function fx2(...) {
+ string_join(args, ".")
};
-drop function f1(message, text);
\ No newline at end of file
+create function fx3(a, b, c) {
+ fx1(a) || fx2(b, c)
+};
+
+use Y;
+
+create function fy1(a) {
+ lower(a)
+};
+
+create function fy3(a, b, c) {
+ fy1(a) || X.fx2(b, c)
+};
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-5/drop-dependency.5.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/check-dependencies-1/check-dependencies-1.5.query.sqlpp
similarity index 71%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-5/drop-dependency.5.ddl.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/check-dependencies-1/check-dependencies-1.5.query.sqlpp
index f301fc6..8f6fac0 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-5/drop-dependency.5.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/check-dependencies-1/check-dependencies-1.5.query.sqlpp
@@ -16,23 +16,11 @@
* specific language governing permissions and limitations
* under the License.
*/
-
/*
- * Description : Try to drop a functional dependency
- * Expected Res : Error
+ * Description : Verify Function Dependency Metadata
+ * Expected Res : Success
*/
-drop dataverse B if exists;
-drop dataverse C if exists;
-create dataverse C;
-use C;
-
-create function f1(message, text){
- contains(message,text)
-};
-
-create function f0(message, text){
- C.f1(message,text)
-};
-
-drop function f1(message, text);
\ No newline at end of file
+select f.DataverseName,f.Name,f.Dependencies from Metadata.`Function` f
+where f.DataverseName in ["X", "Y"]
+order by f.DataverseName, f.Name, f.Arity;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-5/drop-dependency.5.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/check-dependencies-1/check-dependencies-1.6.ddl.sqlpp
similarity index 70%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-5/drop-dependency.5.ddl.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/check-dependencies-1/check-dependencies-1.6.ddl.sqlpp
index f301fc6..c033635 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-5/drop-dependency.5.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/check-dependencies-1/check-dependencies-1.6.ddl.sqlpp
@@ -17,22 +17,5 @@
* under the License.
*/
-/*
- * Description : Try to drop a functional dependency
- * Expected Res : Error
- */
-
-drop dataverse B if exists;
-drop dataverse C if exists;
-create dataverse C;
-use C;
-
-create function f1(message, text){
- contains(message,text)
-};
-
-create function f0(message, text){
- C.f1(message,text)
-};
-
-drop function f1(message, text);
\ No newline at end of file
+drop dataverse Y if exists;
+drop dataverse X if exists;
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/create-or-replace-function-1/create-or-replace-function-1.1.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/create-or-replace-function-1/create-or-replace-function-1.1.ddl.sqlpp
index c111196..5f380f6 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/create-or-replace-function-1/create-or-replace-function-1.1.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/create-or-replace-function-1/create-or-replace-function-1.1.ddl.sqlpp
@@ -30,12 +30,50 @@
a + b
};
-/* Replace an existing function */
+/* Replaces an existing function */
create or replace function f1(a, b) {
a - b
};
-/* Create new function */
+/* Creates new function */
create or replace function f2(a, b) {
a * b
};
+
+/* Test varargs functions */
+
+create function f3(...) {
+ string_join(args, ".")
+};
+
+/* Replaces an existing function */
+create or replace function f3(...) {
+ string_join(args, ",")
+};
+
+/* Creates new function */
+create or replace function f4(...) {
+ string_join(args, "/")
+};
+
+/* Overloading. cannot replace varargs function with non-varargs and vice-versa */
+
+/* Creates new non-varargs function */
+create or replace function f5(a) {
+ upper(a)
+};
+
+/* Creates new varargs function (overloading) */
+create or replace function f5(...) {
+ string_join(args, ".")
+};
+
+/* Creates new varargs function */
+create or replace function f6(...) {
+ string_join(args, ",")
+};
+
+/* Creates new non-varargs function */
+create or replace function f6(a) {
+ lower(a)
+};
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/create-or-replace-function-1/create-or-replace-function-1.2.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/create-or-replace-function-1/create-or-replace-function-1.2.query.sqlpp
index 8e6c136..5cd97bf 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/create-or-replace-function-1/create-or-replace-function-1.2.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/create-or-replace-function-1/create-or-replace-function-1.2.query.sqlpp
@@ -21,5 +21,11 @@
{
"f1": f1(5, 2),
- "f2": f2(5, 2)
+ "f2": f2(5, 2),
+ "f3": f3("a", "b"),
+ "f4": f4("c", "d"),
+ "f5_1": f5("e"),
+ "f5_va": f5("f", "g"),
+ "f6_1": f6("H"),
+ "f6_va": f6("i", "j")
}
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/create-or-replace-function-1/create-or-replace-function-1.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/create-or-replace-function-1/create-or-replace-function-1.3.query.sqlpp
index 7a19fc3..66bd77c 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/create-or-replace-function-1/create-or-replace-function-1.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/create-or-replace-function-1/create-or-replace-function-1.3.query.sqlpp
@@ -17,8 +17,6 @@
* under the License.
*/
-use test;
-
select f.Name, f.`Definition`
from Metadata.`Function` f
-order by f.Name;
\ No newline at end of file
+order by f.Name, f.Arity;
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-1/drop-dependency.1.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-1/drop-dependency-1.1.ddl.sqlpp
similarity index 100%
rename from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-1/drop-dependency.1.ddl.sqlpp
rename to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-1/drop-dependency-1.1.ddl.sqlpp
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-3/drop-dependency.3.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-1/drop-dependency-1.2.ddl.sqlpp
similarity index 79%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-3/drop-dependency.3.ddl.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-1/drop-dependency-1.2.ddl.sqlpp
index 8e09034..dd9b50b 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-3/drop-dependency.3.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-1/drop-dependency-1.2.ddl.sqlpp
@@ -18,7 +18,8 @@
*/
/*
- * Description : Try to drop a functional dependency
+ * Description : Try to drop a function dependency.
+ * Non-varargs function uses varargs function.
* Expected Res : Error
*/
@@ -26,17 +27,17 @@
drop dataverse C if exists;
create dataverse B;
create dataverse C;
+
use C;
-create function f1(message, text){
- contains(message,text)
+create function f2(...) {
+ contains(args[0], args[1])
};
use B;
-create function f0(message, text){
- C.f1(message,text)
+create function f3(message, text) {
+ C.f2(message, text)
};
-use C;
-drop function f1(message, text);
\ No newline at end of file
+drop dataverse C;
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-3/drop-dependency.3.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-1/drop-dependency-1.3.ddl.sqlpp
similarity index 79%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-3/drop-dependency.3.ddl.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-1/drop-dependency-1.3.ddl.sqlpp
index 8e09034..e99450e 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-3/drop-dependency.3.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-1/drop-dependency-1.3.ddl.sqlpp
@@ -18,7 +18,8 @@
*/
/*
- * Description : Try to drop a functional dependency
+ * Description : Try to drop a function dependency.
+ * Varargs function uses non-varargs function.
* Expected Res : Error
*/
@@ -26,17 +27,17 @@
drop dataverse C if exists;
create dataverse B;
create dataverse C;
+
use C;
-create function f1(message, text){
- contains(message,text)
+create function f4(message, text) {
+ contains(message, text)
};
use B;
-create function f0(message, text){
- C.f1(message,text)
+create function f5(...) {
+ C.f4(args[0], args[1])
};
-use C;
-drop function f1(message, text);
\ No newline at end of file
+drop dataverse C;
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-3/drop-dependency.3.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-1/drop-dependency-1.4.ddl.sqlpp
similarity index 79%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-3/drop-dependency.3.ddl.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-1/drop-dependency-1.4.ddl.sqlpp
index 8e09034..5c333c4 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-3/drop-dependency.3.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-1/drop-dependency-1.4.ddl.sqlpp
@@ -18,7 +18,8 @@
*/
/*
- * Description : Try to drop a functional dependency
+ * Description : Try to drop a function dependency.
+ * Varargs function uses varargs function
* Expected Res : Error
*/
@@ -26,17 +27,17 @@
drop dataverse C if exists;
create dataverse B;
create dataverse C;
+
use C;
-create function f1(message, text){
- contains(message,text)
+create function f6(...) {
+ contains(args[0], args[1])
};
use B;
-create function f0(message, text){
- C.f1(message,text)
+create function f7(...) {
+ C.f6(args[0], args[1])
};
-use C;
-drop function f1(message, text);
\ No newline at end of file
+drop dataverse C;
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-2/drop-dependency.2.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-2/drop-dependency-2.1.ddl.sqlpp
similarity index 95%
rename from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-2/drop-dependency.2.ddl.sqlpp
rename to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-2/drop-dependency-2.1.ddl.sqlpp
index 53debdf..a5d42bc 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-2/drop-dependency.2.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-2/drop-dependency-2.1.ddl.sqlpp
@@ -41,10 +41,6 @@
create dataset TweetMessages(TweetMessageType)
primary key tweetid autogenerated;
-create function f1(message, text){
- contains(message,text)
-};
-
use B;
create function f2(place, text){
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-2/drop-dependency.2.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-2/drop-dependency-2.2.ddl.sqlpp
similarity index 89%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-2/drop-dependency.2.ddl.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-2/drop-dependency-2.2.ddl.sqlpp
index 53debdf..762bb2d 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-2/drop-dependency.2.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-2/drop-dependency-2.2.ddl.sqlpp
@@ -41,15 +41,12 @@
create dataset TweetMessages(TweetMessageType)
primary key tweetid autogenerated;
-create function f1(message, text){
- contains(message,text)
-};
-
use B;
-create function f2(place, text){
- (select m.message_text
- from C.TweetMessages m)
+create function f3(...) {
+ select message_text
+ from C.TweetMessages m
+ where contains(message_text, args[0])
};
drop dataverse C;
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-3/drop-dependency.3.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-3/drop-dependency-3.1.ddl.sqlpp
similarity index 87%
rename from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-3/drop-dependency.3.ddl.sqlpp
rename to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-3/drop-dependency-3.1.ddl.sqlpp
index 8e09034..7ab3a2b 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-3/drop-dependency.3.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-3/drop-dependency-3.1.ddl.sqlpp
@@ -23,20 +23,17 @@
*/
drop dataverse B if exists;
-drop dataverse C if exists;
create dataverse B;
-create dataverse C;
-use C;
-create function f1(message, text){
+drop dataverse C if exists;
+create dataverse C;
+
+create function C.f1(message, text) {
contains(message,text)
};
-use B;
-
-create function f0(message, text){
- C.f1(message,text)
+create function B.f0(message, text) {
+ C.f1(message, text)
};
-use C;
-drop function f1(message, text);
\ No newline at end of file
+drop function C.f1(message, text);
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-3/drop-dependency.3.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-3/drop-dependency-3.2.ddl.sqlpp
similarity index 82%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-3/drop-dependency.3.ddl.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-3/drop-dependency-3.2.ddl.sqlpp
index 8e09034..ca7c74d 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-3/drop-dependency.3.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-3/drop-dependency-3.2.ddl.sqlpp
@@ -19,24 +19,22 @@
/*
* Description : Try to drop a functional dependency
+ * : Non-varargs function uses varargs function.
* Expected Res : Error
*/
drop dataverse B if exists;
-drop dataverse C if exists;
create dataverse B;
+
+drop dataverse C if exists;
create dataverse C;
-use C;
-create function f1(message, text){
- contains(message,text)
+create function C.f3(...) {
+ contains(args[0], args[1])
};
-use B;
-
-create function f0(message, text){
- C.f1(message,text)
+create function B.f2(message, text) {
+ C.f3(message, text)
};
-use C;
-drop function f1(message, text);
\ No newline at end of file
+drop function C.f3(...);
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-3/drop-dependency.3.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-3/drop-dependency-3.3.ddl.sqlpp
similarity index 82%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-3/drop-dependency.3.ddl.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-3/drop-dependency-3.3.ddl.sqlpp
index 8e09034..1017f65 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-3/drop-dependency.3.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-3/drop-dependency-3.3.ddl.sqlpp
@@ -19,24 +19,22 @@
/*
* Description : Try to drop a functional dependency
+ * : Varargs function uses non-varargs function.
* Expected Res : Error
*/
drop dataverse B if exists;
-drop dataverse C if exists;
create dataverse B;
+
+drop dataverse C if exists;
create dataverse C;
-use C;
-create function f1(message, text){
- contains(message,text)
+create function C.f5(message, text) {
+ contains(message, text)
};
-use B;
-
-create function f0(message, text){
- C.f1(message,text)
+create function B.f4(...) {
+ C.f5(args[0], args[1])
};
-use C;
-drop function f1(message, text);
\ No newline at end of file
+drop function C.f5(message, text);
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-3/drop-dependency.3.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-3/drop-dependency-3.4.ddl.sqlpp
similarity index 83%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-3/drop-dependency.3.ddl.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-3/drop-dependency-3.4.ddl.sqlpp
index 8e09034..a98cc89 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-3/drop-dependency.3.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-3/drop-dependency-3.4.ddl.sqlpp
@@ -19,24 +19,22 @@
/*
* Description : Try to drop a functional dependency
+ * : Varargs function uses varargs function.
* Expected Res : Error
*/
drop dataverse B if exists;
-drop dataverse C if exists;
create dataverse B;
+
+drop dataverse C if exists;
create dataverse C;
-use C;
-create function f1(message, text){
- contains(message,text)
+create function C.f7(...) {
+ contains(args[0], args[1])
};
-use B;
-
-create function f0(message, text){
- C.f1(message,text)
+create function B.f6(...) {
+ C.f7(args[0], args[1])
};
-use C;
-drop function f1(message, text);
\ No newline at end of file
+drop function C.f7(...);
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-4/drop-dependency.4.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-4/drop-dependency-4.1.ddl.sqlpp
similarity index 94%
rename from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-4/drop-dependency.4.ddl.sqlpp
rename to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-4/drop-dependency-4.1.ddl.sqlpp
index c972efc..b2fbfe4 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-4/drop-dependency.4.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-4/drop-dependency-4.1.ddl.sqlpp
@@ -19,6 +19,7 @@
/*
* Description : Try to drop a functional dependency
+ * Drop a dataset that is used by a non-varargs function
* Expected Res : Error
*/
@@ -41,10 +42,6 @@
create dataset TweetMessages(TweetMessageType)
primary key tweetid autogenerated;
-create function f1(message, text){
- contains(message,text)
-};
-
use B;
create function f2(place, text){
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-4/drop-dependency.4.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-4/drop-dependency-4.2.ddl.sqlpp
similarity index 93%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-4/drop-dependency.4.ddl.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-4/drop-dependency-4.2.ddl.sqlpp
index c972efc..bbe10a6 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-4/drop-dependency.4.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-4/drop-dependency-4.2.ddl.sqlpp
@@ -19,6 +19,7 @@
/*
* Description : Try to drop a functional dependency
+ * Drop a dataset that is used by a varargs function
* Expected Res : Error
*/
@@ -41,13 +42,9 @@
create dataset TweetMessages(TweetMessageType)
primary key tweetid autogenerated;
-create function f1(message, text){
- contains(message,text)
-};
-
use B;
-create function f2(place, text){
+create function f2(...){
(select m.message_text
from C.TweetMessages m)
};
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-5/drop-dependency.5.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-5/drop-dependency-5.1.ddl.sqlpp
similarity index 92%
rename from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-5/drop-dependency.5.ddl.sqlpp
rename to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-5/drop-dependency-5.1.ddl.sqlpp
index f301fc6..2a059dd 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-5/drop-dependency.5.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-5/drop-dependency-5.1.ddl.sqlpp
@@ -19,10 +19,10 @@
/*
* Description : Try to drop a functional dependency
+ * Drop a non-varargs function that is used by a non-varargs function
* Expected Res : Error
*/
-drop dataverse B if exists;
drop dataverse C if exists;
create dataverse C;
use C;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-5/drop-dependency.5.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-5/drop-dependency-5.2.ddl.sqlpp
similarity index 88%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-5/drop-dependency.5.ddl.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-5/drop-dependency-5.2.ddl.sqlpp
index f301fc6..ab80b88 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-5/drop-dependency.5.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-5/drop-dependency-5.2.ddl.sqlpp
@@ -19,10 +19,10 @@
/*
* Description : Try to drop a functional dependency
+ * Drop a non-varargs function that is used by a varargs function
* Expected Res : Error
*/
-drop dataverse B if exists;
drop dataverse C if exists;
create dataverse C;
use C;
@@ -31,8 +31,8 @@
contains(message,text)
};
-create function f0(message, text){
- C.f1(message,text)
+create function f0(...){
+ C.f1(args[0],args[1])
};
drop function f1(message, text);
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-5/drop-dependency.5.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-5/drop-dependency-5.3.ddl.sqlpp
similarity index 86%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-5/drop-dependency.5.ddl.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-5/drop-dependency-5.3.ddl.sqlpp
index f301fc6..e88cbe9 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-5/drop-dependency.5.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-5/drop-dependency-5.3.ddl.sqlpp
@@ -19,20 +19,20 @@
/*
* Description : Try to drop a functional dependency
+ * Drop a varargs function that is used by a non-varargs function
* Expected Res : Error
*/
-drop dataverse B if exists;
drop dataverse C if exists;
create dataverse C;
use C;
-create function f1(message, text){
- contains(message,text)
+create function f1(...){
+ contains(args[0],args[1])
};
create function f0(message, text){
C.f1(message,text)
};
-drop function f1(message, text);
\ No newline at end of file
+drop function f1(...);
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-5/drop-dependency.5.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-5/drop-dependency-5.4.ddl.sqlpp
similarity index 82%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-5/drop-dependency.5.ddl.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-5/drop-dependency-5.4.ddl.sqlpp
index f301fc6..1ed188e 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-5/drop-dependency.5.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-5/drop-dependency-5.4.ddl.sqlpp
@@ -19,20 +19,20 @@
/*
* Description : Try to drop a functional dependency
+ * Drop a varargs function that is used by a varargs function
* Expected Res : Error
*/
-drop dataverse B if exists;
drop dataverse C if exists;
create dataverse C;
use C;
-create function f1(message, text){
- contains(message,text)
+create function f1(...){
+ contains(args[0],args[1])
};
-create function f0(message, text){
- C.f1(message,text)
+create function f0(...){
+ C.f1(args[0], args[1])
};
-drop function f1(message, text);
\ No newline at end of file
+drop function f1(...);
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-6/drop-dependency.6.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-6/drop-dependency-6.1.ddl.sqlpp
similarity index 91%
rename from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-6/drop-dependency.6.ddl.sqlpp
rename to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-6/drop-dependency-6.1.ddl.sqlpp
index 3ab7b6f..9892317 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-6/drop-dependency.6.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-6/drop-dependency-6.1.ddl.sqlpp
@@ -19,10 +19,11 @@
/*
* Description : Try to drop a functional dependency
+ * Drop a dataset that is used by a non-varargs function
+ * from the same dataverse
* Expected Res : Error
*/
-drop dataverse B if exists;
drop dataverse C if exists;
create dataverse C;
use C;
@@ -40,10 +41,6 @@
create dataset TweetMessages(TweetMessageType)
primary key tweetid autogenerated;
-create function f1(message, text){
- contains(message,text)
-};
-
create function f2(place, text){
(select m.message_text
from C.TweetMessages m)
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-6/drop-dependency.6.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-6/drop-dependency-6.2.ddl.sqlpp
similarity index 90%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-6/drop-dependency.6.ddl.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-6/drop-dependency-6.2.ddl.sqlpp
index 3ab7b6f..17904ee 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-6/drop-dependency.6.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-6/drop-dependency-6.2.ddl.sqlpp
@@ -19,10 +19,11 @@
/*
* Description : Try to drop a functional dependency
+ * Drop a dataset that is used by a varargs function
+ * from the same dataverse
* Expected Res : Error
*/
-drop dataverse B if exists;
drop dataverse C if exists;
create dataverse C;
use C;
@@ -40,11 +41,7 @@
create dataset TweetMessages(TweetMessageType)
primary key tweetid autogenerated;
-create function f1(message, text){
- contains(message,text)
-};
-
-create function f2(place, text){
+create function f2(...){
(select m.message_text
from C.TweetMessages m)
};
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-function-1/drop-function-1.1.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-function-1/drop-function-1.1.ddl.sqlpp
index be5e07d..4080786 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-function-1/drop-function-1.1.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-function-1/drop-function-1.1.ddl.sqlpp
@@ -29,3 +29,7 @@
create function my_sum(a, b) {
a + b
};
+
+create function my_sum_va(...) {
+ array_sum(args)
+};
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-function-1/drop-function-1.2.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-function-1/drop-function-1.2.query.sqlpp
index 0f0de1a..abe6a60 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-function-1/drop-function-1.2.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-function-1/drop-function-1.2.query.sqlpp
@@ -19,4 +19,7 @@
use experiments;
-my_sum(2, 3);
\ No newline at end of file
+{
+ "t1": my_sum(2, 3),
+ "t2": my_sum_va(4, 5)
+}
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-function-1/drop-function-1.3.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-function-1/drop-function-1.3.ddl.sqlpp
index 7023e16..d17f290 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-function-1/drop-function-1.3.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-function-1/drop-function-1.3.ddl.sqlpp
@@ -17,4 +17,6 @@
* under the License.
*/
-drop function experiments.my_sum(a, b);
\ No newline at end of file
+drop function experiments.my_sum(a, b);
+
+drop function experiments.my_sum_va(...);
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-5/drop-dependency.5.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-function-1/drop-function-1.5.query.sqlpp
similarity index 66%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-5/drop-dependency.5.ddl.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-function-1/drop-function-1.5.query.sqlpp
index f301fc6..21cac79 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-5/drop-dependency.5.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-function-1/drop-function-1.5.query.sqlpp
@@ -1,5 +1,5 @@
/*
- * Licensed to the Apache Software Foundation (ASF) under A
+ * Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
@@ -18,21 +18,10 @@
*/
/*
- * Description : Try to drop a functional dependency
- * Expected Res : Error
+ * Description : Error. Unknown function with varargs
+ * Expected Res : Failure
*/
-drop dataverse B if exists;
-drop dataverse C if exists;
-create dataverse C;
-use C;
+use experiments;
-create function f1(message, text){
- contains(message,text)
-};
-
-create function f0(message, text){
- C.f1(message,text)
-};
-
-drop function f1(message, text);
\ No newline at end of file
+my_sum_va(2, 3);
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/udf32_metadata/udf32_metadata.1.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/udf32_metadata/udf32_metadata.1.ddl.sqlpp
index 8392e6c3..58d4001 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/udf32_metadata/udf32_metadata.1.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/udf32_metadata/udf32_metadata.1.ddl.sqlpp
@@ -31,4 +31,26 @@
create function myfn003(a, b) {
a + b
+};
+
+create function myfn004(...) {
+ args
+};
+
+/* Test function overloading */
+
+create function myfn005(a) {
+ a
+};
+
+create function myfn005(a, b) {
+ a + b
+};
+
+create function myfn006(a) {
+ a
+};
+
+create function myfn006(...) {
+ args
};
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/udf32_metadata/udf32_metadata.2.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/udf32_metadata/udf32_metadata.2.query.sqlpp
index bef3e8e..010ea82 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/udf32_metadata/udf32_metadata.2.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/udf32_metadata/udf32_metadata.2.query.sqlpp
@@ -20,8 +20,4 @@
SELECT object_remove(fn, "Timestamp") as fn
FROM Metadata.`Function` fn
WHERE fn.DataverseName = "test"
-UNION ALL
-SELECT object_remove(dt, "Timestamp") as dt
-FROM Metadata.`Datatype` dt
-WHERE dt.DataverseName = "test"
-ORDER BY dt.DatatypeName, fn.Name;
\ No newline at end of file
+ORDER BY fn.Name, fn.Arity;
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-5/drop-dependency.5.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/udf32_metadata/udf32_metadata.3.ddl.sqlpp
similarity index 66%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-5/drop-dependency.5.ddl.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/udf32_metadata/udf32_metadata.3.ddl.sqlpp
index f301fc6..7a422ff 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-5/drop-dependency.5.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/udf32_metadata/udf32_metadata.3.ddl.sqlpp
@@ -1,5 +1,5 @@
/*
- * Licensed to the Apache Software Foundation (ASF) under A
+ * Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
@@ -17,22 +17,22 @@
* under the License.
*/
-/*
- * Description : Try to drop a functional dependency
- * Expected Res : Error
- */
+use test;
-drop dataverse B if exists;
-drop dataverse C if exists;
-create dataverse C;
-use C;
+drop function myfn001();
-create function f1(message, text){
- contains(message,text)
-};
+drop function myfn002(a);
-create function f0(message, text){
- C.f1(message,text)
-};
+drop function myfn003(a, b);
-drop function f1(message, text);
\ No newline at end of file
+drop function myfn004(...);
+
+--- overloading
+
+drop function myfn005(a);
+
+drop function myfn005(a, b);
+
+drop function myfn006(a);
+
+drop function myfn006(...);
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-5/drop-dependency.5.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/udf32_metadata/udf32_metadata.4.query.sqlpp
similarity index 65%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-5/drop-dependency.5.ddl.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/udf32_metadata/udf32_metadata.4.query.sqlpp
index f301fc6..f932300 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-5/drop-dependency.5.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/udf32_metadata/udf32_metadata.4.query.sqlpp
@@ -1,5 +1,5 @@
/*
- * Licensed to the Apache Software Foundation (ASF) under A
+ * Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
@@ -17,22 +17,6 @@
* under the License.
*/
-/*
- * Description : Try to drop a functional dependency
- * Expected Res : Error
- */
-
-drop dataverse B if exists;
-drop dataverse C if exists;
-create dataverse C;
-use C;
-
-create function f1(message, text){
- contains(message,text)
-};
-
-create function f0(message, text){
- C.f1(message,text)
-};
-
-drop function f1(message, text);
\ No newline at end of file
+SELECT VALUE COUNT(*)
+FROM Metadata.`Function`
+WHERE fn.DataverseName = "test"
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/udf33_overloading/udf33_overloading.1.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/udf33_overloading/udf33_overloading.1.ddl.sqlpp
index 670922d..6464fa1 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/udf33_overloading/udf33_overloading.1.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/udf33_overloading/udf33_overloading.1.ddl.sqlpp
@@ -32,4 +32,12 @@
create function myfn(a, b) {
a + b
+};
+
+create function myfn2(a) {
+ -a
+};
+
+create function myfn2(...) {
+ array_length(args)
};
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-5/drop-dependency.5.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/udf33_overloading/udf33_overloading.3.query.sqlpp
similarity index 66%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-5/drop-dependency.5.ddl.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/udf33_overloading/udf33_overloading.3.query.sqlpp
index f301fc6..2bf7a91 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-5/drop-dependency.5.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/udf33_overloading/udf33_overloading.3.query.sqlpp
@@ -1,5 +1,5 @@
/*
- * Licensed to the Apache Software Foundation (ASF) under A
+ * Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
@@ -18,21 +18,15 @@
*/
/*
- * Description : Try to drop a functional dependency
- * Expected Res : Error
+ * Description : Function overloading is allowed.
+ * Non-varags function takes precedence over varargs function
+ * Expected Res : Success
*/
-drop dataverse B if exists;
-drop dataverse C if exists;
-create dataverse C;
-use C;
+use experiments;
-create function f1(message, text){
- contains(message,text)
-};
-
-create function f0(message, text){
- C.f1(message,text)
-};
-
-drop function f1(message, text);
\ No newline at end of file
+{
+ "myfn2_0": myfn2(), --- varargs fn
+ "myfn2_1": myfn2(1), --- non-varags fn
+ "myfn2_2": myfn2(1,2) --- varargs fun
+}
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/udf35_varargs_misc/udf35_varargs_misc.1.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/udf35_varargs_misc/udf35_varargs_misc.1.ddl.sqlpp
new file mode 100644
index 0000000..0398430
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/udf35_varargs_misc/udf35_varargs_misc.1.ddl.sqlpp
@@ -0,0 +1,64 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Description : Miscellaneous tests for varargs functions
+ * Expected Res : Success
+ */
+
+drop dataverse test if exists;
+create dataverse test;
+
+use test;
+
+create type FacebookUserType as open {
+ id : bigint
+};
+
+create dataset FacebookUsers(FacebookUserType) primary key id;
+
+-----
+
+create function f1(...) {
+ "const"
+};
+
+create function f2(...) {
+ string_join(args, "|")
+};
+
+create function f3(...) {
+ string_join(args, "|") || "||" || string_join(args, "|||")
+};
+
+create function f4(...) {
+ f3(args[0], args[1]) || "," || f3(args[2], args[3])
+};
+
+create function f5(...) {
+ select
+ case
+ when is_string(v) then "string"
+ when is_number(v) then "number"
+ when is_object(v) then "object"
+ when (is_array(v) or is_multiset(v)) then "list"
+ end as t
+ from args as v
+ order by v
+};
+
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-5/drop-dependency.5.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/udf35_varargs_misc/udf35_varargs_misc.2.update.sqlpp
similarity index 66%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-5/drop-dependency.5.ddl.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/udf35_varargs_misc/udf35_varargs_misc.2.update.sqlpp
index f301fc6..a69c0ef 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-5/drop-dependency.5.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/udf35_varargs_misc/udf35_varargs_misc.2.update.sqlpp
@@ -1,5 +1,5 @@
/*
- * Licensed to the Apache Software Foundation (ASF) under A
+ * Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
@@ -16,23 +16,11 @@
* specific language governing permissions and limitations
* under the License.
*/
-
/*
- * Description : Try to drop a functional dependency
- * Expected Res : Error
+ * Description : Miscellaneous tests for varargs functions
+ * Expected Res : Success
*/
-drop dataverse B if exists;
-drop dataverse C if exists;
-create dataverse C;
-use C;
+use test;
-create function f1(message, text){
- contains(message,text)
-};
-
-create function f0(message, text){
- C.f1(message,text)
-};
-
-drop function f1(message, text);
\ No newline at end of file
+load dataset FacebookUsers using localfs ((`path`=`asterix_nc1://data/tinysocial/fbu.adm`),(`format`=`adm`));
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-5/drop-dependency.5.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/udf35_varargs_misc/udf35_varargs_misc.3.query.sqlpp
similarity index 66%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-5/drop-dependency.5.ddl.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/udf35_varargs_misc/udf35_varargs_misc.3.query.sqlpp
index f301fc6..a96ecdf 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-5/drop-dependency.5.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/udf35_varargs_misc/udf35_varargs_misc.3.query.sqlpp
@@ -1,5 +1,5 @@
/*
- * Licensed to the Apache Software Foundation (ASF) under A
+ * Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
@@ -16,23 +16,13 @@
* specific language governing permissions and limitations
* under the License.
*/
-
/*
- * Description : Try to drop a functional dependency
- * Expected Res : Error
+ * Description : Miscellaneous tests for varargs functions
+ * Expected Res : Success
*/
-drop dataverse B if exists;
-drop dataverse C if exists;
-create dataverse C;
-use C;
+use test;
-create function f1(message, text){
- contains(message,text)
-};
-
-create function f0(message, text){
- C.f1(message,text)
-};
-
-drop function f1(message, text);
\ No newline at end of file
+select id, f1() f1_0, f1(name) f1_1, f1(name, alias) f1_2
+from FacebookUsers fbu
+order by id;
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-5/drop-dependency.5.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/udf35_varargs_misc/udf35_varargs_misc.4.query.sqlpp
similarity index 66%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-5/drop-dependency.5.ddl.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/udf35_varargs_misc/udf35_varargs_misc.4.query.sqlpp
index f301fc6..3229ee4 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-5/drop-dependency.5.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/udf35_varargs_misc/udf35_varargs_misc.4.query.sqlpp
@@ -1,5 +1,5 @@
/*
- * Licensed to the Apache Software Foundation (ASF) under A
+ * Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
@@ -16,23 +16,13 @@
* specific language governing permissions and limitations
* under the License.
*/
-
/*
- * Description : Try to drop a functional dependency
- * Expected Res : Error
+ * Description : Miscellaneous tests for varargs functions
+ * Expected Res : Success
*/
-drop dataverse B if exists;
-drop dataverse C if exists;
-create dataverse C;
-use C;
+use test;
-create function f1(message, text){
- contains(message,text)
-};
-
-create function f0(message, text){
- C.f1(message,text)
-};
-
-drop function f1(message, text);
\ No newline at end of file
+select id, f2() f2_0, f2(name) f2_1, f2(name, alias) f2_2
+from FacebookUsers fbu
+order by id;
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-5/drop-dependency.5.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/udf35_varargs_misc/udf35_varargs_misc.5.query.sqlpp
similarity index 66%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-5/drop-dependency.5.ddl.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/udf35_varargs_misc/udf35_varargs_misc.5.query.sqlpp
index f301fc6..3f728da 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-5/drop-dependency.5.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/udf35_varargs_misc/udf35_varargs_misc.5.query.sqlpp
@@ -1,5 +1,5 @@
/*
- * Licensed to the Apache Software Foundation (ASF) under A
+ * Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
@@ -16,23 +16,13 @@
* specific language governing permissions and limitations
* under the License.
*/
-
/*
- * Description : Try to drop a functional dependency
- * Expected Res : Error
+ * Description : Miscellaneous tests for varargs functions
+ * Expected Res : Success
*/
-drop dataverse B if exists;
-drop dataverse C if exists;
-create dataverse C;
-use C;
+use test;
-create function f1(message, text){
- contains(message,text)
-};
-
-create function f0(message, text){
- C.f1(message,text)
-};
-
-drop function f1(message, text);
\ No newline at end of file
+select id, f3() f3_0, f3(name) f3_1, f3(name, alias) f3_2
+from FacebookUsers fbu
+order by id;
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-5/drop-dependency.5.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/udf35_varargs_misc/udf35_varargs_misc.6.query.sqlpp
similarity index 66%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-5/drop-dependency.5.ddl.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/udf35_varargs_misc/udf35_varargs_misc.6.query.sqlpp
index f301fc6..94e0007 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-5/drop-dependency.5.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/udf35_varargs_misc/udf35_varargs_misc.6.query.sqlpp
@@ -1,5 +1,5 @@
/*
- * Licensed to the Apache Software Foundation (ASF) under A
+ * Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
@@ -16,23 +16,13 @@
* specific language governing permissions and limitations
* under the License.
*/
-
/*
- * Description : Try to drop a functional dependency
- * Expected Res : Error
+ * Description : Miscellaneous tests for varargs functions
+ * Expected Res : Success
*/
-drop dataverse B if exists;
-drop dataverse C if exists;
-create dataverse C;
-use C;
+use test;
-create function f1(message, text){
- contains(message,text)
-};
-
-create function f0(message, text){
- C.f1(message,text)
-};
-
-drop function f1(message, text);
\ No newline at end of file
+select id, f4(lower(name), lower(alias), upper(name), upper(alias)) f4_4
+from FacebookUsers fbu
+order by id;
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-5/drop-dependency.5.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/udf35_varargs_misc/udf35_varargs_misc.7.query.sqlpp
similarity index 66%
copy from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-5/drop-dependency.5.ddl.sqlpp
copy to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/udf35_varargs_misc/udf35_varargs_misc.7.query.sqlpp
index f301fc6..d2443b3 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/drop-dependency-5/drop-dependency.5.ddl.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/user-defined-functions/udf35_varargs_misc/udf35_varargs_misc.7.query.sqlpp
@@ -1,5 +1,5 @@
/*
- * Licensed to the Apache Software Foundation (ASF) under A
+ * Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
@@ -16,23 +16,13 @@
* specific language governing permissions and limitations
* under the License.
*/
-
/*
- * Description : Try to drop a functional dependency
- * Expected Res : Error
+ * Description : Miscellaneous tests for varargs functions
+ * Expected Res : Success
*/
-drop dataverse B if exists;
-drop dataverse C if exists;
-create dataverse C;
-use C;
+use test;
-create function f1(message, text){
- contains(message,text)
-};
-
-create function f0(message, text){
- C.f1(message,text)
-};
-
-drop function f1(message, text);
\ No newline at end of file
+select id, f5(id, name, `friend-ids`, employment[0]) as f5
+from FacebookUsers fbu
+order by id;
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/user-defined-functions/check-dependencies-1/check-dependencies-1.2.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/user-defined-functions/check-dependencies-1/check-dependencies-1.2.adm
new file mode 100644
index 0000000..04b90ce
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/user-defined-functions/check-dependencies-1/check-dependencies-1.2.adm
@@ -0,0 +1,5 @@
+{ "DataverseName": "X", "Name": "fx1", "Dependencies": [ [ ], [ ], [ ] ] }
+{ "DataverseName": "X", "Name": "fx2", "Dependencies": [ [ ], [ ], [ ] ] }
+{ "DataverseName": "X", "Name": "fx3", "Dependencies": [ [ ], [ [ "X", "fx1", "1" ], [ "X", "fx2", "-1" ] ], [ ] ] }
+{ "DataverseName": "Y", "Name": "fy1", "Dependencies": [ [ ], [ ], [ ] ] }
+{ "DataverseName": "Y", "Name": "fy3", "Dependencies": [ [ ], [ [ "Y", "fy1", "1" ], [ "X", "fx2", "-1" ] ], [ ] ] }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/user-defined-functions/create-or-replace-function-1/create-or-replace-function-1.2.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/user-defined-functions/create-or-replace-function-1/create-or-replace-function-1.2.adm
index e57f576..e7d6441 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/user-defined-functions/create-or-replace-function-1/create-or-replace-function-1.2.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/user-defined-functions/create-or-replace-function-1/create-or-replace-function-1.2.adm
@@ -1 +1 @@
-{ "f1": 3, "f2": 10 }
\ No newline at end of file
+{ "f1": 3, "f2": 10, "f3": "a,b", "f4": "c/d", "f5_1": "E", "f5_va": "f.g", "f6_1": "h", "f6_va": "i,j" }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/user-defined-functions/create-or-replace-function-1/create-or-replace-function-1.3.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/user-defined-functions/create-or-replace-function-1/create-or-replace-function-1.3.adm
index 63617d3..d56fa26 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/user-defined-functions/create-or-replace-function-1/create-or-replace-function-1.3.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/user-defined-functions/create-or-replace-function-1/create-or-replace-function-1.3.adm
@@ -1,2 +1,8 @@
{ "Name": "f1", "Definition": "a - b" }
-{ "Name": "f2", "Definition": "a * b" }
\ No newline at end of file
+{ "Name": "f2", "Definition": "a * b" }
+{ "Name": "f3", "Definition": "string_join(args, \",\")" }
+{ "Name": "f4", "Definition": "string_join(args, \"/\")" }
+{ "Name": "f5", "Definition": "string_join(args, \".\")" }
+{ "Name": "f5", "Definition": "upper(a)" }
+{ "Name": "f6", "Definition": "string_join(args, \",\")" }
+{ "Name": "f6", "Definition": "lower(a)" }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/user-defined-functions/drop-function-1/drop-function-1.2.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/user-defined-functions/drop-function-1/drop-function-1.2.adm
index 7813681..800cdb5 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/user-defined-functions/drop-function-1/drop-function-1.2.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/user-defined-functions/drop-function-1/drop-function-1.2.adm
@@ -1 +1 @@
-5
\ No newline at end of file
+{ "t1": 5, "t2": 9 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf32_metadata/udf32_metadata.2.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf32_metadata/udf32_metadata.2.adm
index 7cf89ce..925f873 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf32_metadata/udf32_metadata.2.adm
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf32_metadata/udf32_metadata.2.adm
@@ -1,3 +1,8 @@
{ "fn": { "DataverseName": "test", "Name": "myfn001", "Arity": "0", "Params": [ ], "ReturnType": "", "Definition": "42", "Language": "SQLPP", "Kind": "SCALAR", "Dependencies": [ [ ], [ ], [ ] ] } }
{ "fn": { "DataverseName": "test", "Name": "myfn002", "Arity": "1", "Params": [ "a" ], "ReturnType": "", "Definition": "a", "Language": "SQLPP", "Kind": "SCALAR", "Dependencies": [ [ ], [ ], [ ] ] } }
{ "fn": { "DataverseName": "test", "Name": "myfn003", "Arity": "2", "Params": [ "a", "b" ], "ReturnType": "", "Definition": "a + b", "Language": "SQLPP", "Kind": "SCALAR", "Dependencies": [ [ ], [ ], [ ] ] } }
+{ "fn": { "DataverseName": "test", "Name": "myfn004", "Arity": "-1", "Params": [ "args" ], "ReturnType": "", "Definition": "args", "Language": "SQLPP", "Kind": "SCALAR", "Dependencies": [ [ ], [ ], [ ] ] } }
+{ "fn": { "DataverseName": "test", "Name": "myfn005", "Arity": "1", "Params": [ "a" ], "ReturnType": "", "Definition": "a", "Language": "SQLPP", "Kind": "SCALAR", "Dependencies": [ [ ], [ ], [ ] ] } }
+{ "fn": { "DataverseName": "test", "Name": "myfn005", "Arity": "2", "Params": [ "a", "b" ], "ReturnType": "", "Definition": "a + b", "Language": "SQLPP", "Kind": "SCALAR", "Dependencies": [ [ ], [ ], [ ] ] } }
+{ "fn": { "DataverseName": "test", "Name": "myfn006", "Arity": "-1", "Params": [ "args" ], "ReturnType": "", "Definition": "args", "Language": "SQLPP", "Kind": "SCALAR", "Dependencies": [ [ ], [ ], [ ] ] } }
+{ "fn": { "DataverseName": "test", "Name": "myfn006", "Arity": "1", "Params": [ "a" ], "ReturnType": "", "Definition": "a", "Language": "SQLPP", "Kind": "SCALAR", "Dependencies": [ [ ], [ ], [ ] ] } }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf32_metadata/udf32_metadata.4.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf32_metadata/udf32_metadata.4.adm
new file mode 100644
index 0000000..c227083
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf32_metadata/udf32_metadata.4.adm
@@ -0,0 +1 @@
+0
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf33_overloading/udf33_overloading.3.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf33_overloading/udf33_overloading.3.adm
new file mode 100644
index 0000000..0b1f01e
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf33_overloading/udf33_overloading.3.adm
@@ -0,0 +1 @@
+{ "myfn2_0": 0, "myfn2_1": -1, "myfn2_2": 2 }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf35_varargs_misc/udf35_varargs_misc.3.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf35_varargs_misc/udf35_varargs_misc.3.adm
new file mode 100644
index 0000000..029c4cc
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf35_varargs_misc/udf35_varargs_misc.3.adm
@@ -0,0 +1,10 @@
+{ "id": 1, "f1_0": "const", "f1_1": "const", "f1_2": "const" }
+{ "id": 2, "f1_0": "const", "f1_1": "const", "f1_2": "const" }
+{ "id": 3, "f1_0": "const", "f1_1": "const", "f1_2": "const" }
+{ "id": 4, "f1_0": "const", "f1_1": "const", "f1_2": "const" }
+{ "id": 5, "f1_0": "const", "f1_1": "const", "f1_2": "const" }
+{ "id": 6, "f1_0": "const", "f1_1": "const", "f1_2": "const" }
+{ "id": 7, "f1_0": "const", "f1_1": "const", "f1_2": "const" }
+{ "id": 8, "f1_0": "const", "f1_1": "const", "f1_2": "const" }
+{ "id": 9, "f1_0": "const", "f1_1": "const", "f1_2": "const" }
+{ "id": 10, "f1_0": "const", "f1_1": "const", "f1_2": "const" }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf35_varargs_misc/udf35_varargs_misc.4.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf35_varargs_misc/udf35_varargs_misc.4.adm
new file mode 100644
index 0000000..7740b20
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf35_varargs_misc/udf35_varargs_misc.4.adm
@@ -0,0 +1,10 @@
+{ "id": 1, "f2_0": "", "f2_1": "MargaritaStoddard", "f2_2": "MargaritaStoddard|Margarita" }
+{ "id": 2, "f2_0": "", "f2_1": "IsbelDull", "f2_2": "IsbelDull|Isbel" }
+{ "id": 3, "f2_0": "", "f2_1": "EmoryUnk", "f2_2": "EmoryUnk|Emory" }
+{ "id": 4, "f2_0": "", "f2_1": "NicholasStroh", "f2_2": "NicholasStroh|Nicholas" }
+{ "id": 5, "f2_0": "", "f2_1": "VonKemble", "f2_2": "VonKemble|Von" }
+{ "id": 6, "f2_0": "", "f2_1": "WillisWynne", "f2_2": "WillisWynne|Willis" }
+{ "id": 7, "f2_0": "", "f2_1": "SuzannaTillson", "f2_2": "SuzannaTillson|Suzanna" }
+{ "id": 8, "f2_0": "", "f2_1": "NilaMilliron", "f2_2": "NilaMilliron|Nila" }
+{ "id": 9, "f2_0": "", "f2_1": "WoodrowNehling", "f2_2": "WoodrowNehling|Woodrow" }
+{ "id": 10, "f2_0": "", "f2_1": "BramHatch", "f2_2": "BramHatch|Bram" }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf35_varargs_misc/udf35_varargs_misc.5.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf35_varargs_misc/udf35_varargs_misc.5.adm
new file mode 100644
index 0000000..b816059
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf35_varargs_misc/udf35_varargs_misc.5.adm
@@ -0,0 +1,10 @@
+{ "id": 1, "f3_0": "||", "f3_1": "MargaritaStoddard||MargaritaStoddard", "f3_2": "MargaritaStoddard|Margarita||MargaritaStoddard|||Margarita" }
+{ "id": 2, "f3_0": "||", "f3_1": "IsbelDull||IsbelDull", "f3_2": "IsbelDull|Isbel||IsbelDull|||Isbel" }
+{ "id": 3, "f3_0": "||", "f3_1": "EmoryUnk||EmoryUnk", "f3_2": "EmoryUnk|Emory||EmoryUnk|||Emory" }
+{ "id": 4, "f3_0": "||", "f3_1": "NicholasStroh||NicholasStroh", "f3_2": "NicholasStroh|Nicholas||NicholasStroh|||Nicholas" }
+{ "id": 5, "f3_0": "||", "f3_1": "VonKemble||VonKemble", "f3_2": "VonKemble|Von||VonKemble|||Von" }
+{ "id": 6, "f3_0": "||", "f3_1": "WillisWynne||WillisWynne", "f3_2": "WillisWynne|Willis||WillisWynne|||Willis" }
+{ "id": 7, "f3_0": "||", "f3_1": "SuzannaTillson||SuzannaTillson", "f3_2": "SuzannaTillson|Suzanna||SuzannaTillson|||Suzanna" }
+{ "id": 8, "f3_0": "||", "f3_1": "NilaMilliron||NilaMilliron", "f3_2": "NilaMilliron|Nila||NilaMilliron|||Nila" }
+{ "id": 9, "f3_0": "||", "f3_1": "WoodrowNehling||WoodrowNehling", "f3_2": "WoodrowNehling|Woodrow||WoodrowNehling|||Woodrow" }
+{ "id": 10, "f3_0": "||", "f3_1": "BramHatch||BramHatch", "f3_2": "BramHatch|Bram||BramHatch|||Bram" }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf35_varargs_misc/udf35_varargs_misc.6.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf35_varargs_misc/udf35_varargs_misc.6.adm
new file mode 100644
index 0000000..192af1e
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf35_varargs_misc/udf35_varargs_misc.6.adm
@@ -0,0 +1,10 @@
+{ "id": 1, "f4_4": "margaritastoddard|margarita||margaritastoddard|||margarita,MARGARITASTODDARD|MARGARITA||MARGARITASTODDARD|||MARGARITA" }
+{ "id": 2, "f4_4": "isbeldull|isbel||isbeldull|||isbel,ISBELDULL|ISBEL||ISBELDULL|||ISBEL" }
+{ "id": 3, "f4_4": "emoryunk|emory||emoryunk|||emory,EMORYUNK|EMORY||EMORYUNK|||EMORY" }
+{ "id": 4, "f4_4": "nicholasstroh|nicholas||nicholasstroh|||nicholas,NICHOLASSTROH|NICHOLAS||NICHOLASSTROH|||NICHOLAS" }
+{ "id": 5, "f4_4": "vonkemble|von||vonkemble|||von,VONKEMBLE|VON||VONKEMBLE|||VON" }
+{ "id": 6, "f4_4": "williswynne|willis||williswynne|||willis,WILLISWYNNE|WILLIS||WILLISWYNNE|||WILLIS" }
+{ "id": 7, "f4_4": "suzannatillson|suzanna||suzannatillson|||suzanna,SUZANNATILLSON|SUZANNA||SUZANNATILLSON|||SUZANNA" }
+{ "id": 8, "f4_4": "nilamilliron|nila||nilamilliron|||nila,NILAMILLIRON|NILA||NILAMILLIRON|||NILA" }
+{ "id": 9, "f4_4": "woodrownehling|woodrow||woodrownehling|||woodrow,WOODROWNEHLING|WOODROW||WOODROWNEHLING|||WOODROW" }
+{ "id": 10, "f4_4": "bramhatch|bram||bramhatch|||bram,BRAMHATCH|BRAM||BRAMHATCH|||BRAM" }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf35_varargs_misc/udf35_varargs_misc.7.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf35_varargs_misc/udf35_varargs_misc.7.adm
new file mode 100644
index 0000000..b16d544
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf35_varargs_misc/udf35_varargs_misc.7.adm
@@ -0,0 +1,10 @@
+{ "id": 1, "f5": [ { "t": "number" }, { "t": "string" }, { "t": "list" }, { "t": "object" } ] }
+{ "id": 2, "f5": [ { "t": "number" }, { "t": "string" }, { "t": "list" }, { "t": "object" } ] }
+{ "id": 3, "f5": [ { "t": "number" }, { "t": "string" }, { "t": "list" }, { "t": "object" } ] }
+{ "id": 4, "f5": [ { "t": "number" }, { "t": "string" }, { "t": "list" }, { "t": "object" } ] }
+{ "id": 5, "f5": [ { "t": "number" }, { "t": "string" }, { "t": "list" }, { "t": "object" } ] }
+{ "id": 6, "f5": [ { "t": "number" }, { "t": "string" }, { "t": "list" }, { "t": "object" } ] }
+{ "id": 7, "f5": [ { "t": "number" }, { "t": "string" }, { "t": "list" }, { "t": "object" } ] }
+{ "id": 8, "f5": [ { "t": "number" }, { "t": "string" }, { "t": "list" }, { "t": "object" } ] }
+{ "id": 9, "f5": [ { "t": "number" }, { "t": "string" }, { "t": "list" }, { "t": "object" } ] }
+{ "id": 10, "f5": [ { "t": "number" }, { "t": "string" }, { "t": "list" }, { "t": "object" } ] }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_it_sqlpp.xml b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_it_sqlpp.xml
index ea5d279..cf5b1a7 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_it_sqlpp.xml
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_it_sqlpp.xml
@@ -24,6 +24,12 @@
<test-group name="external-library">
<test-case FilePath="external-library">
+ <compilation-unit name="bad-ext-function-ddl-1">
+ <output-dir compare="Text">none</output-dir>
+ <expected-error>ASX1079: Compilation error: Variable number of parameters is not supported for external functions</expected-error>
+ </compilation-unit>
+ </test-case>
+ <test-case FilePath="external-library">
<compilation-unit name="create-or-replace-function-1">
<output-dir compare="Text">create-or-replace-function-1</output-dir>
</compilation-unit>
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 adbdf69..be549f9 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
@@ -11841,6 +11841,7 @@
<compilation-unit name="bad-function-ddl-1">
<output-dir compare="Text">bad-function-ddl-1</output-dir>
<expected-error>Cannot find dataset TweetMessages in dataverse experiments nor an alias with name TweetMessages!</expected-error>
+ <expected-error>Cannot find dataset TweetMessages2 in dataverse experiments2 nor an alias with name TweetMessages2!</expected-error>
</compilation-unit>
</test-case>
<test-case FilePath="user-defined-functions">
@@ -11865,6 +11866,7 @@
<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</expected-error>
+ <expected-error>ASX1081: Cannot find function with name experiments2.function_that_does_not_exist </expected-error>
</compilation-unit>
</test-case>
<test-case FilePath="user-defined-functions">
@@ -11902,6 +11904,7 @@
<output-dir compare="Text">bad-function-ddl-11</output-dir>
<expected-error>ASX1001: Syntax error: Unexpected type declaration for parameter a in function myfn001</expected-error>
<expected-error>ASX1001: Syntax error: Unexpected return type declaration for function myfn002</expected-error>
+ <expected-error>ASX1001: Syntax error: Unexpected return type declaration for function myfn003</expected-error>
</compilation-unit>
</test-case>
<test-case FilePath="user-defined-functions">
@@ -11918,6 +11921,9 @@
<compilation-unit name="drop-dependency-1">
<output-dir compare="Text">drop-dependency-1</output-dir>
<expected-error>Cannot drop dataverse. Function B.f0(2) depends on function C.f1(2)</expected-error>
+ <expected-error>Cannot drop dataverse. Function B.f3(2) depends on function C.f2(...)</expected-error>
+ <expected-error>Cannot drop dataverse. Function B.f5(...) depends on function C.f4(2)</expected-error>
+ <expected-error>Cannot drop dataverse. Function B.f7(...) depends on function C.f6(...)</expected-error>
<source-location>false</source-location>
</compilation-unit>
</test-case>
@@ -11925,6 +11931,7 @@
<compilation-unit name="drop-dependency-2">
<output-dir compare="Text">drop-dependency-2</output-dir>
<expected-error>Cannot drop dataverse. Function B.f2(2) depends on dataset C.TweetMessages</expected-error>
+ <expected-error>Cannot drop dataverse. Function B.f3(...) depends on dataset C.TweetMessages</expected-error>
<source-location>false</source-location>
</compilation-unit>
</test-case>
@@ -11932,6 +11939,9 @@
<compilation-unit name="drop-dependency-3">
<output-dir compare="Text">drop-dependency-3</output-dir>
<expected-error>Cannot drop function C.f1(2) being used by function B.f0(2)</expected-error>
+ <expected-error>Cannot drop function C.f3(...) being used by function B.f2(2)</expected-error>
+ <expected-error>Cannot drop function C.f5(2) being used by function B.f4(...)</expected-error>
+ <expected-error>Cannot drop function C.f7(...) being used by function B.f6(...)</expected-error>
<source-location>false</source-location>
</compilation-unit>
</test-case>
@@ -11939,6 +11949,7 @@
<compilation-unit name="drop-dependency-4">
<output-dir compare="Text">drop-dependency-4</output-dir>
<expected-error>Cannot drop dataset C.TweetMessages being used by function B.f2(2)</expected-error>
+ <expected-error>Cannot drop dataset C.TweetMessages being used by function B.f2(...)</expected-error>
<source-location>false</source-location>
</compilation-unit>
</test-case>
@@ -11946,6 +11957,9 @@
<compilation-unit name="drop-dependency-5">
<output-dir compare="Text">drop-dependency-5</output-dir>
<expected-error>Cannot drop function C.f1(2) being used by function C.f0(2)</expected-error>
+ <expected-error>Cannot drop function C.f1(2) being used by function C.f0(...)</expected-error>
+ <expected-error>Cannot drop function C.f1(...) being used by function C.f0(2)</expected-error>
+ <expected-error>Cannot drop function C.f1(...) being used by function C.f0(...)</expected-error>
<source-location>false</source-location>
</compilation-unit>
</test-case>
@@ -11953,6 +11967,7 @@
<compilation-unit name="drop-dependency-6">
<output-dir compare="Text">drop-dependency-6</output-dir>
<expected-error>Cannot drop dataset C.TweetMessages being used by function C.f2(2)</expected-error>
+ <expected-error>Cannot drop dataset C.TweetMessages being used by function C.f2(...)</expected-error>
<source-location>false</source-location>
</compilation-unit>
</test-case>
@@ -11960,6 +11975,7 @@
<compilation-unit name="drop-function-1">
<output-dir compare="Text">drop-function-1</output-dir>
<expected-error>ASX1081: Cannot find function with name experiments.my_sum</expected-error>
+ <expected-error>ASX1081: Cannot find function with name experiments.my_sum_va</expected-error>
</compilation-unit>
</test-case>
<test-case FilePath="user-defined-functions">
@@ -12182,6 +12198,11 @@
</compilation-unit>
</test-case>
<test-case FilePath="user-defined-functions">
+ <compilation-unit name="udf35_varargs_misc">
+ <output-dir compare="Text">udf35_varargs_misc</output-dir>
+ </compilation-unit>
+ </test-case>
+ <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</expected-error>
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 71cd759..81ff92d 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
@@ -124,11 +124,20 @@
if (declaredFunctions.contains(fsWithDv)) {
return fsWithDv;
}
+ FunctionSignature fsWithDvVarargs =
+ new FunctionSignature(fsWithDv.getDataverseName(), fsWithDv.getName(), FunctionIdentifier.VARARGS);
+ if (declaredFunctions.contains(fsWithDvVarargs)) {
+ return fsWithDvVarargs;
+ }
try {
Function function = metadataProvider.lookupUserDefinedFunction(fsWithDv);
if (function != null) {
return fsWithDv;
}
+ function = metadataProvider.lookupUserDefinedFunction(fsWithDvVarargs);
+ if (function != null) {
+ return fsWithDvVarargs;
+ }
} catch (AlgebricksException e) {
throw new CompilationException(ErrorCode.COMPILATION_ERROR, e, sourceLoc, e.getMessage());
}
@@ -203,22 +212,29 @@
Expression expression, List<FunctionSignature> declaredFunctions, List<FunctionDecl> inputFunctionDecls,
IFunctionCollector functionCollector, FunctionParser functionParser, DataverseName defaultDataverse)
throws CompilationException {
+ if (expression == null) {
+ return Collections.emptyList();
+ }
List<FunctionDecl> functionDecls =
inputFunctionDecls == null ? new ArrayList<>() : new ArrayList<>(inputFunctionDecls);
- if (expression == null) {
- return functionDecls;
- }
Set<CallExpr> functionCalls = functionCollector.getFunctionCalls(expression);
+ Set<FunctionSignature> functionSignatures = new HashSet<>();
for (CallExpr functionCall : functionCalls) {
FunctionSignature fs = functionCall.getFunctionSignature();
- FunctionSignature fsWithDv = fs.getDataverseName() != null ? fs
- : new FunctionSignature(defaultDataverse, fs.getName(), fs.getArity());
- if (declaredFunctions != null && declaredFunctions.contains(fsWithDv)) {
+ if (fs.getDataverseName() == null) {
+ throw new CompilationException(ErrorCode.COMPILATION_ILLEGAL_STATE, functionCall.getSourceLocation(),
+ fs);
+ }
+ if (!functionSignatures.add(fs)) {
+ // already seen this signature
+ continue;
+ }
+ if (declaredFunctions != null && declaredFunctions.contains(fs)) {
continue;
}
Function function;
try {
- function = metadataProvider.lookupUserDefinedFunction(fsWithDv);
+ function = metadataProvider.lookupUserDefinedFunction(fs);
} catch (AlgebricksException e) {
throw new CompilationException(ErrorCode.COMPILATION_ERROR, e, functionCall.getSourceLocation(),
e.toString());
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/AbstractInlineUdfsVisitor.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/AbstractInlineUdfsVisitor.java
index eb2fba6..c866eff 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/AbstractInlineUdfsVisitor.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/AbstractInlineUdfsVisitor.java
@@ -20,7 +20,6 @@
import java.util.ArrayList;
import java.util.HashMap;
-import java.util.Iterator;
import java.util.List;
import java.util.Map;
@@ -62,8 +61,10 @@
import org.apache.asterix.lang.common.visitor.base.AbstractQueryExpressionVisitor;
import org.apache.asterix.metadata.declared.MetadataProvider;
import org.apache.asterix.metadata.entities.Dataverse;
+import org.apache.asterix.om.functions.BuiltinFunctions;
import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
import org.apache.hyracks.algebricks.common.utils.Pair;
+import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
import org.apache.hyracks.api.exceptions.SourceLocation;
public abstract class AbstractInlineUdfsVisitor extends AbstractQueryExpressionVisitor<Boolean, List<FunctionDecl>> {
@@ -303,33 +304,67 @@
// TODO(buyingyi): throw an exception for recursive function definition or limit the stack depth.
implem.setFuncBody(rewriteFunctionBody(implem));
// it's one of the functions we want to inline
- List<LetClause> clauses = new ArrayList<>();
- Iterator<VarIdentifier> paramIter = implem.getParamList().iterator();
- VariableSubstitutionEnvironment subts = new VariableSubstitutionEnvironment();
+ List<Expression> argList = f.getExprList();
+ int argCount = argList.size();
+ List<LetClause> clauses = new ArrayList<>(argCount + 1);
+ List<Expression> argVars = new ArrayList<>(argCount);
for (Expression e : f.getExprList()) {
- VarIdentifier param = paramIter.next();
// Obs: we could do smth about passing also literals, or let
// variable inlining to take care of this.
+ VarIdentifier argVar;
if (e.getKind() == Kind.VARIABLE_EXPRESSION) {
- subts.addSubstituion(new VariableExpr(param), e);
+ argVar = ((VariableExpr) e).getVar();
} else {
SourceLocation sourceLoc = e.getSourceLocation();
- VarIdentifier newV = context.newVariable();
+ argVar = context.newVariable();
Pair<ILangExpression, VariableSubstitutionEnvironment> p1 =
e.accept(cloneVisitor, new VariableSubstitutionEnvironment());
- VariableExpr newVRef1 = new VariableExpr(newV);
+ VariableExpr newVRef1 = new VariableExpr(argVar);
newVRef1.setSourceLocation(sourceLoc);
LetClause c = new LetClause(newVRef1, (Expression) p1.first);
c.setSourceLocation(sourceLoc);
clauses.add(c);
- VariableExpr newVRef2 = new VariableExpr(newV);
- newVRef2.setSourceLocation(sourceLoc);
- subts.addSubstituion(new VariableExpr(param), newVRef2);
+ }
+
+ VariableExpr argVarExpr = new VariableExpr(argVar);
+ argVarExpr.setSourceLocation(e.getSourceLocation());
+ argVars.add(argVarExpr);
+ }
+
+ VariableSubstitutionEnvironment subst = new VariableSubstitutionEnvironment();
+ List<VarIdentifier> paramList = implem.getParamList();
+ if (implem.getSignature().getArity() == FunctionIdentifier.VARARGS) {
+ if (paramList.size() != 1) {
+ throw new CompilationException(ErrorCode.COMPILATION_ILLEGAL_STATE, expr.getSourceLocation(),
+ paramList.size());
+ }
+ VarIdentifier paramVarargs = paramList.get(0);
+ CallExpr argsListExpr =
+ new CallExpr(new FunctionSignature(BuiltinFunctions.ORDERED_LIST_CONSTRUCTOR), argVars);
+ argsListExpr.setSourceLocation(expr.getSourceLocation());
+
+ VarIdentifier argsVar = context.newVariable();
+ VariableExpr argsVarRef1 = new VariableExpr(argsVar);
+ argsVarRef1.setSourceLocation(expr.getSourceLocation());
+ LetClause c = new LetClause(argsVarRef1, argsListExpr);
+ c.setSourceLocation(expr.getSourceLocation());
+ clauses.add(c);
+
+ VariableExpr argsVarRef2 = new VariableExpr(argsVar);
+ argsVarRef2.setSourceLocation(expr.getSourceLocation());
+ subst.addSubstituion(new VariableExpr(paramVarargs), argsVarRef2);
+ } else {
+ if (paramList.size() != argCount) {
+ throw new CompilationException(ErrorCode.COMPILATION_ILLEGAL_STATE, expr.getSourceLocation(),
+ paramList.size());
+ }
+ for (int i = 0; i < argCount; i++) {
+ subst.addSubstituion(new VariableExpr(paramList.get(i)), argVars.get(i));
}
}
Pair<ILangExpression, VariableSubstitutionEnvironment> p2 =
- implem.getFuncBody().accept(cloneVisitor, subts);
+ implem.getFuncBody().accept(cloneVisitor, subst);
Expression resExpr;
if (clauses.isEmpty()) {
resExpr = (Expression) p2.first;
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj b/asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj
index 9f81216..5ecc35f 100644
--- a/asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj
+++ b/asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj
@@ -239,6 +239,7 @@
private static final String RETURNS = "RETURNS";
private static final String INT_TYPE_NAME = "int";
+ private static final String UDF_VARARGS_PARAM_NAME = "args"; // Note: this value is stored in the function metadata
// error configuration
protected static final boolean REPORT_EXPECTED_TOKENS = false;
@@ -1178,7 +1179,9 @@
{
FunctionSignature signature = null;
FunctionName fctName = null;
+ Pair<Integer, List<Pair<VarIdentifier,TypeExpression>>> paramsWithArity = null;
List<Pair<VarIdentifier,TypeExpression>> params = null;
+ int arity = 0;
TypeExpression returnType = null;
Token beginPos = null, endPos = null;
Expression functionBodyExpr = null;
@@ -1195,7 +1198,11 @@
defaultDataverse = fctName.dataverse;
}
ifNotExists = IfNotExists()
- params = FunctionParameters()
+ paramsWithArity = FunctionParameters()
+ {
+ arity = paramsWithArity.first;
+ params = paramsWithArity.second;
+ }
returnType = FunctionReturnType()
(
(
@@ -1210,7 +1217,7 @@
endPos = token;
String functionBody = extractFragment(beginPos.beginLine, beginPos.beginColumn, endPos.beginLine,
endPos.beginColumn);
- signature = new FunctionSignature(fctName.dataverse, fctName.function, params.size());
+ signature = new FunctionSignature(fctName.dataverse, fctName.function, arity);
getCurrentScope().addFunctionDescriptor(signature, false);
removeCurrentScope();
defaultDataverse = currentDataverse;
@@ -1225,7 +1232,7 @@
<AT> libraryName = QualifiedName()
(<WITH> withOptions = RecordConstructor())?
{
- signature = new FunctionSignature(fctName.dataverse, fctName.function, params.size());
+ signature = new FunctionSignature(fctName.dataverse, fctName.function, arity);
defaultDataverse = currentDataverse;
try {
stmt = new CreateFunctionStatement(signature, params, returnType, libraryName.first,
@@ -1239,27 +1246,55 @@
)
}
-List<Pair<VarIdentifier,TypeExpression>> FunctionParameters() :
+Pair<Integer, List<Pair<VarIdentifier, TypeExpression>>> FunctionParameters() :
{
- List<Pair<VarIdentifier,TypeExpression>> paramList = Collections.<Pair<VarIdentifier,TypeExpression>>emptyList();
+ Pair<Integer, List<Pair<VarIdentifier, TypeExpression>>> params = null;
}
{
- <LEFTPAREN> (paramList = FunctionParameterList())? <RIGHTPAREN>
+ <LEFTPAREN> (params = FunctionParameterList())? <RIGHTPAREN>
{
- return paramList;
+ if (params == null) {
+ params = new Pair<Integer, List<Pair<VarIdentifier, TypeExpression>>>(
+ 0, Collections.<Pair<VarIdentifier, TypeExpression>>emptyList()
+ );
+ }
+ return params;
}
}
-List<Pair<VarIdentifier,TypeExpression>> FunctionParameterList() :
+Pair<Integer, List<Pair<VarIdentifier, TypeExpression>>> FunctionParameterList() :
{
- List<Pair<VarIdentifier,TypeExpression>> paramList = new ArrayList<Pair<VarIdentifier,TypeExpression>>();
- Pair<VarIdentifier,TypeExpression> param = null;
+ List<Pair<VarIdentifier, TypeExpression>> paramList = null;
+ Pair<VarIdentifier, TypeExpression> param = null;
+ int arity = 0;
}
{
- param = FunctionParameter() { paramList.add(param); }
- ( <COMMA> param = FunctionParameter() { paramList.add(param); } )*
+ (
+ (
+ <DOT> <DOT> <DOT>
+ {
+ param = new Pair<VarIdentifier, TypeExpression>(
+ SqlppVariableUtil.toInternalVariableIdentifier(UDF_VARARGS_PARAM_NAME), null
+ );
+ paramList = Collections.<Pair<VarIdentifier, TypeExpression>>singletonList(param);
+ arity = FunctionIdentifier.VARARGS;
+ }
+ )
+ |
+ (
+ param = FunctionParameter()
+ {
+ paramList = new ArrayList<Pair<VarIdentifier, TypeExpression>>();
+ paramList.add(param);
+ }
+ ( <COMMA> param = FunctionParameter() { paramList.add(param); } )*
+ {
+ arity = paramList.size();
+ }
+ )
+ )
{
- return paramList;
+ return new Pair<Integer, List<Pair<VarIdentifier, TypeExpression>>>(arity, paramList);
}
}
@@ -1459,13 +1494,13 @@
FunctionSignature FunctionSignature() throws ParseException:
{
FunctionName fctName = null;
- List<Pair<VarIdentifier,TypeExpression>> params = null;
+ Pair<Integer, List<Pair<VarIdentifier,TypeExpression>>> params = null;
int arity = 0;
}
{
fctName = FunctionName()
(
- LOOKAHEAD(2) params = FunctionParameters() { arity = params.size(); }
+ LOOKAHEAD(2) params = FunctionParameters() { arity = params.first; }
| ( <LEFTPAREN> arity = FunctionArity() <RIGHTPAREN> )
| ( <ATT> arity = FunctionArity() ) // back-compat
)
@@ -2564,19 +2599,21 @@
{
Token startToken = null;
String functionName;
- List<Pair<VarIdentifier,TypeExpression>> paramList;
+ Pair<Integer, List<Pair<VarIdentifier,TypeExpression>>> paramsWithArity = null;
Expression funcBody;
createNewScope();
}
{
<DECLARE> { startToken = token; } <FUNCTION>
functionName = Identifier()
- paramList = FunctionParameters()
+ paramsWithArity = FunctionParameters()
<LEFTBRACE>
funcBody = FunctionBody()
<RIGHTBRACE>
{
- FunctionSignature signature = new FunctionSignature(defaultDataverse, functionName, paramList.size());
+ int arity = paramsWithArity.first;
+ List<Pair<VarIdentifier,TypeExpression>> paramList = paramsWithArity.second;
+ FunctionSignature signature = new FunctionSignature(defaultDataverse, functionName, arity);
getCurrentScope().addFunctionDescriptor(signature, false);
ensureNoTypeDeclsInFunction(functionName, paramList, null, startToken);
List<VarIdentifier> params = new ArrayList<VarIdentifier>(paramList.size());
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/FunctionTupleTranslator.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/FunctionTupleTranslator.java
index dddd28e..0672906 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/FunctionTupleTranslator.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/FunctionTupleTranslator.java
@@ -197,7 +197,8 @@
dependencies);
}
- private List<TypeSignature> getParamTypes(ARecord functionRecord, DataverseName functionDataverseName) {
+ private List<TypeSignature> getParamTypes(ARecord functionRecord, DataverseName functionDataverseName)
+ throws AsterixException {
ARecordType functionRecordType = functionRecord.getType();
int paramTypesFieldIdx = functionRecordType.getFieldIndex(FUNCTION_ARECORD_FUNCTION_PARAMTYPES_FIELD_NAME);
if (paramTypesFieldIdx < 0) {
@@ -221,7 +222,7 @@
paramType = getTypeSignature(paramTypeName, paramTypeDataverseNameCanonical, functionDataverseName);
break;
default:
- throw new IllegalStateException(); //TODO:FIXME
+ throw new AsterixException(ErrorCode.METADATA_ERROR, paramTypeObject.getType().getTypeName());
}
paramTypes.add(paramType);
}