1) fixed Issue 100 and 124.
2) added negative test case for issue 100 and 124. 
3) disabled test cases substr04/05.aql (Issue 219 logged to track this)


git-svn-id: https://asterixdb.googlecode.com/svn/branches/asterix_stabilization@883 eaa15691-b419-025a-1212-ee371bd00084
diff --git a/asterix-algebra/src/main/java/edu/uci/ics/asterix/translator/AqlExpressionToPlanTranslator.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/translator/AqlExpressionToPlanTranslator.java
index 59d5291..fdf9c0b 100644
--- a/asterix-algebra/src/main/java/edu/uci/ics/asterix/translator/AqlExpressionToPlanTranslator.java
+++ b/asterix-algebra/src/main/java/edu/uci/ics/asterix/translator/AqlExpressionToPlanTranslator.java
@@ -473,7 +473,7 @@
         }
 
         if (f == null) {
-            throw new AsterixException(" Unknown function " + signature);
+            throw new AsterixException(" Unknown function " + signature.getName() + "@" + signature.getArity());
         }
 
         // Put hints into function call expr.
@@ -522,9 +522,9 @@
             fi = builtinAquafi;
         } else {
             fi = new FunctionIdentifier(FunctionConstants.ASTERIX_NS, functionName, arity);
-            FunctionIdentifier builtinAsterixFi = AsterixBuiltinFunctions.getBuiltinFunctionIdentifier(fi);
-            if (builtinAsterixFi != null) {
-                fi = builtinAsterixFi;
+            afi = AsterixBuiltinFunctions.lookupFunction(fi);
+            if (afi == null) {
+                return null;
             }
         }
         if (AsterixBuiltinFunctions.isBuiltinAggregateFunction(fi)) {
diff --git a/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/f01.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/f01.aql
new file mode 100644
index 0000000..7f87de7
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/f01.aql
@@ -0,0 +1,14 @@
+/*
+ * Description  : Invoke a built-in function with incorrect number of arguments
+ * Expected Res : Failure
+ * Date         : Nov 13th 2012
+ */
+
+
+drop dataverse test if exists;
+create dataverse test;
+
+write output to nc1:"rttest/user-defined-functions_f01.adm";
+
+let $c1 := int8()
+return $c1
diff --git a/asterix-app/src/test/resources/runtimets/testsuite.xml b/asterix-app/src/test/resources/runtimets/testsuite.xml
index b665a76..af49e84 100644
--- a/asterix-app/src/test/resources/runtimets/testsuite.xml
+++ b/asterix-app/src/test/resources/runtimets/testsuite.xml
@@ -3137,6 +3137,7 @@
         <output-file compare="Text">substr01.adm</output-file>
       </compilation-unit>
     </test-case>
+    <!-- Issue no 219
     <test-case FilePath="string">
       <compilation-unit name="substr04">
         <output-file compare="Text">substr04.adm</output-file>
@@ -3147,6 +3148,7 @@
         <output-file compare="Text">substr05.adm</output-file>
       </compilation-unit>
     </test-case>
+    -->
     <test-case FilePath="string">
       <compilation-unit name="substr06">
         <output-file compare="Text">substr06.adm</output-file>
@@ -3690,7 +3692,7 @@
     <test-case FilePath="user-defined-functions">
       <compilation-unit name="udf26">
         <output-file compare="Text">udf26.adm</output-file>
-        <expected-error>edu.uci.ics.asterix.common.exceptions.AsterixException: unknown function test.f1@0</expected-error>
+        <expected-error>edu.uci.ics.asterix.common.exceptions.AsterixException</expected-error>
       </compilation-unit>
     </test-case>
     <test-case FilePath="user-defined-functions">
@@ -3698,5 +3700,11 @@
         <output-file compare="Text">udf27.adm</output-file>
       </compilation-unit>
     </test-case>
+    <test-case FilePath="user-defined-functions">
+      <compilation-unit name="f01">
+        <output-file compare="Text">f01.adm</output-file>
+        <expected-error>edu.uci.ics.asterix.common.exceptions.AsterixException</expected-error> 
+      </compilation-unit>
+    </test-case>
   </test-group>
 </test-suite>
diff --git a/asterix-common/src/main/java/edu/uci/ics/asterix/common/functions/FunctionSignature.java b/asterix-common/src/main/java/edu/uci/ics/asterix/common/functions/FunctionSignature.java
index 8d3b48a..188593c 100644
--- a/asterix-common/src/main/java/edu/uci/ics/asterix/common/functions/FunctionSignature.java
+++ b/asterix-common/src/main/java/edu/uci/ics/asterix/common/functions/FunctionSignature.java
@@ -2,49 +2,52 @@
 
 import java.io.Serializable;
 
+import edu.uci.ics.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
+
 public class FunctionSignature implements Serializable {
-	private final String namespace;
-	private final String name;
-	private final int arity;
-	private final String rep;
+    private final String namespace;
+    private final String name;
+    private final int arity;
+    private final String rep;
 
-	public FunctionSignature(String namespace, String name, int arity) {
-		this.namespace = namespace;
-		this.name = name;
-		this.arity = arity;
-		rep = namespace + "." + name + "@" + arity;
-	}
+    public FunctionSignature(String namespace, String name, int arity) {
+        this.namespace = namespace;
+        this.name = name;
+        this.arity = arity;
+        rep = namespace + "." + name + "@" + arity;
+    }
 
-	public boolean equals(Object o) {
-		if (!(o instanceof FunctionSignature)) {
-			return false;
-		} else {
-			FunctionSignature f = ((FunctionSignature) o);
-			return ((namespace != null && namespace.equals(f.getNamespace()) || (namespace == null && f
-					.getNamespace() == null)))
-					&& name.equals(f.getName())
-					&& arity == f.getArity();
-		}
-	}
+    @Override
+    public boolean equals(Object o) {
+        if (!(o instanceof FunctionSignature)) {
+            return false;
+        } else {
+            FunctionSignature f = ((FunctionSignature) o);
+            return ((namespace != null && namespace.equals(f.getNamespace()) || (namespace == null && f.getNamespace() == null)))
+                    && name.equals(f.getName())
+                    && (arity == f.getArity() || arity == FunctionIdentifier.VARARGS || f.getArity() == FunctionIdentifier.VARARGS);
+        }
+    }
 
-	public String toString() {
-		return rep;
-	}
+    public String toString() {
+        return rep;
+    }
 
-	public int hashCode() {
-		return rep.hashCode();
-	}
+    @Override
+    public int hashCode() {
+        return (namespace + "." + name).hashCode();
+    }
 
-	public String getNamespace() {
-		return namespace;
-	}
+    public String getNamespace() {
+        return namespace;
+    }
 
-	public String getName() {
-		return name;
-	}
+    public String getName() {
+        return name;
+    }
 
-	public int getArity() {
-		return arity;
-	}
+    public int getArity() {
+        return arity;
+    }
 
 }