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;

Reply via email to