You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@asterixdb.apache.org by ti...@apache.org on 2018/02/22 21:51:46 UTC

asterixdb git commit: [NO ISSUE] Use FunctionSignature more often

Repository: asterixdb
Updated Branches:
  refs/heads/master 8cf585195 -> a81b7954b


[NO ISSUE] Use FunctionSignature more often

- user model changes: no
- storage format changes: no
- interface changes: yes

The metadata entity for a function now accepts a FunctionSignature.
It used to accept a dataverse, a function name, and an arity.

Change-Id: If00a914a1e56190ecd12c2687c32b4edc2895018
Reviewed-on: https://asterix-gerrit.ics.uci.edu/2380
Sonar-Qube: Jenkins <je...@fulliautomatix.ics.uci.edu>
Tested-by: Jenkins <je...@fulliautomatix.ics.uci.edu>
Integration-Tests: Jenkins <je...@fulliautomatix.ics.uci.edu>
Contrib: Jenkins <je...@fulliautomatix.ics.uci.edu>
Reviewed-by: Murtadha Hubail <mh...@apache.org>


Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo
Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/a81b7954
Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/a81b7954
Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/a81b7954

Branch: refs/heads/master
Commit: a81b7954b8a8ef0eeaf3f3857f7182d670274ae0
Parents: 8cf5851
Author: Till Westmann <ti...@apache.org>
Authored: Sat Feb 10 08:20:44 2018 -0800
Committer: Till Westmann <ti...@apache.org>
Committed: Thu Feb 22 13:46:26 2018 -0800

----------------------------------------------------------------------
 .../app/external/ExternalLibraryUtils.java      |  8 ++++--
 .../asterix/app/translator/QueryTranslator.java | 28 +++++++++----------
 .../metadata/MetadataTransactionContext.java    |  3 +-
 .../metadata/entities/FeedConnection.java       | 10 ++-----
 .../asterix/metadata/entities/Function.java     | 29 ++++++++++----------
 .../FunctionTupleTranslator.java                |  6 ++--
 .../ExternalFunctionCompilerUtilTest.java       |  5 ++--
 7 files changed, 42 insertions(+), 47 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/asterixdb/blob/a81b7954/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/external/ExternalLibraryUtils.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/external/ExternalLibraryUtils.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/external/ExternalLibraryUtils.java
index c9f777d..e60444f 100755
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/external/ExternalLibraryUtils.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/external/ExternalLibraryUtils.java
@@ -245,9 +245,11 @@ public class ExternalLibraryUtils {
                     for (String arg : fargs) {
                         args.add(arg);
                     }
-                    Function f = new Function(dataverse, libraryName + "#" + function.getName().trim(), args.size(),
-                            args, function.getReturnType().trim(), function.getDefinition().trim(),
-                            library.getLanguage().trim(), function.getFunctionType().trim(), null);
+                    FunctionSignature signature = new FunctionSignature(dataverse,
+                            libraryName + "#" + function.getName().trim(), args.size());
+                    Function f = new Function(signature, args, function.getReturnType().trim(),
+                            function.getDefinition().trim(), library.getLanguage().trim(),
+                            function.getFunctionType().trim(), null);
                     MetadataManager.INSTANCE.addFunction(mdTxnCtx, f);
                     if (LOGGER.isInfoEnabled()) {
                         LOGGER.info("Installed function: " + libraryName + "#" + function.getName().trim());

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/a81b7954/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java
----------------------------------------------------------------------
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 7bf65c7..b64f828 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
@@ -1212,8 +1212,7 @@ public class QueryTranslator extends AbstractLangTranslator implements IStatemen
             List<Function> functionsInDataverse =
                     MetadataManager.INSTANCE.getDataverseFunctions(mdTxnCtx, dataverseName);
             for (Function function : functionsInDataverse) {
-                if (checkWhetherFunctionIsBeingUsed(mdTxnCtx, function.getDataverseName(), function.getName(),
-                        function.getArity(), dataverseName)) {
+                if (isFunctionUsed(mdTxnCtx, function.getSignature(), dataverseName)) {
                     throw new MetadataException(ErrorCode.METADATA_DROP_FUCTION_IN_USE,
                             function.getDataverseName() + "." + function.getName() + "@" + function.getArity());
                 }
@@ -1667,14 +1666,14 @@ public class QueryTranslator extends AbstractLangTranslator implements IStatemen
 
     protected void handleCreateFunctionStatement(MetadataProvider metadataProvider, Statement stmt) throws Exception {
         CreateFunctionStatement cfs = (CreateFunctionStatement) stmt;
-        String dataverse = getActiveDataverseName(cfs.getFunctionSignature().getNamespace());
-        cfs.getFunctionSignature().setNamespace(dataverse);
-        String functionName = cfs.getFunctionSignature().getName();
+        FunctionSignature signature = cfs.getFunctionSignature();
+        String dataverse = getActiveDataverseName(signature.getNamespace());
+        signature.setNamespace(dataverse);
 
         MetadataTransactionContext mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
         metadataProvider.setMetadataTxnContext(mdTxnCtx);
         MetadataLockUtil.functionStatementBegin(lockManager, metadataProvider.getLocks(), dataverse,
-                dataverse + "." + functionName);
+                dataverse + "." + signature.getName());
         try {
             Dataverse dv = MetadataManager.INSTANCE.getDataverse(mdTxnCtx, dataverse);
             if (dv == null) {
@@ -1696,10 +1695,10 @@ public class QueryTranslator extends AbstractLangTranslator implements IStatemen
             List<List<List<String>>> dependencies = FunctionUtil.getFunctionDependencies(
                     rewriterFactory.createQueryRewriter(), cfs.getFunctionBodyExpression(), metadataProvider);
 
-            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,
-                    FunctionKind.SCALAR.toString(), dependencies);
+            final String language =
+                    rewriterFactory instanceof SqlppRewriterFactory ? Function.LANGUAGE_SQLPP : Function.LANGUAGE_AQL;
+            Function function = new Function(signature, cfs.getParamList(), Function.RETURNTYPE_VOID,
+                    cfs.getFunctionBody(), language, FunctionKind.SCALAR.toString(), dependencies);
             MetadataManager.INSTANCE.addFunction(mdTxnCtx, function);
 
             MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
@@ -1712,8 +1711,8 @@ public class QueryTranslator extends AbstractLangTranslator implements IStatemen
         }
     }
 
-    protected boolean checkWhetherFunctionIsBeingUsed(MetadataTransactionContext ctx, String dataverseName,
-            String functionName, int arity, String currentDataverse) throws AlgebricksException {
+    protected boolean isFunctionUsed(MetadataTransactionContext ctx, FunctionSignature signature,
+            String currentDataverse) throws AlgebricksException {
         List<Dataverse> allDataverses = MetadataManager.INSTANCE.getDataverses(ctx);
         for (Dataverse dataverse : allDataverses) {
             if (currentDataverse != null && dataverse.getDataverseName().equals(currentDataverse)) {
@@ -1724,7 +1723,7 @@ public class QueryTranslator extends AbstractLangTranslator implements IStatemen
                 List<FeedConnection> feedConnections = MetadataManager.INSTANCE.getFeedConections(ctx,
                         dataverse.getDataverseName(), feed.getFeedName());
                 for (FeedConnection conn : feedConnections) {
-                    if (conn.containsFunction(dataverseName, functionName, arity)) {
+                    if (conn.containsFunction(signature)) {
                         return true;
                     }
                 }
@@ -1745,8 +1744,7 @@ public class QueryTranslator extends AbstractLangTranslator implements IStatemen
             Function function = MetadataManager.INSTANCE.getFunction(mdTxnCtx, signature);
             if (function == null && !stmtDropFunction.getIfExists()) {
                 throw new AlgebricksException("Unknonw function " + signature);
-            } else if (checkWhetherFunctionIsBeingUsed(mdTxnCtx, signature.getNamespace(), signature.getName(),
-                    signature.getArity(), null)) {
+            } else if (isFunctionUsed(mdTxnCtx, signature, null)) {
                 throw new MetadataException(ErrorCode.METADATA_DROP_FUCTION_IN_USE, signature);
             } else {
                 MetadataManager.INSTANCE.dropFunction(mdTxnCtx, signature);

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/a81b7954/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataTransactionContext.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataTransactionContext.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataTransactionContext.java
index 961a1ee..a1eb425 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataTransactionContext.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataTransactionContext.java
@@ -157,8 +157,7 @@ public class MetadataTransactionContext extends MetadataCache {
     }
 
     public void dropFunction(FunctionSignature signature) {
-        Function function = new Function(signature.getNamespace(), signature.getName(), signature.getArity(), null,
-                null, null, null, null, null);
+        Function function = new Function(signature, null, null, null, null, null, null);
         droppedCache.addFunctionIfNotExists(function);
         logAndApply(new MetadataLogicalOperation(function, false));
     }

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/a81b7954/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/FeedConnection.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/FeedConnection.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/FeedConnection.java
index 8e14ee5..7572a9a 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/FeedConnection.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/FeedConnection.java
@@ -113,13 +113,7 @@ public class FeedConnection implements IMetadataEntity<FeedConnection> {
         return feedId;
     }
 
-    public boolean containsFunction(String dataverseName, String functionName, int arity) {
-        for (FunctionSignature signature : this.appliedFunctions) {
-            if (signature.getNamespace().equals(dataverseName) && signature.getName().equals(functionName)
-                    && signature.getArity() == arity) {
-                return true;
-            }
-        }
-        return false;
+    public boolean containsFunction(FunctionSignature signature) {
+        return appliedFunctions.contains(signature);
     }
 }

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/a81b7954/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/Function.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/Function.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/Function.java
index 8bdbaba..b5721c0 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/Function.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/Function.java
@@ -21,6 +21,7 @@ package org.apache.asterix.metadata.entities;
 import java.util.ArrayList;
 import java.util.List;
 
+import org.apache.asterix.common.functions.FunctionSignature;
 import org.apache.asterix.metadata.MetadataCache;
 import org.apache.asterix.metadata.api.IMetadataEntity;
 
@@ -33,9 +34,7 @@ public class Function implements IMetadataEntity<Function> {
     public static final String RETURNTYPE_VOID = "VOID";
     public static final String NOT_APPLICABLE = "N/A";
 
-    private final String dataverse;
-    private final String name;
-    private final int arity;
+    private final FunctionSignature signature;
     private final List<String> params;
     private final List<List<List<String>>> dependencies;
     private final String body;
@@ -43,16 +42,14 @@ public class Function implements IMetadataEntity<Function> {
     private final String language;
     private final String kind;
 
-    public Function(String dataverseName, String functionName, int arity, List<String> params, String returnType,
-            String functionBody, String language, String functionKind, List<List<List<String>>> dependencies) {
-        this.dataverse = dataverseName;
-        this.name = functionName;
+    public Function(FunctionSignature signature, List<String> params, String returnType, String functionBody,
+            String language, String functionKind, List<List<List<String>>> dependencies) {
+        this.signature = signature;
         this.params = params;
         this.body = functionBody;
         this.returnType = returnType == null ? RETURNTYPE_VOID : returnType;
         this.language = language;
         this.kind = functionKind;
-        this.arity = arity;
         if (dependencies == null) {
             this.dependencies = new ArrayList<>();
             this.dependencies.add(new ArrayList<>());
@@ -62,12 +59,20 @@ public class Function implements IMetadataEntity<Function> {
         }
     }
 
+    public FunctionSignature getSignature() {
+        return signature;
+    }
+
     public String getDataverseName() {
-        return dataverse;
+        return signature.getNamespace();
     }
 
     public String getName() {
-        return name;
+        return signature.getName();
+    }
+
+    public int getArity() {
+        return signature.getArity();
     }
 
     public List<String> getParams() {
@@ -90,10 +95,6 @@ public class Function implements IMetadataEntity<Function> {
         return language;
     }
 
-    public int getArity() {
-        return arity;
-    }
-
     public String getKind() {
         return kind;
     }

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/a81b7954/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/FunctionTupleTranslator.java
----------------------------------------------------------------------
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 273c78a..120aa08 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
@@ -26,6 +26,7 @@ import java.util.ArrayList;
 import java.util.List;
 
 import org.apache.asterix.builders.OrderedListBuilder;
+import org.apache.asterix.common.functions.FunctionSignature;
 import org.apache.asterix.formats.nontagged.SerializerDeserializerProvider;
 import org.apache.asterix.metadata.bootstrap.MetadataPrimaryIndexes;
 import org.apache.asterix.metadata.bootstrap.MetadataRecordTypes;
@@ -136,9 +137,8 @@ public class FunctionTupleTranslator extends AbstractTupleTranslator<Function> {
 
         }
 
-        return new Function(dataverseName, functionName, Integer.parseInt(arity), params, returnType, definition,
-                language, functionKind, dependencies);
-
+        FunctionSignature signature = new FunctionSignature(dataverseName, functionName, Integer.parseInt(arity));
+        return new Function(signature, params, returnType, definition, language, functionKind, dependencies);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/a81b7954/asterixdb/asterix-metadata/src/test/java/org/apache/asterix/metadata/functions/ExternalFunctionCompilerUtilTest.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-metadata/src/test/java/org/apache/asterix/metadata/functions/ExternalFunctionCompilerUtilTest.java b/asterixdb/asterix-metadata/src/test/java/org/apache/asterix/metadata/functions/ExternalFunctionCompilerUtilTest.java
index 5e5b26a..b4bae90 100644
--- a/asterixdb/asterix-metadata/src/test/java/org/apache/asterix/metadata/functions/ExternalFunctionCompilerUtilTest.java
+++ b/asterixdb/asterix-metadata/src/test/java/org/apache/asterix/metadata/functions/ExternalFunctionCompilerUtilTest.java
@@ -20,6 +20,7 @@ package org.apache.asterix.metadata.functions;
 
 import java.util.LinkedList;
 
+import org.apache.asterix.common.functions.FunctionSignature;
 import org.apache.asterix.common.transactions.TxnId;
 import org.apache.asterix.metadata.MetadataTransactionContext;
 import org.apache.asterix.metadata.entities.Function;
@@ -35,8 +36,8 @@ public class ExternalFunctionCompilerUtilTest {
     public void test() throws AlgebricksException {
         // given
         MetadataTransactionContext txnCtx = new MetadataTransactionContext(new TxnId(1));
-        Function function =
-                new Function("test", "test", 0, new LinkedList<>(), "{{ASTRING}}", "", "JAVA", "SCALAR", null);
+        FunctionSignature signature = new FunctionSignature("test", "test", 0);
+        Function function = new Function(signature, new LinkedList<>(), "{{ASTRING}}", "", "JAVA", "SCALAR", null);
 
         // when
         ExternalScalarFunctionInfo info =