This is an automated email from the ASF dual-hosted git repository.
alsuliman pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/asterixdb.git
The following commit(s) were added to refs/heads/master by this push:
new 496a0536c7 [NO ISSUE]: Introduction of BUILT_IN_FUNCTION entity
496a0536c7 is described below
commit 496a0536c719be5eb4e74b757bff91e3781d6a62
Author: Janhavi Tripurwar <[email protected]>
AuthorDate: Wed Mar 5 16:54:51 2025 +0530
[NO ISSUE]: Introduction of BUILT_IN_FUNCTION entity
- user model changes: no
- storage format changes: no
- interface changes: no
Details:
- Refactor newFunction to consistently take function signature
- Add built-in functions to accessed entity
Ext-ref: MB-65507
Change-Id: Icf7d0ccef632cf4d95f215b9c0f24ae6fe9d5878
Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/19490
Integration-Tests: Jenkins <[email protected]>
Tested-by: Jenkins <[email protected]>
Reviewed-by: Janhavi Tripurwar <[email protected]>
Reviewed-by: Ali Alsuliman <[email protected]>
---
.../asterix/app/translator/QueryTranslator.java | 4 +--
.../common/functions/FunctionSignature.java | 2 +-
.../asterix/lang/common/util/ExpressionUtils.java | 11 ++++--
.../rewrites/visitor/SqlppLoadAccessedDataset.java | 4 +--
.../asterix/metadata/entities/EntityDetails.java | 41 +++++++++++++++++++---
5 files changed, 49 insertions(+), 13 deletions(-)
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 c8885dc060..663876f5d2 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
@@ -3400,8 +3400,8 @@ public class QueryTranslator extends
AbstractLangTranslator implements IStatemen
}
MetadataManager.INSTANCE.updateFunction(mdTxnCtx, function);
}
- beforeTxnCommit(metadataProvider, creator,
- EntityDetails.newFunction(databaseName, dataverseName,
function.getName(), function.getArity()));
+
+ beforeTxnCommit(metadataProvider, creator,
EntityDetails.newFunction(functionSignature));
MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
if (LOGGER.isInfoEnabled()) {
LOGGER.info("Installed function: " + functionSignature);
diff --git
a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/functions/FunctionSignature.java
b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/functions/FunctionSignature.java
index 890890c19f..857482b671 100644
---
a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/functions/FunctionSignature.java
+++
b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/functions/FunctionSignature.java
@@ -139,7 +139,7 @@ public class FunctionSignature implements Serializable {
return createFunctionIdentifier(databaseName, dataverseName, name,
arity);
}
- private static FunctionIdentifier createFunctionIdentifier(String
databaseName, DataverseName dataverseName,
+ public static FunctionIdentifier createFunctionIdentifier(String
databaseName, DataverseName dataverseName,
String functionName, int arity) {
return new FunctionIdentifier(databaseName,
dataverseName.getCanonicalForm(), functionName, arity);
}
diff --git
a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/util/ExpressionUtils.java
b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/util/ExpressionUtils.java
index df7d6d84ff..a7de54124c 100644
---
a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/util/ExpressionUtils.java
+++
b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/util/ExpressionUtils.java
@@ -291,16 +291,17 @@ public class ExpressionUtils {
datasetReference.getDatasetName(),
null));
}
}
+ } else {
+ addFunctionAccessedEntity(metadataProvider,
signature);
}
} else {
if (seenFunctions.add(signature)) {
- String functionName = signature.getName() + "(" +
signature.getArity() + ")";
-
metadataProvider.addAccessedEntity(EntityDetails.newFunction(signature.getDatabaseName(),
- signature.getDataverseName(),
functionName, signature.getArity()));
+ addFunctionAccessedEntity(metadataProvider,
signature);
outFunctionDependencies.add(new
DependencyFullyQualifiedName(signature.getDatabaseName(),
signature.getDataverseName(),
signature.getName(),
Integer.toString(signature.getArity())));
}
+
}
break;
case WINDOW_EXPRESSION:
@@ -313,6 +314,10 @@ public class ExpressionUtils {
}
}
+ private static void addFunctionAccessedEntity(MetadataProvider
metadataProvider, FunctionSignature signature) {
+
metadataProvider.addAccessedEntity(EntityDetails.newFunction(signature));
+ }
+
public static boolean hasFunctionOrViewRecursion(Map<FunctionSignature,
FunctionDecl> functionDeclMap,
Map<DatasetFullyQualifiedName, ViewDecl> viewDeclMap,
java.util.function.Function<Collection<AbstractCallExpression>,
GatherFunctionCallsVisitor> callVisitorFactory)
diff --git
a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SqlppLoadAccessedDataset.java
b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SqlppLoadAccessedDataset.java
index 1b1cf83959..986c3d15f0 100644
---
a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SqlppLoadAccessedDataset.java
+++
b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SqlppLoadAccessedDataset.java
@@ -98,9 +98,7 @@ public class SqlppLoadAccessedDataset extends
AbstractSqlppSimpleExpressionVisit
if (declaredFunctions.containsKey(signature)) {
return;
}
- String functionName =
EntityDetails.getFunctionNameWithArity(signature.getName(),
signature.getArity());
-
context.getMetadataProvider().addAccessedEntity(EntityDetails.newFunction(signature.getDatabaseName(),
- signature.getDataverseName(), functionName,
signature.getArity()));
+
context.getMetadataProvider().addAccessedEntity(EntityDetails.newFunction(signature));
}
}
}
diff --git
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/EntityDetails.java
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/EntityDetails.java
index c7e771b718..068fb200a8 100644
---
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/EntityDetails.java
+++
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/EntityDetails.java
@@ -18,7 +18,12 @@
*/
package org.apache.asterix.metadata.entities;
+import java.util.Objects;
+
+import org.apache.asterix.common.functions.FunctionConstants;
+import org.apache.asterix.common.functions.FunctionSignature;
import org.apache.asterix.common.metadata.DataverseName;
+import org.apache.asterix.om.functions.BuiltinFunctions;
/**
* This class provides static factory methods for creating entity details.
@@ -33,7 +38,8 @@ public class EntityDetails {
DATABASE,
DATAVERSE,
SYNONYM,
- INDEX
+ INDEX,
+ BUILT_IN_FUNCTION;
}
private final String databaseName;
@@ -75,9 +81,19 @@ public class EntityDetails {
return new EntityDetails(databaseName, dataverseName, viewName,
EntityType.VIEW);
}
- public static EntityDetails newFunction(String databaseName, DataverseName
dataverseName, String functionName,
- int functionArity) {
- return new EntityDetails(databaseName, dataverseName, functionName,
EntityType.FUNCTION, functionArity);
+ public static EntityDetails newFunction(FunctionSignature fs) {
+ boolean isBuiltInFunc = isBuiltinFunctionSignature(fs);
+ String databaseName = fs.getDatabaseName();
+ String functionName = fs.getName();
+ Integer functionArity = fs.getArity();
+ DataverseName dataverseName = fs.getDataverseName();
+ String functionNameWithArity = getFunctionNameWithArity(functionName,
functionArity);
+ if (isBuiltInFunc) {
+ return new EntityDetails(databaseName, dataverseName,
functionNameWithArity, EntityType.BUILT_IN_FUNCTION,
+ functionArity);
+ }
+ return new EntityDetails(databaseName, dataverseName,
functionNameWithArity, EntityType.FUNCTION,
+ functionArity);
}
public static EntityDetails newSynonym(String databaseName, DataverseName
dataverseName, String synonymName) {
@@ -112,7 +128,24 @@ public class EntityDetails {
return functionArity;
}
+ public static boolean isBuiltinFunctionSignature(FunctionSignature fs) {
+ return
isBuiltinFunctionDataverse(Objects.requireNonNull(fs.getDataverseName()))
+ ||
BuiltinFunctions.getBuiltinFunctionInfo(fs.createFunctionIdentifier()) != null;
+ }
+
+ private static boolean isBuiltinFunctionDataverse(DataverseName dataverse)
{
+ return FunctionConstants.ASTERIX_DV.equals(dataverse) ||
FunctionConstants.ALGEBRICKS_DV.equals(dataverse);
+ }
+
public static String getFunctionNameWithArity(String functionName, int
functionArity) {
return functionName + "(" + functionArity + ")";
}
+
+ public static String getFunctionNameWithoutArity(String
functionNameWithArity) {
+ int index = functionNameWithArity.indexOf('(');
+ if (index != -1) {
+ return functionNameWithArity.substring(0, index);
+ }
+ return functionNameWithArity;
+ }
}