Steven Jacobs has uploaded a new change for review.

  https://asterix-gerrit.ics.uci.edu/2197

Change subject: [ASTERIXDB-2181][FUN] Check whether a function is usable at 
creation
......................................................................

[ASTERIXDB-2181][FUN] Check whether a function is usable at creation

This change makes it so that a function is tested at creation for
1) All valid function calls
2) All valid dataset references

Change-Id: Ia83f9386e63072ed74ab85094e0bcc016cb1faec
---
M 
asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java
M 
asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/ErrorCode.java
M 
asterixdb/asterix-common/src/main/java/org/apache/asterix/common/functions/FunctionConstants.java
M asterixdb/asterix-common/src/main/resources/asx_errormsg/en.properties
M 
asterixdb/asterix-lang-aql/src/main/java/org/apache/asterix/lang/aql/rewrites/AqlQueryRewriter.java
M asterixdb/asterix-lang-aql/src/main/javacc/AQL.jj
M 
asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/base/IQueryRewriter.java
M 
asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/CreateFunctionStatement.java
M 
asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/util/FunctionUtil.java
M 
asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/GatherFunctionCallsVisitor.java
M 
asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/SqlppQueryRewriter.java
M asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj
M 
asterixdb/asterix-om/src/main/java/org/apache/asterix/om/functions/BuiltinFunctions.java
13 files changed, 120 insertions(+), 16 deletions(-)


  git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb 
refs/changes/97/2197/1

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 2fc3258..b397dae 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
@@ -85,7 +85,10 @@
 import org.apache.asterix.lang.common.base.IRewriterFactory;
 import org.apache.asterix.lang.common.base.IStatementRewriter;
 import org.apache.asterix.lang.common.base.Statement;
+import org.apache.asterix.lang.common.clause.LetClause;
+import org.apache.asterix.lang.common.expression.CallExpr;
 import org.apache.asterix.lang.common.expression.IndexedTypeExpression;
+import org.apache.asterix.lang.common.expression.LiteralExpr;
 import org.apache.asterix.lang.common.statement.CompactStatement;
 import org.apache.asterix.lang.common.statement.ConnectFeedStatement;
 import org.apache.asterix.lang.common.statement.CreateDataverseStatement;
@@ -121,6 +124,8 @@
 import org.apache.asterix.lang.common.statement.TypeDropStatement;
 import org.apache.asterix.lang.common.statement.WriteStatement;
 import org.apache.asterix.lang.common.struct.Identifier;
+import org.apache.asterix.lang.common.util.FunctionUtil;
+import org.apache.asterix.lang.sqlpp.expression.SelectExpression;
 import org.apache.asterix.lang.sqlpp.rewrites.SqlppRewriterFactory;
 import org.apache.asterix.metadata.IDatasetDetails;
 import org.apache.asterix.metadata.MetadataManager;
@@ -151,6 +156,7 @@
 import org.apache.asterix.metadata.utils.MetadataConstants;
 import org.apache.asterix.metadata.utils.MetadataLockUtil;
 import org.apache.asterix.metadata.utils.MetadataUtil;
+import org.apache.asterix.om.functions.BuiltinFunctions;
 import org.apache.asterix.om.types.ARecordType;
 import org.apache.asterix.om.types.ATypeTag;
 import org.apache.asterix.om.types.IAType;
@@ -181,6 +187,7 @@
 import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
 import org.apache.hyracks.algebricks.common.utils.Pair;
 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;
@@ -1683,6 +1690,42 @@
             if (dv == null) {
                 throw new AlgebricksException("There is no dataverse with this 
name " + dataverse + ".");
             }
+
+            //If the function is a select, we need to find out which datasets
+            //it tries to use by rewriting it
+            if (cfs.getFunctionBodyExpression() instanceof SelectExpression) {
+                Query s = new Query(false);
+                s.setBody(cfs.getFunctionBodyExpression());
+                List<LetClause> lets = 
FunctionUtil.createLetsToTestFunction(cfs);
+                ((SelectExpression) s.getBody()).getLetList().addAll(lets);
+                Pair<IReturningStatement, Integer> rewrittenResult =
+                        apiFramework.reWriteQuery(declaredFunctions, 
metadataProvider, s, sessionOutput);
+            }
+
+            Set<CallExpr> functionCalls =
+                    
rewriterFactory.createQueryRewriter().getFunctionCalls(cfs.getFunctionBodyExpression());
+
+            //Check all function calls to make sure that they are valid
+            for (CallExpr functionCall : functionCalls) {
+                FunctionSignature signature = 
functionCall.getFunctionSignature();
+                if (BuiltinFunctions.isBuiltinCompilerFunction(signature, 
false)) {
+                    continue;
+                }
+                FunctionIdentifier fid =
+                        new FunctionIdentifier(signature.getNamespace(), 
signature.getName(), signature.getArity());
+                if (fid.equals(BuiltinFunctions.DATASET)) {
+                    String[] datasetPath =
+                            ((LiteralExpr) 
functionCall.getExprList().get(0)).getValue().getStringValue().split("\\.");
+                    Dataset ds = metadataProvider.findDataset(datasetPath[0], 
datasetPath[1]);
+                    if (ds == null) {
+                        throw 
CompilationException.create(ErrorCode.NO_METADATA_FOR_DATASET, datasetPath);
+                    }
+
+                } else if (MetadataManager.INSTANCE.getFunction(mdTxnCtx, 
signature) == null) {
+                    throw AsterixException.create(ErrorCode.UNKNOWN_FUNCTION, 
signature);
+                }
+            }
+
             Function function = new Function(dataverse, functionName, 
cfs.getFunctionSignature().getArity(),
                     cfs.getParamList(), Function.RETURNTYPE_VOID, 
cfs.getFunctionBody(),
                     rewriterFactory instanceof SqlppRewriterFactory ? 
Function.LANGUAGE_SQLPP : Function.LANGUAGE_AQL,
@@ -1730,7 +1773,7 @@
         try {
             Function function = MetadataManager.INSTANCE.getFunction(mdTxnCtx, 
signature);
             if (function == null && !stmtDropFunction.getIfExists()) {
-                throw new AlgebricksException("Unknonw function " + signature);
+                throw AsterixException.create(ErrorCode.UNKNOWN_FUNCTION, 
signature);
             } else if (checkWhetherFunctionIsBeingUsed(mdTxnCtx, 
signature.getNamespace(), signature.getName(),
                     signature.getArity(), null)) {
                 throw new 
MetadataException(ErrorCode.METADATA_DROP_FUCTION_IN_USE, signature);
diff --git 
a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/ErrorCode.java
 
b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/ErrorCode.java
index a4cf64a..eacf91b 100644
--- 
a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/ErrorCode.java
+++ 
b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/ErrorCode.java
@@ -133,6 +133,7 @@
     public static final int COMPILATION_FAILED_DUE_TO_REPLICATE_OP = 1054;
     public static final int COMPILATION_INCOMPATIBLE_FUNCTION_LANGUAGE = 1055;
     public static final int TOO_MANY_OPTIONS_FOR_FUNCTION = 1056;
+    public static final int UNKNOWN_FUNCTION = 1057;
 
     // Feed errors
     public static final int DATAFLOW_ILLEGAL_STATE = 3001;
diff --git 
a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/functions/FunctionConstants.java
 
b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/functions/FunctionConstants.java
index 9e7859c..0deabe7 100644
--- 
a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/functions/FunctionConstants.java
+++ 
b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/functions/FunctionConstants.java
@@ -21,5 +21,6 @@
 public interface FunctionConstants {
 
     public static final String ASTERIX_NS = "asterix";
+    public static final String DATASET = "dataset";
 
 }
diff --git 
a/asterixdb/asterix-common/src/main/resources/asx_errormsg/en.properties 
b/asterixdb/asterix-common/src/main/resources/asx_errormsg/en.properties
index 39a74ff..7effa65 100644
--- a/asterixdb/asterix-common/src/main/resources/asx_errormsg/en.properties
+++ b/asterixdb/asterix-common/src/main/resources/asx_errormsg/en.properties
@@ -119,6 +119,7 @@
 1054 = Compilation failed due to some problem in the query plan.
 1055 = Incompatible function language. Expect %1$s, but %2$s found.
 1056 = Too many options were specified for %1$s
+1057 = Unknown function %1$s
 
 # Feed Errors
 3001 = Illegal state.
diff --git 
a/asterixdb/asterix-lang-aql/src/main/java/org/apache/asterix/lang/aql/rewrites/AqlQueryRewriter.java
 
b/asterixdb/asterix-lang-aql/src/main/java/org/apache/asterix/lang/aql/rewrites/AqlQueryRewriter.java
index 977f6bb..d6e4d5f 100644
--- 
a/asterixdb/asterix-lang-aql/src/main/java/org/apache/asterix/lang/aql/rewrites/AqlQueryRewriter.java
+++ 
b/asterixdb/asterix-lang-aql/src/main/java/org/apache/asterix/lang/aql/rewrites/AqlQueryRewriter.java
@@ -40,6 +40,7 @@
 import org.apache.asterix.lang.common.base.IReturningStatement;
 import org.apache.asterix.lang.common.clause.GroupbyClause;
 import org.apache.asterix.lang.common.clause.LetClause;
+import org.apache.asterix.lang.common.expression.CallExpr;
 import org.apache.asterix.lang.common.expression.GbyVariableExpressionPair;
 import org.apache.asterix.lang.common.expression.VariableExpr;
 import org.apache.asterix.lang.common.rewrites.LangRewritingContext;
@@ -130,7 +131,8 @@
         declaredFunctions.removeAll(storedFunctionDecls);
     }
 
-    private Set<FunctionSignature> getFunctionCalls(Expression expression) 
throws CompilationException {
+    @Override
+    public Set<CallExpr> getFunctionCalls(Expression expression) throws 
CompilationException {
         GatherFunctionCalls gfc = new GatherFunctionCalls();
         expression.accept(gfc, null);
         return gfc.getCalls();
diff --git a/asterixdb/asterix-lang-aql/src/main/javacc/AQL.jj 
b/asterixdb/asterix-lang-aql/src/main/javacc/AQL.jj
index 59ed8ae..426e9b9 100644
--- a/asterixdb/asterix-lang-aql/src/main/javacc/AQL.jj
+++ b/asterixdb/asterix-lang-aql/src/main/javacc/AQL.jj
@@ -720,7 +720,7 @@
       signature = new FunctionSignature(fctName.dataverse, fctName.function, 
paramList.size());
       getCurrentScope().addFunctionDescriptor(signature, false);
       removeCurrentScope();
-      return new CreateFunctionStatement(signature, paramList, functionBody, 
ifNotExists);
+      return new CreateFunctionStatement(signature, paramList, functionBody, 
functionBodyExpr, ifNotExists);
     }
 }
 
diff --git 
a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/base/IQueryRewriter.java
 
b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/base/IQueryRewriter.java
index 0c6c04c..906c21b 100644
--- 
a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/base/IQueryRewriter.java
+++ 
b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/base/IQueryRewriter.java
@@ -19,8 +19,10 @@
 package org.apache.asterix.lang.common.base;
 
 import java.util.List;
+import java.util.Set;
 
 import org.apache.asterix.common.exceptions.CompilationException;
+import org.apache.asterix.lang.common.expression.CallExpr;
 import org.apache.asterix.lang.common.rewrites.LangRewritingContext;
 import org.apache.asterix.lang.common.statement.FunctionDecl;
 import org.apache.asterix.metadata.declared.MetadataProvider;
@@ -39,6 +41,11 @@
      * @param context,
      *            manages ids of variables and guarantees uniqueness of 
variables.
      */
-    public void rewrite(List<FunctionDecl> declaredFunctions, 
IReturningStatement topExpr,
+    void rewrite(List<FunctionDecl> declaredFunctions, IReturningStatement 
topExpr,
             MetadataProvider metadataProvider, LangRewritingContext context) 
throws CompilationException;
+
+    /**
+     * Find the function calls used by a given expression
+     */
+    Set<CallExpr> getFunctionCalls(Expression expression) throws 
CompilationException;
 }
diff --git 
a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/CreateFunctionStatement.java
 
b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/CreateFunctionStatement.java
index 84d66ce..c817885 100644
--- 
a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/CreateFunctionStatement.java
+++ 
b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/CreateFunctionStatement.java
@@ -23,6 +23,7 @@
 
 import org.apache.asterix.common.exceptions.CompilationException;
 import org.apache.asterix.common.functions.FunctionSignature;
+import org.apache.asterix.lang.common.base.Expression;
 import org.apache.asterix.lang.common.base.Statement;
 import org.apache.asterix.lang.common.struct.VarIdentifier;
 import org.apache.asterix.lang.common.visitor.base.ILangVisitor;
@@ -31,6 +32,7 @@
 
     private final FunctionSignature signature;
     private final String functionBody;
+    private final Expression functionBodyExpression;
     private final boolean ifNotExists;
     private final List<String> paramList;
 
@@ -39,9 +41,10 @@
     }
 
     public CreateFunctionStatement(FunctionSignature signature, 
List<VarIdentifier> parameterList, String functionBody,
-            boolean ifNotExists) {
+            Expression functionBodyExpression, boolean ifNotExists) {
         this.signature = signature;
         this.functionBody = functionBody;
+        this.functionBodyExpression = functionBodyExpression;
         this.ifNotExists = ifNotExists;
         this.paramList = new ArrayList<String>();
         for (VarIdentifier varId : parameterList) {
@@ -66,6 +69,10 @@
         return signature;
     }
 
+    public Expression getFunctionBodyExpression() {
+        return functionBodyExpression;
+    }
+
     @Override
     public <R, T> R accept(ILangVisitor<R, T> visitor, T arg) throws 
CompilationException {
         return visitor.visit(this, arg);
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 1ca9316..c24777c 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
@@ -27,7 +27,14 @@
 import org.apache.asterix.common.functions.FunctionConstants;
 import org.apache.asterix.common.functions.FunctionSignature;
 import org.apache.asterix.lang.common.base.Expression;
+import org.apache.asterix.lang.common.clause.LetClause;
+import org.apache.asterix.lang.common.expression.CallExpr;
+import org.apache.asterix.lang.common.expression.LiteralExpr;
+import org.apache.asterix.lang.common.expression.VariableExpr;
+import org.apache.asterix.lang.common.literal.StringLiteral;
+import org.apache.asterix.lang.common.statement.CreateFunctionStatement;
 import org.apache.asterix.lang.common.statement.FunctionDecl;
+import org.apache.asterix.lang.common.struct.VarIdentifier;
 import org.apache.asterix.metadata.MetadataManager;
 import org.apache.asterix.metadata.MetadataTransactionContext;
 import org.apache.asterix.metadata.declared.MetadataProvider;
@@ -52,7 +59,7 @@
 
     @FunctionalInterface
     public interface IFunctionCollector {
-        Set<FunctionSignature> getFunctionCalls(Expression expression) throws 
CompilationException;
+        Set<CallExpr> getFunctionCalls(Expression expression) throws 
CompilationException;
     }
 
     @FunctionalInterface
@@ -95,8 +102,9 @@
         }
         String value = 
metadataProvider.getConfig().get(FunctionUtil.IMPORT_PRIVATE_FUNCTIONS);
         boolean includePrivateFunctions = (value != null) ? 
Boolean.valueOf(value.toLowerCase()) : false;
-        Set<FunctionSignature> functionCalls = 
functionCollector.getFunctionCalls(expression);
-        for (FunctionSignature signature : functionCalls) {
+        Set<CallExpr> functionCalls = 
functionCollector.getFunctionCalls(expression);
+        for (CallExpr functionCall : functionCalls) {
+            FunctionSignature signature = functionCall.getFunctionSignature();
             if (declaredFunctions != null && 
declaredFunctions.contains(signature)) {
                 continue;
             }
@@ -163,4 +171,36 @@
         return MetadataManager.INSTANCE.getFunction(mdTxnCtx, signature);
     }
 
+    /**
+     *
+     * Create lets to represent the parameters of a functions
+     * Enabling the function to be compiled to test for usability
+     *
+     * @param cfs
+     *            The statement that is trying to create a function
+     * @return
+     */
+    public static List<LetClause> 
createLetsToTestFunction(CreateFunctionStatement cfs) {
+        List<LetClause> lets = new ArrayList<>();
+        FunctionIdentifier getJobParameter = 
BuiltinFunctions.GET_JOB_PARAMETER;
+        FunctionSignature sig = new 
FunctionSignature(getJobParameter.getNamespace(), getJobParameter.getName(),
+                getJobParameter.getArity());
+
+        List<VariableExpr> varList = new ArrayList<>();
+        List<String> vars = cfs.getParamList();
+        for (int i = 0; i < vars.size(); i++) {
+            varList.add(new VariableExpr(new VarIdentifier(vars.get(i), i)));
+        }
+
+        for (VariableExpr var : varList) {
+            List<Expression> strListForCall = new ArrayList<>();
+            LiteralExpr l = new LiteralExpr(new 
StringLiteral(var.getVar().getValue()));
+            strListForCall.add(l);
+            Expression con = new CallExpr(sig, strListForCall);
+            LetClause let = new LetClause(var, con);
+            lets.add(let);
+        }
+        return lets;
+    }
+
 }
diff --git 
a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/GatherFunctionCallsVisitor.java
 
b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/GatherFunctionCallsVisitor.java
index 8842d86..3d149fb 100644
--- 
a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/GatherFunctionCallsVisitor.java
+++ 
b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/GatherFunctionCallsVisitor.java
@@ -23,7 +23,6 @@
 import java.util.Set;
 
 import org.apache.asterix.common.exceptions.CompilationException;
-import org.apache.asterix.common.functions.FunctionSignature;
 import org.apache.asterix.lang.common.base.Expression;
 import org.apache.asterix.lang.common.clause.GroupbyClause;
 import org.apache.asterix.lang.common.clause.LetClause;
@@ -53,11 +52,11 @@
 
 public class GatherFunctionCallsVisitor extends 
AbstractQueryExpressionVisitor<Void, Void> {
 
-    protected final Set<FunctionSignature> calls = new 
HashSet<FunctionSignature>();
+    protected final Set<CallExpr> calls = new HashSet<>();
 
     @Override
     public Void visit(CallExpr pf, Void arg) throws CompilationException {
-        calls.add(pf.getFunctionSignature());
+        calls.add(pf);
         for (Expression e : pf.getExprList()) {
             e.accept(this, arg);
         }
@@ -202,7 +201,7 @@
         return null;
     }
 
-    public Set<FunctionSignature> getCalls() {
+    public Set<CallExpr> getCalls() {
         return calls;
     }
 
diff --git 
a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/SqlppQueryRewriter.java
 
b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/SqlppQueryRewriter.java
index a2de694..90b3210 100644
--- 
a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/SqlppQueryRewriter.java
+++ 
b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/SqlppQueryRewriter.java
@@ -28,6 +28,7 @@
 import org.apache.asterix.lang.common.base.IQueryRewriter;
 import org.apache.asterix.lang.common.base.IReturningStatement;
 import org.apache.asterix.lang.common.clause.LetClause;
+import org.apache.asterix.lang.common.expression.CallExpr;
 import org.apache.asterix.lang.common.rewrites.LangRewritingContext;
 import org.apache.asterix.lang.common.statement.FunctionDecl;
 import org.apache.asterix.lang.common.util.FunctionUtil;
@@ -247,13 +248,14 @@
         declaredFunctions.removeAll(usedStoredFunctionDecls);
     }
 
-    private Set<FunctionSignature> getFunctionCalls(Expression expression) 
throws CompilationException {
+    @Override
+    public Set<CallExpr> getFunctionCalls(Expression expression) throws 
CompilationException {
         GatherFunctionCalls gfc = new GatherFunctionCalls();
         expression.accept(gfc, null);
         return gfc.getCalls();
     }
 
-    private static class GatherFunctionCalls extends 
GatherFunctionCallsVisitor implements ISqlppVisitor<Void, Void> {
+    public static class GatherFunctionCalls extends GatherFunctionCallsVisitor 
implements ISqlppVisitor<Void, Void> {
 
         public GatherFunctionCalls() {
         }
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj 
b/asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj
index 7ac8c57..a74c335 100644
--- a/asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj
+++ b/asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj
@@ -767,7 +767,7 @@
       signature = new FunctionSignature(fctName.dataverse, fctName.function, 
paramList.size());
       getCurrentScope().addFunctionDescriptor(signature, false);
       removeCurrentScope();
-      return new CreateFunctionStatement(signature, paramList, functionBody, 
ifNotExists);
+      return new CreateFunctionStatement(signature, paramList, functionBody, 
functionBodyExpr, ifNotExists);
     }
 }
 
diff --git 
a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/functions/BuiltinFunctions.java
 
b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/functions/BuiltinFunctions.java
index e59c600..fb5f830 100644
--- 
a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/functions/BuiltinFunctions.java
+++ 
b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/functions/BuiltinFunctions.java
@@ -334,7 +334,8 @@
     public static final FunctionIdentifier STRING_SPLIT = new 
FunctionIdentifier(FunctionConstants.ASTERIX_NS, "split",
             2);
 
-    public static final FunctionIdentifier DATASET = new 
FunctionIdentifier(FunctionConstants.ASTERIX_NS, "dataset", 1);
+    public static final FunctionIdentifier DATASET =
+            new FunctionIdentifier(FunctionConstants.ASTERIX_NS, 
FunctionConstants.DATASET, 1);
     public static final FunctionIdentifier FEED_COLLECT = new 
FunctionIdentifier(FunctionConstants.ASTERIX_NS,
             "feed-collect", 6);
     public static final FunctionIdentifier FEED_INTERCEPT = new 
FunctionIdentifier(FunctionConstants.ASTERIX_NS,

-- 
To view, visit https://asterix-gerrit.ics.uci.edu/2197
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ia83f9386e63072ed74ab85094e0bcc016cb1faec
Gerrit-PatchSet: 1
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Steven Jacobs <[email protected]>

Reply via email to