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);
         }
