This is an automated email from the ASF dual-hosted git repository.
ggalvizo 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 0709742d83 [NO-ISSUE][LANG] Adding hook to extend AST rewrite context.
0709742d83 is described below
commit 0709742d832c77d04fd329b4774b401574c7f325
Author: ggalvizo <[email protected]>
AuthorDate: Wed Jun 8 17:40:48 2022 -0500
[NO-ISSUE][LANG] Adding hook to extend AST rewrite context.
- user model changes: no
- storage format changes: no
- interface changes: no
Details:
- Adding hook for AsterixDB extensions to extend the behavior of
"LangRewritingContext".
Change-Id: Iab8c11ee9d111a2c3b4abc58deaaf3dfe9d96da5
Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/16443
Contrib: Jenkins <[email protected]>
Integration-Tests: Jenkins <[email protected]>
Tested-by: Jenkins <[email protected]>
Reviewed-by: Dmitry Lychagin <[email protected]>
---
.../apache/asterix/api/common/APIFramework.java | 13 +++------
.../asterix/app/translator/QueryTranslator.java | 34 ++++++++++++++++------
.../lang/common/rewrites/LangRewritingContext.java | 2 +-
3 files changed, 30 insertions(+), 19 deletions(-)
diff --git
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/common/APIFramework.java
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/common/APIFramework.java
index ce86d24c60..8716f788a3 100644
---
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/common/APIFramework.java
+++
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/common/APIFramework.java
@@ -62,9 +62,7 @@ import
org.apache.asterix.lang.common.base.IReturningStatement;
import org.apache.asterix.lang.common.base.IRewriterFactory;
import org.apache.asterix.lang.common.base.Statement;
import org.apache.asterix.lang.common.rewrites.LangRewritingContext;
-import org.apache.asterix.lang.common.statement.FunctionDecl;
import org.apache.asterix.lang.common.statement.Query;
-import org.apache.asterix.lang.common.statement.ViewDecl;
import org.apache.asterix.lang.common.struct.VarIdentifier;
import org.apache.asterix.metadata.declared.MetadataProvider;
import org.apache.asterix.om.base.IAObject;
@@ -161,10 +159,9 @@ public class APIFramework {
}
}
- public Pair<IReturningStatement, Integer> reWriteQuery(List<FunctionDecl>
declaredFunctions,
- List<ViewDecl> declaredViews, MetadataProvider metadataProvider,
IReturningStatement q,
- SessionOutput output, boolean allowNonStoredUdfCalls, boolean
inlineUdfsAndViews,
- Collection<VarIdentifier> externalVars, IWarningCollector
warningCollector) throws CompilationException {
+ public Pair<IReturningStatement, Integer>
reWriteQuery(LangRewritingContext langRewritingContext,
+ IReturningStatement q, SessionOutput output, boolean
allowNonStoredUdfCalls, boolean inlineUdfsAndViews,
+ Collection<VarIdentifier> externalVars) throws
CompilationException {
if (q == null) {
return null;
}
@@ -173,9 +170,7 @@ public class APIFramework {
generateExpressionTree(q);
}
IQueryRewriter rw = rewriterFactory.createQueryRewriter();
- LangRewritingContext rwCtx = new
LangRewritingContext(metadataProvider, declaredFunctions, declaredViews,
- warningCollector, q.getVarCounter());
- rw.rewrite(rwCtx, q, allowNonStoredUdfCalls, inlineUdfsAndViews,
externalVars);
+ rw.rewrite(langRewritingContext, q, allowNonStoredUdfCalls,
inlineUdfsAndViews, externalVars);
return new Pair<>(q, q.getVarCounter());
}
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 2ed188b9dd..8a010caeda 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
@@ -110,6 +110,7 @@ import
org.apache.asterix.lang.common.expression.IndexedTypeExpression;
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.rewrites.LangRewritingContext;
import org.apache.asterix.lang.common.statement.AdapterDropStatement;
import org.apache.asterix.lang.common.statement.CompactStatement;
import org.apache.asterix.lang.common.statement.ConnectFeedStatement;
@@ -554,6 +555,13 @@ public class QueryTranslator extends
AbstractLangTranslator implements IStatemen
config.put(pname, pvalue);
}
+ protected LangRewritingContext createLangRewritingContext(MetadataProvider
metadataProvider,
+ List<FunctionDecl> declaredFunctions, List<ViewDecl>
declaredViews, IWarningCollector warningCollector,
+ int varCounter) {
+ return new LangRewritingContext(metadataProvider, declaredFunctions,
declaredViews, warningCollector,
+ varCounter);
+ }
+
protected Pair<IAWriterFactory, FileSplit> handleWriteStatement(Statement
stmt)
throws InstantiationException, IllegalAccessException,
ClassNotFoundException {
WriteStatement ws = (WriteStatement) stmt;
@@ -2736,8 +2744,10 @@ public class QueryTranslator extends
AbstractLangTranslator implements IStatemen
IQueryRewriter queryRewriter =
rewriterFactory.createQueryRewriter();
Query wrappedQuery =
queryRewriter.createViewAccessorQuery(viewDecl);
metadataProvider.setDefaultDataverse(dv);
- apiFramework.reWriteQuery(declaredFunctions,
Collections.singletonList(viewDecl), metadataProvider,
- wrappedQuery, sessionOutput, false, false,
Collections.emptyList(), warningCollector);
+ LangRewritingContext langRewritingContext =
createLangRewritingContext(metadataProvider, declaredFunctions,
+ Collections.singletonList(viewDecl), warningCollector,
wrappedQuery.getVarCounter());
+ apiFramework.reWriteQuery(langRewritingContext, wrappedQuery,
sessionOutput, false, false,
+ Collections.emptyList());
List<List<Triple<DataverseName, String, String>>> dependencies =
ViewUtil.getViewDependencies(viewDecl, foreignKeys,
queryRewriter);
@@ -3011,8 +3021,10 @@ public class QueryTranslator extends
AbstractLangTranslator implements IStatemen
fdList.addAll(declaredFunctions);
fdList.add(fd);
metadataProvider.setDefaultDataverse(dv);
- apiFramework.reWriteQuery(fdList, null, metadataProvider,
wrappedQuery, sessionOutput, false, false,
- Collections.emptyList(), warningCollector);
+ LangRewritingContext langRewritingContext =
createLangRewritingContext(metadataProvider, fdList, null,
+ warningCollector, wrappedQuery.getVarCounter());
+ apiFramework.reWriteQuery(langRewritingContext, wrappedQuery,
sessionOutput, false, false,
+ Collections.emptyList());
List<List<Triple<DataverseName, String, String>>> dependencies
=
FunctionUtil.getFunctionDependencies(fd,
queryRewriter);
@@ -3750,8 +3762,10 @@ public class QueryTranslator extends
AbstractLangTranslator implements IStatemen
Map<VarIdentifier, IAObject> externalVars =
createExternalVariables(query, stmtParams);
// Query Rewriting (happens under the same ongoing metadata
transaction)
- Pair<IReturningStatement, Integer> rewrittenResult =
apiFramework.reWriteQuery(declaredFunctions, null,
- metadataProvider, query, sessionOutput, true, true,
externalVars.keySet(), warningCollector);
+ LangRewritingContext langRewritingContext =
createLangRewritingContext(metadataProvider, declaredFunctions,
+ null, warningCollector, query.getVarCounter());
+ Pair<IReturningStatement, Integer> rewrittenResult =
apiFramework.reWriteQuery(langRewritingContext, query,
+ sessionOutput, true, true, externalVars.keySet());
// Query Compilation (happens under the same ongoing metadata
transaction)
return apiFramework.compileQuery(clusterInfoCollector,
metadataProvider, (Query) rewrittenResult.first,
@@ -3759,7 +3773,7 @@ public class QueryTranslator extends
AbstractLangTranslator implements IStatemen
responsePrinter, warningCollector, requestParameters);
}
- private JobSpecification rewriteCompileInsertUpsert(IClusterInfoCollector
clusterInfoCollector,
+ protected JobSpecification
rewriteCompileInsertUpsert(IClusterInfoCollector clusterInfoCollector,
MetadataProvider metadataProvider, InsertStatement insertUpsert,
Map<String, IAObject> stmtParams)
throws AlgebricksException, ACIDException {
SourceLocation sourceLoc = insertUpsert.getSourceLocation();
@@ -3767,8 +3781,10 @@ public class QueryTranslator extends
AbstractLangTranslator implements IStatemen
Map<VarIdentifier, IAObject> externalVars =
createExternalVariables(insertUpsert, stmtParams);
// Insert/upsert statement rewriting (happens under the same ongoing
metadata transaction)
- Pair<IReturningStatement, Integer> rewrittenResult =
apiFramework.reWriteQuery(declaredFunctions, null,
- metadataProvider, insertUpsert, sessionOutput, true, true,
externalVars.keySet(), warningCollector);
+ LangRewritingContext langRewritingContext =
createLangRewritingContext(metadataProvider, declaredFunctions,
+ null, warningCollector, insertUpsert.getVarCounter());
+ Pair<IReturningStatement, Integer> rewrittenResult =
apiFramework.reWriteQuery(langRewritingContext,
+ insertUpsert, sessionOutput, true, true,
externalVars.keySet());
InsertStatement rewrittenInsertUpsert = (InsertStatement)
rewrittenResult.first;
DataverseName dataverseName =
getActiveDataverseName(rewrittenInsertUpsert.getDataverseName());
diff --git
a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/rewrites/LangRewritingContext.java
b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/rewrites/LangRewritingContext.java
index 95cccb0f7a..19b3cfabf2 100644
---
a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/rewrites/LangRewritingContext.java
+++
b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/rewrites/LangRewritingContext.java
@@ -32,7 +32,7 @@ import org.apache.asterix.metadata.declared.MetadataProvider;
import org.apache.hyracks.algebricks.core.algebra.base.Counter;
import org.apache.hyracks.api.exceptions.IWarningCollector;
-public final class LangRewritingContext {
+public class LangRewritingContext {
private final MetadataProvider metadataProvider;
private final IWarningCollector warningCollector;
private final Map<FunctionSignature, FunctionDecl> declaredFunctions;