>From Peeyush Gupta <[email protected]>:
Peeyush Gupta has uploaded this change for review. (
https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/19994 )
Change subject: WIP: Added extra validation for transform functions
......................................................................
WIP: Added extra validation for transform functions
Change-Id: I14263c99da76ac006225baf9ff9d5722c528a5d5
---
M
asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java
M
asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/SqlppQueryRewriter.java
M
asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/base/IQueryRewriter.java
3 files changed, 35 insertions(+), 13 deletions(-)
git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb
refs/changes/94/19994/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 547afec..ad0cd5f 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
@@ -113,15 +113,19 @@
import org.apache.asterix.external.util.ExternalDataUtils;
import org.apache.asterix.external.util.WriterValidationUtil;
import
org.apache.asterix.external.writer.printer.parquet.SchemaConverterVisitor;
+import org.apache.asterix.lang.common.base.Expression;
import org.apache.asterix.lang.common.base.IQueryRewriter;
import org.apache.asterix.lang.common.base.IReturningStatement;
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.expression.IndexedTypeExpression;
+import org.apache.asterix.lang.common.expression.LiteralExpr;
+import org.apache.asterix.lang.common.expression.RecordConstructor;
import org.apache.asterix.lang.common.expression.TypeExpression;
import org.apache.asterix.lang.common.expression.TypeReferenceExpression;
import org.apache.asterix.lang.common.expression.VariableExpr;
+import org.apache.asterix.lang.common.literal.MissingLiteral;
import org.apache.asterix.lang.common.rewrites.LangRewritingContext;
import org.apache.asterix.lang.common.statement.AdapterDropStatement;
import org.apache.asterix.lang.common.statement.AnalyzeDropStatement;
@@ -457,7 +461,7 @@
break;
case CREATE_FUNCTION:
handleCreateFunctionStatement(metadataProvider, stmt,
stmtRewriter, requestParameters,
- Creator.DEFAULT_CREATOR);
+ Creator.DEFAULT_CREATOR, hcc);
break;
case FUNCTION_DROP:
handleFunctionDropStatement(metadataProvider, stmt,
requestParameters);
@@ -3187,7 +3191,8 @@
}
public void handleCreateFunctionStatement(MetadataProvider
metadataProvider, Statement stmt,
- IStatementRewriter stmtRewriter, IRequestParameters
requestParameters, Creator creator) throws Exception {
+ IStatementRewriter stmtRewriter, IRequestParameters
requestParameters, Creator creator,
+ IHyracksClientConnection hcc) throws Exception {
CreateFunctionStatement cfs = (CreateFunctionStatement) stmt;
FunctionSignature signature = cfs.getFunctionSignature();
DataverseName funDataverse = signature.getDataverseName();
@@ -3220,7 +3225,7 @@
lockUtil.createFunctionBegin(lockManager, metadataProvider.getLocks(),
databaseName, dataverseName,
signature.getName(), libraryDatabaseName,
libraryDataverseName, libraryName);
try {
- doCreateFunction(metadataProvider, cfs, signature, stmtRewriter,
requestParameters, creator);
+ doCreateFunction(metadataProvider, cfs, signature, stmtRewriter,
requestParameters, creator, hcc);
} finally {
metadataProvider.getLocks().unlock();
metadataProvider.setDefaultNamespace(activeNamespace);
@@ -3229,7 +3234,7 @@
protected CreateResult doCreateFunction(MetadataProvider metadataProvider,
CreateFunctionStatement cfs,
FunctionSignature functionSignature, IStatementRewriter
stmtRewriter, IRequestParameters requestParameters,
- Creator creator) throws Exception {
+ Creator creator, IHyracksClientConnection hcc) throws Exception {
DataverseName dataverseName = functionSignature.getDataverseName();
String databaseName = functionSignature.getDatabaseName();
SourceLocation sourceLoc = cfs.getSourceLocation();
@@ -3373,7 +3378,15 @@
cfs.isTransform());
fd.setSourceLocation(sourceLoc);
- Query wrappedQuery =
queryRewriter.createFunctionAccessorQuery(fd);
+ int arity = functionSignature.getArity();
+ List<Expression> args;
+ if (cfs.isTransform()) {
+ args = Collections.singletonList(new
RecordConstructor(Collections.emptyList()));
+ } else {
+ args = arity == FunctionIdentifier.VARARGS ?
Collections.emptyList()
+ : Collections.nCopies(arity, new
LiteralExpr(MissingLiteral.INSTANCE));
+ }
+ Query wrappedQuery =
queryRewriter.createFunctionAccessorQuery(fd, args);
List<FunctionDecl> fdList = new
ArrayList<>(declaredFunctions.size() + 1);
fdList.addAll(declaredFunctions);
fdList.add(fd);
@@ -3392,6 +3405,9 @@
"Transform function definition can not use
collections/views");
}
validateTransformFunction(metadataProvider,
rewrittenQuery, sourceLoc);
+ apiFramework.compileQuery(hcc, metadataProvider, (Query)
rewrittenQuery.first,
+ rewrittenQuery.second, null, sessionOutput, null,
null, responsePrinter, warningCollector,
+ requestParameters, jobFlags);
}
appCtx.getReceptionist().ensureAuthorized(requestParameters,
metadataProvider);
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 0f8e3e9..d723dbb 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,6 +19,7 @@
package org.apache.asterix.lang.common.base;
import java.util.Collection;
+import java.util.List;
import java.util.Set;
import org.apache.asterix.common.api.INamespaceResolver;
@@ -65,7 +66,7 @@
String toFunctionParameterName(VarIdentifier paramVar);
- Query createFunctionAccessorQuery(FunctionDecl functionDecl);
+ Query createFunctionAccessorQuery(FunctionDecl functionDecl,
List<Expression> args);
Query createViewAccessorQuery(ViewDecl viewDecl, INamespaceResolver
namespaceResolver);
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 15865a2..9c441b2 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
@@ -44,9 +44,7 @@
import org.apache.asterix.lang.common.expression.AbstractCallExpression;
import org.apache.asterix.lang.common.expression.CallExpr;
import org.apache.asterix.lang.common.expression.FieldAccessor;
-import org.apache.asterix.lang.common.expression.LiteralExpr;
import org.apache.asterix.lang.common.expression.VariableExpr;
-import org.apache.asterix.lang.common.literal.MissingLiteral;
import org.apache.asterix.lang.common.rewrites.LangRewritingContext;
import org.apache.asterix.lang.common.statement.DatasetDecl;
import org.apache.asterix.lang.common.statement.FunctionDecl;
@@ -95,7 +93,6 @@
import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
import org.apache.hyracks.algebricks.common.utils.Pair;
import org.apache.hyracks.algebricks.common.utils.Triple;
-import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
import org.apache.hyracks.api.exceptions.SourceLocation;
import org.apache.hyracks.util.LogRedactionUtil;
import org.apache.logging.log4j.LogManager;
@@ -628,12 +625,11 @@
}
@Override
- public Query createFunctionAccessorQuery(FunctionDecl functionDecl) {
+ public Query createFunctionAccessorQuery(FunctionDecl functionDecl,
List<Expression> args) {
// dataverse_name.function_name(MISSING, ... MISSING)
FunctionSignature functionSignature = functionDecl.getSignature();
- int arity = functionSignature.getArity();
- List<Expression> args = arity == FunctionIdentifier.VARARGS ?
Collections.emptyList()
- : Collections.nCopies(arity, new
LiteralExpr(MissingLiteral.INSTANCE));
+ // Expression emptyRecordExpr = new
RecordConstructor(Collections.emptyList());
+ //
CallExpr fcall = new CallExpr(functionSignature, args);
fcall.setSourceLocation(functionDecl.getSourceLocation());
return ExpressionUtils.createWrappedQuery(fcall,
functionDecl.getSourceLocation());
--
To view, visit https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/19994
To unsubscribe, or for help writing mail filters, visit
https://asterix-gerrit.ics.uci.edu/settings
Gerrit-Project: asterixdb
Gerrit-Branch: ionic
Gerrit-Change-Id: I14263c99da76ac006225baf9ff9d5722c528a5d5
Gerrit-Change-Number: 19994
Gerrit-PatchSet: 1
Gerrit-Owner: Peeyush Gupta <[email protected]>
Gerrit-MessageType: newchange