You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@asterixdb.apache.org by AsterixDB Code Review <do...@asterix-gerrit.ics.uci.edu> on 2022/06/02 17:55:38 UTC
Change in asterixdb[master]: [NO-ISSUE][LANG] Adding hook to extend AST rewrite context.
From Glenn Galvizo <gg...@uci.edu>:
Glenn Galvizo has uploaded this change for review. ( https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/16443 )
Change subject: [NO-ISSUE][LANG] Adding hook to extend AST rewrite context.
......................................................................
[NO-ISSUE][LANG] Adding hook to extend AST rewrite context.
- user model changes: no
- storage format changes: no
- interface changes: yes
Details:
- Adding hook for AsterixDB extensions to extend the behavior of
"LangRewritingContext".
Change-Id: Iab8c11ee9d111a2c3b4abc58deaaf3dfe9d96da5
---
M asterixdb/asterix-app/src/main/java/org/apache/asterix/api/common/APIFramework.java
M asterixdb/asterix-app/src/main/java/org/apache/asterix/api/java/AsterixJavaClient.java
M asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java
M asterixdb/asterix-app/src/test/java/org/apache/asterix/api/common/APIFrameworkTest.java
M asterixdb/asterix-app/src/test/java/org/apache/asterix/test/sqlpp/ParserTestExecutor.java
M asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/base/IRewriterFactory.java
A asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/rewrites/ILangRewritingContextFactory.java
M asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/rewrites/LangRewritingContext.java
A asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/rewrites/LangRewritingContextFactory.java
M asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/SqlppRewriterFactory.java
10 files changed, 126 insertions(+), 29 deletions(-)
git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb refs/changes/43/16443/1
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 ce86d24..14a97ae 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
@@ -61,10 +61,8 @@
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.rewrites.ILangRewritingContextFactory;
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;
@@ -128,14 +126,17 @@
private final ILangExpressionToPlanTranslatorFactory translatorFactory;
private final IRuleSetFactory ruleSetFactory;
private final Set<String> configurableParameterNames;
+ private final ILangRewritingContextFactory rewriteContextFactory;
private final ExecutionPlans executionPlans;
- public APIFramework(ILangCompilationProvider compilationProvider) {
+ public APIFramework(ILangCompilationProvider compilationProvider,
+ ILangRewritingContextFactory rewriteContextFactory) {
this.rewriterFactory = compilationProvider.getRewriterFactory();
this.astPrintVisitorFactory = compilationProvider.getAstPrintVisitorFactory();
this.translatorFactory = compilationProvider.getExpressionToPlanTranslatorFactory();
this.ruleSetFactory = compilationProvider.getRuleSetFactory();
this.configurableParameterNames = compilationProvider.getCompilerOptions();
+ this.rewriteContextFactory = rewriteContextFactory;
executionPlans = new ExecutionPlans();
}
@@ -161,10 +162,9 @@
}
}
- 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(IReturningStatement q, SessionOutput output,
+ boolean allowNonStoredUdfCalls, boolean inlineUdfsAndViews, Collection<VarIdentifier> externalVars)
+ throws CompilationException {
if (q == null) {
return null;
}
@@ -173,9 +173,8 @@
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(rewriteContextFactory.createRewritingContext(), q, allowNonStoredUdfCalls, inlineUdfsAndViews,
+ externalVars);
return new Pair<>(q, q.getVarCounter());
}
diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/java/AsterixJavaClient.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/java/AsterixJavaClient.java
index 4b70f95..d16ebac 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/java/AsterixJavaClient.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/java/AsterixJavaClient.java
@@ -34,6 +34,7 @@
import org.apache.asterix.compiler.provider.ILangCompilationProvider;
import org.apache.asterix.lang.common.base.IParser;
import org.apache.asterix.lang.common.base.IParserFactory;
+import org.apache.asterix.lang.common.base.IRewriterFactory;
import org.apache.asterix.lang.common.base.Statement;
import org.apache.asterix.metadata.MetadataManager;
import org.apache.asterix.om.base.IAObject;
@@ -76,7 +77,8 @@
this.compilationProvider = compilationProvider;
this.statementExecutorFactory = statementExecutorFactory;
this.storageComponentProvider = storageComponentProvider;
- apiFramework = new APIFramework(compilationProvider);
+ IRewriterFactory rewriterFactory = compilationProvider.getRewriterFactory();
+ apiFramework = new APIFramework(compilationProvider, rewriterFactory.createContextFactory());
parserFactory = compilationProvider.getParserFactory();
}
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 ebc8097..a960633 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,8 @@
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.ILangRewritingContextFactory;
+import org.apache.asterix.lang.common.rewrites.LangRewritingContextFactory;
import org.apache.asterix.lang.common.statement.AdapterDropStatement;
import org.apache.asterix.lang.common.statement.CompactStatement;
import org.apache.asterix.lang.common.statement.ConnectFeedStatement;
@@ -294,6 +296,7 @@
protected final IResponsePrinter responsePrinter;
protected final WarningCollector warningCollector;
protected final ReentrantReadWriteLock compilationLock;
+ protected final ILangRewritingContextFactory rewriteContextFactory;
public QueryTranslator(ICcApplicationContext appCtx, List<Statement> statements, SessionOutput output,
ILangCompilationProvider compilationProvider, ExecutorService executorService,
@@ -306,8 +309,9 @@
this.sessionConfig = output.config();
this.compilationProvider = compilationProvider;
declaredFunctions = new ArrayList<>();
- apiFramework = new APIFramework(compilationProvider);
rewriterFactory = compilationProvider.getRewriterFactory();
+ this.rewriteContextFactory = rewriterFactory.createContextFactory();
+ apiFramework = new APIFramework(compilationProvider, rewriteContextFactory);
activeDataverse = MetadataBuiltinEntities.DEFAULT_DATAVERSE;
this.executorService = executorService;
this.responsePrinter = responsePrinter;
@@ -2692,8 +2696,9 @@
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);
+ ((LangRewritingContextFactory) rewriteContextFactory).reset(metadataProvider, declaredFunctions,
+ Collections.singletonList(viewDecl), warningCollector, wrappedQuery.getVarCounter());
+ apiFramework.reWriteQuery(wrappedQuery, sessionOutput, false, false, Collections.emptyList());
List<List<Triple<DataverseName, String, String>>> dependencies =
ViewUtil.getViewDependencies(viewDecl, foreignKeys, queryRewriter);
@@ -2961,8 +2966,9 @@
fdList.addAll(declaredFunctions);
fdList.add(fd);
metadataProvider.setDefaultDataverse(dv);
- apiFramework.reWriteQuery(fdList, null, metadataProvider, wrappedQuery, sessionOutput, false, false,
- Collections.emptyList(), warningCollector);
+ ((LangRewritingContextFactory) rewriteContextFactory).reset(metadataProvider, fdList, null,
+ warningCollector, wrappedQuery.getVarCounter());
+ apiFramework.reWriteQuery(wrappedQuery, sessionOutput, false, false, Collections.emptyList());
List<List<Triple<DataverseName, String, String>>> dependencies =
FunctionUtil.getFunctionDependencies(fd, queryRewriter);
@@ -3679,8 +3685,10 @@
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);
+ ((LangRewritingContextFactory) rewriteContextFactory).reset(metadataProvider, declaredFunctions, null,
+ warningCollector, query.getVarCounter());
+ Pair<IReturningStatement, Integer> rewrittenResult =
+ apiFramework.reWriteQuery(query, sessionOutput, true, true, externalVars.keySet());
// Query Compilation (happens under the same ongoing metadata transaction)
return apiFramework.compileQuery(clusterInfoCollector, metadataProvider, (Query) rewrittenResult.first,
@@ -3688,7 +3696,7 @@
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();
@@ -3696,8 +3704,10 @@
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);
+ ((LangRewritingContextFactory) rewriteContextFactory).reset(metadataProvider, declaredFunctions, null,
+ warningCollector, insertUpsert.getVarCounter());
+ Pair<IReturningStatement, Integer> rewrittenResult =
+ apiFramework.reWriteQuery(insertUpsert, sessionOutput, true, true, externalVars.keySet());
InsertStatement rewrittenInsertUpsert = (InsertStatement) rewrittenResult.first;
DataverseName dataverseName = getActiveDataverseName(rewrittenInsertUpsert.getDataverseName());
diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/api/common/APIFrameworkTest.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/api/common/APIFrameworkTest.java
index 2d3de1c..e6c944d 100644
--- a/asterixdb/asterix-app/src/test/java/org/apache/asterix/api/common/APIFrameworkTest.java
+++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/api/common/APIFrameworkTest.java
@@ -64,7 +64,7 @@
when(clusterInfoCollector.getNodeControllerInfos()).thenReturn(map);
// Creates an APIFramework.
- APIFramework apiFramework = new APIFramework(mock(ILangCompilationProvider.class));
+ APIFramework apiFramework = new APIFramework(mock(ILangCompilationProvider.class), null);
// Tests large storage locations.
AlgebricksAbsolutePartitionConstraint storageLocations =
@@ -111,7 +111,7 @@
map.put(nc2, nc2Info);
// Creates an APIFramework.
- APIFramework apiFramework = new APIFramework(mock(ILangCompilationProvider.class));
+ APIFramework apiFramework = new APIFramework(mock(ILangCompilationProvider.class), null);
// Tests odd number parallelism.
AlgebricksAbsolutePartitionConstraint loc = (AlgebricksAbsolutePartitionConstraint) PA
diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/sqlpp/ParserTestExecutor.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/sqlpp/ParserTestExecutor.java
index 8a87de7..6782426 100644
--- a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/sqlpp/ParserTestExecutor.java
+++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/sqlpp/ParserTestExecutor.java
@@ -47,6 +47,7 @@
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.rewrites.LangRewritingContextFactory;
import org.apache.asterix.lang.common.statement.CreateFunctionStatement;
import org.apache.asterix.lang.common.statement.DataverseDecl;
import org.apache.asterix.lang.common.statement.FunctionDecl;
@@ -202,9 +203,11 @@
if (st.getKind() == Statement.Kind.QUERY) {
Query query = (Query) st;
IQueryRewriter rewriter = sqlppRewriterFactory.createQueryRewriter();
- LangRewritingContext rwContext = new LangRewritingContext(metadataProvider, functions, null,
- TestUtils.NOOP_WARNING_COLLECTOR, query.getVarCounter());
- rewrite(rewriter, query, rwContext);
+ LangRewritingContextFactory contextFactory =
+ (LangRewritingContextFactory) sqlppRewriterFactory.createContextFactory();
+ contextFactory.reset(metadataProvider, functions, null, TestUtils.NOOP_WARNING_COLLECTOR,
+ query.getVarCounter());
+ rewrite(rewriter, query, contextFactory.createRewritingContext());
// Tests deep copy and deep equality.
Query copiedQuery = (Query) SqlppRewriteUtil.deepCopy(query);
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/base/IRewriterFactory.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/base/IRewriterFactory.java
index 935fe26..b77663b 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/base/IRewriterFactory.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/base/IRewriterFactory.java
@@ -18,10 +18,13 @@
*/
package org.apache.asterix.lang.common.base;
+import org.apache.asterix.lang.common.rewrites.ILangRewritingContextFactory;
+
public interface IRewriterFactory {
IStatementRewriter createStatementRewriter();
IQueryRewriter createQueryRewriter();
+ ILangRewritingContextFactory createContextFactory();
}
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/rewrites/ILangRewritingContextFactory.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/rewrites/ILangRewritingContextFactory.java
new file mode 100644
index 0000000..1583464
--- /dev/null
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/rewrites/ILangRewritingContextFactory.java
@@ -0,0 +1,24 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.asterix.lang.common.rewrites;
+
+@FunctionalInterface
+public interface ILangRewritingContextFactory {
+ LangRewritingContext createRewritingContext();
+}
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 95cccb0..7f2ce32 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.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;
@@ -41,7 +41,7 @@
private int systemVarCounter = 1;
private final Map<Integer, VarIdentifier> oldVarIdToNewVarId = new HashMap<>();
- public LangRewritingContext(MetadataProvider metadataProvider, List<FunctionDecl> declaredFunctions,
+ protected LangRewritingContext(MetadataProvider metadataProvider, List<FunctionDecl> declaredFunctions,
List<ViewDecl> declaredViews, IWarningCollector warningCollector, int varCounter) {
this.metadataProvider = metadataProvider;
this.warningCollector = warningCollector;
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/rewrites/LangRewritingContextFactory.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/rewrites/LangRewritingContextFactory.java
new file mode 100644
index 0000000..eacf094
--- /dev/null
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/rewrites/LangRewritingContextFactory.java
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.asterix.lang.common.rewrites;
+
+import java.util.List;
+
+import org.apache.asterix.lang.common.statement.FunctionDecl;
+import org.apache.asterix.lang.common.statement.ViewDecl;
+import org.apache.asterix.metadata.declared.MetadataProvider;
+import org.apache.hyracks.api.exceptions.IWarningCollector;
+
+public class LangRewritingContextFactory implements ILangRewritingContextFactory {
+ protected MetadataProvider metadataProvider;
+ protected List<FunctionDecl> declaredFunctions;
+ protected List<ViewDecl> declaredViews;
+ protected IWarningCollector warningCollector;
+ protected int varCounter;
+
+ public void reset(MetadataProvider metadataProvider, List<FunctionDecl> declaredFunctions,
+ List<ViewDecl> declaredViews, IWarningCollector warningCollector, int varCounter) {
+ this.metadataProvider = metadataProvider;
+ this.declaredFunctions = declaredFunctions;
+ this.declaredViews = declaredViews;
+ this.warningCollector = warningCollector;
+ this.varCounter = varCounter;
+ }
+
+ @Override
+ public LangRewritingContext createRewritingContext() {
+ return new LangRewritingContext(metadataProvider, declaredFunctions, declaredViews, warningCollector,
+ varCounter);
+ }
+}
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/SqlppRewriterFactory.java b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/SqlppRewriterFactory.java
index 67a0243..7d6bc92 100644
--- a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/SqlppRewriterFactory.java
+++ b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/SqlppRewriterFactory.java
@@ -22,6 +22,8 @@
import org.apache.asterix.lang.common.base.IQueryRewriter;
import org.apache.asterix.lang.common.base.IRewriterFactory;
import org.apache.asterix.lang.common.base.IStatementRewriter;
+import org.apache.asterix.lang.common.rewrites.ILangRewritingContextFactory;
+import org.apache.asterix.lang.common.rewrites.LangRewritingContextFactory;
public class SqlppRewriterFactory implements IRewriterFactory {
@@ -37,6 +39,11 @@
}
@Override
+ public ILangRewritingContextFactory createContextFactory() {
+ return new LangRewritingContextFactory();
+ }
+
+ @Override
public IStatementRewriter createStatementRewriter() {
return new SqlppStatementRewriter();
}
--
To view, visit https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/16443
To unsubscribe, or for help writing mail filters, visit https://asterix-gerrit.ics.uci.edu/settings
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Change-Id: Iab8c11ee9d111a2c3b4abc58deaaf3dfe9d96da5
Gerrit-Change-Number: 16443
Gerrit-PatchSet: 1
Gerrit-Owner: Glenn Galvizo <gg...@uci.edu>
Gerrit-MessageType: newchange
Change in asterixdb[master]: [NO-ISSUE][LANG] Adding hook to extend AST rewrite context.
Posted by AsterixDB Code Review <do...@asterix-gerrit.ics.uci.edu>.
From Jenkins <je...@fulliautomatix.ics.uci.edu>:
Jenkins has posted comments on this change. ( https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/16443 )
Change subject: [NO-ISSUE][LANG] Adding hook to extend AST rewrite context.
......................................................................
Patch Set 2: Integration-Tests+1
Integration Tests Successful
https://asterix-jenkins.ics.uci.edu/job/asterix-gerrit-integration-tests/13175/ : SUCCESS
--
To view, visit https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/16443
To unsubscribe, or for help writing mail filters, visit https://asterix-gerrit.ics.uci.edu/settings
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Change-Id: Iab8c11ee9d111a2c3b4abc58deaaf3dfe9d96da5
Gerrit-Change-Number: 16443
Gerrit-PatchSet: 2
Gerrit-Owner: Glenn Galvizo <gg...@uci.edu>
Gerrit-Reviewer: Anon. E. Moose #1000171
Gerrit-Reviewer: Dmitry Lychagin <dm...@couchbase.com>
Gerrit-Reviewer: Jenkins <je...@fulliautomatix.ics.uci.edu>
Gerrit-Comment-Date: Thu, 09 Jun 2022 00:25:39 +0000
Gerrit-HasComments: No
Gerrit-Has-Labels: Yes
Gerrit-MessageType: comment
Change in asterixdb[master]: [NO-ISSUE][LANG] Adding hook to extend AST rewrite context.
Posted by AsterixDB Code Review <do...@asterix-gerrit.ics.uci.edu>.
From Glenn Galvizo <gg...@uci.edu>:
Glenn Galvizo has uploaded this change for review. ( https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/16443 )
Change subject: [NO-ISSUE][LANG] Adding hook to extend AST rewrite context.
......................................................................
[NO-ISSUE][LANG] Adding hook to extend AST rewrite context.
- user model changes: no
- storage format changes: no
- interface changes: yes
Details:
- Adding hook for AsterixDB extensions to extend the behavior of
"LangRewritingContext".
Change-Id: Iab8c11ee9d111a2c3b4abc58deaaf3dfe9d96da5
---
M asterixdb/asterix-app/src/main/java/org/apache/asterix/api/common/APIFramework.java
M asterixdb/asterix-app/src/main/java/org/apache/asterix/api/java/AsterixJavaClient.java
M asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java
M asterixdb/asterix-app/src/test/java/org/apache/asterix/api/common/APIFrameworkTest.java
M asterixdb/asterix-app/src/test/java/org/apache/asterix/test/sqlpp/ParserTestExecutor.java
M asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/base/IRewriterFactory.java
A asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/rewrites/ILangRewritingContextFactory.java
M asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/rewrites/LangRewritingContext.java
A asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/rewrites/LangRewritingContextFactory.java
M asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/SqlppRewriterFactory.java
10 files changed, 126 insertions(+), 29 deletions(-)
git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb refs/changes/43/16443/1
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 ce86d24..14a97ae 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
@@ -61,10 +61,8 @@
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.rewrites.ILangRewritingContextFactory;
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;
@@ -128,14 +126,17 @@
private final ILangExpressionToPlanTranslatorFactory translatorFactory;
private final IRuleSetFactory ruleSetFactory;
private final Set<String> configurableParameterNames;
+ private final ILangRewritingContextFactory rewriteContextFactory;
private final ExecutionPlans executionPlans;
- public APIFramework(ILangCompilationProvider compilationProvider) {
+ public APIFramework(ILangCompilationProvider compilationProvider,
+ ILangRewritingContextFactory rewriteContextFactory) {
this.rewriterFactory = compilationProvider.getRewriterFactory();
this.astPrintVisitorFactory = compilationProvider.getAstPrintVisitorFactory();
this.translatorFactory = compilationProvider.getExpressionToPlanTranslatorFactory();
this.ruleSetFactory = compilationProvider.getRuleSetFactory();
this.configurableParameterNames = compilationProvider.getCompilerOptions();
+ this.rewriteContextFactory = rewriteContextFactory;
executionPlans = new ExecutionPlans();
}
@@ -161,10 +162,9 @@
}
}
- 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(IReturningStatement q, SessionOutput output,
+ boolean allowNonStoredUdfCalls, boolean inlineUdfsAndViews, Collection<VarIdentifier> externalVars)
+ throws CompilationException {
if (q == null) {
return null;
}
@@ -173,9 +173,8 @@
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(rewriteContextFactory.createRewritingContext(), q, allowNonStoredUdfCalls, inlineUdfsAndViews,
+ externalVars);
return new Pair<>(q, q.getVarCounter());
}
diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/java/AsterixJavaClient.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/java/AsterixJavaClient.java
index 4b70f95..d16ebac 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/java/AsterixJavaClient.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/java/AsterixJavaClient.java
@@ -34,6 +34,7 @@
import org.apache.asterix.compiler.provider.ILangCompilationProvider;
import org.apache.asterix.lang.common.base.IParser;
import org.apache.asterix.lang.common.base.IParserFactory;
+import org.apache.asterix.lang.common.base.IRewriterFactory;
import org.apache.asterix.lang.common.base.Statement;
import org.apache.asterix.metadata.MetadataManager;
import org.apache.asterix.om.base.IAObject;
@@ -76,7 +77,8 @@
this.compilationProvider = compilationProvider;
this.statementExecutorFactory = statementExecutorFactory;
this.storageComponentProvider = storageComponentProvider;
- apiFramework = new APIFramework(compilationProvider);
+ IRewriterFactory rewriterFactory = compilationProvider.getRewriterFactory();
+ apiFramework = new APIFramework(compilationProvider, rewriterFactory.createContextFactory());
parserFactory = compilationProvider.getParserFactory();
}
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 ebc8097..a960633 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,8 @@
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.ILangRewritingContextFactory;
+import org.apache.asterix.lang.common.rewrites.LangRewritingContextFactory;
import org.apache.asterix.lang.common.statement.AdapterDropStatement;
import org.apache.asterix.lang.common.statement.CompactStatement;
import org.apache.asterix.lang.common.statement.ConnectFeedStatement;
@@ -294,6 +296,7 @@
protected final IResponsePrinter responsePrinter;
protected final WarningCollector warningCollector;
protected final ReentrantReadWriteLock compilationLock;
+ protected final ILangRewritingContextFactory rewriteContextFactory;
public QueryTranslator(ICcApplicationContext appCtx, List<Statement> statements, SessionOutput output,
ILangCompilationProvider compilationProvider, ExecutorService executorService,
@@ -306,8 +309,9 @@
this.sessionConfig = output.config();
this.compilationProvider = compilationProvider;
declaredFunctions = new ArrayList<>();
- apiFramework = new APIFramework(compilationProvider);
rewriterFactory = compilationProvider.getRewriterFactory();
+ this.rewriteContextFactory = rewriterFactory.createContextFactory();
+ apiFramework = new APIFramework(compilationProvider, rewriteContextFactory);
activeDataverse = MetadataBuiltinEntities.DEFAULT_DATAVERSE;
this.executorService = executorService;
this.responsePrinter = responsePrinter;
@@ -2692,8 +2696,9 @@
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);
+ ((LangRewritingContextFactory) rewriteContextFactory).reset(metadataProvider, declaredFunctions,
+ Collections.singletonList(viewDecl), warningCollector, wrappedQuery.getVarCounter());
+ apiFramework.reWriteQuery(wrappedQuery, sessionOutput, false, false, Collections.emptyList());
List<List<Triple<DataverseName, String, String>>> dependencies =
ViewUtil.getViewDependencies(viewDecl, foreignKeys, queryRewriter);
@@ -2961,8 +2966,9 @@
fdList.addAll(declaredFunctions);
fdList.add(fd);
metadataProvider.setDefaultDataverse(dv);
- apiFramework.reWriteQuery(fdList, null, metadataProvider, wrappedQuery, sessionOutput, false, false,
- Collections.emptyList(), warningCollector);
+ ((LangRewritingContextFactory) rewriteContextFactory).reset(metadataProvider, fdList, null,
+ warningCollector, wrappedQuery.getVarCounter());
+ apiFramework.reWriteQuery(wrappedQuery, sessionOutput, false, false, Collections.emptyList());
List<List<Triple<DataverseName, String, String>>> dependencies =
FunctionUtil.getFunctionDependencies(fd, queryRewriter);
@@ -3679,8 +3685,10 @@
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);
+ ((LangRewritingContextFactory) rewriteContextFactory).reset(metadataProvider, declaredFunctions, null,
+ warningCollector, query.getVarCounter());
+ Pair<IReturningStatement, Integer> rewrittenResult =
+ apiFramework.reWriteQuery(query, sessionOutput, true, true, externalVars.keySet());
// Query Compilation (happens under the same ongoing metadata transaction)
return apiFramework.compileQuery(clusterInfoCollector, metadataProvider, (Query) rewrittenResult.first,
@@ -3688,7 +3696,7 @@
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();
@@ -3696,8 +3704,10 @@
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);
+ ((LangRewritingContextFactory) rewriteContextFactory).reset(metadataProvider, declaredFunctions, null,
+ warningCollector, insertUpsert.getVarCounter());
+ Pair<IReturningStatement, Integer> rewrittenResult =
+ apiFramework.reWriteQuery(insertUpsert, sessionOutput, true, true, externalVars.keySet());
InsertStatement rewrittenInsertUpsert = (InsertStatement) rewrittenResult.first;
DataverseName dataverseName = getActiveDataverseName(rewrittenInsertUpsert.getDataverseName());
diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/api/common/APIFrameworkTest.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/api/common/APIFrameworkTest.java
index 2d3de1c..e6c944d 100644
--- a/asterixdb/asterix-app/src/test/java/org/apache/asterix/api/common/APIFrameworkTest.java
+++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/api/common/APIFrameworkTest.java
@@ -64,7 +64,7 @@
when(clusterInfoCollector.getNodeControllerInfos()).thenReturn(map);
// Creates an APIFramework.
- APIFramework apiFramework = new APIFramework(mock(ILangCompilationProvider.class));
+ APIFramework apiFramework = new APIFramework(mock(ILangCompilationProvider.class), null);
// Tests large storage locations.
AlgebricksAbsolutePartitionConstraint storageLocations =
@@ -111,7 +111,7 @@
map.put(nc2, nc2Info);
// Creates an APIFramework.
- APIFramework apiFramework = new APIFramework(mock(ILangCompilationProvider.class));
+ APIFramework apiFramework = new APIFramework(mock(ILangCompilationProvider.class), null);
// Tests odd number parallelism.
AlgebricksAbsolutePartitionConstraint loc = (AlgebricksAbsolutePartitionConstraint) PA
diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/sqlpp/ParserTestExecutor.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/sqlpp/ParserTestExecutor.java
index 8a87de7..6782426 100644
--- a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/sqlpp/ParserTestExecutor.java
+++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/sqlpp/ParserTestExecutor.java
@@ -47,6 +47,7 @@
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.rewrites.LangRewritingContextFactory;
import org.apache.asterix.lang.common.statement.CreateFunctionStatement;
import org.apache.asterix.lang.common.statement.DataverseDecl;
import org.apache.asterix.lang.common.statement.FunctionDecl;
@@ -202,9 +203,11 @@
if (st.getKind() == Statement.Kind.QUERY) {
Query query = (Query) st;
IQueryRewriter rewriter = sqlppRewriterFactory.createQueryRewriter();
- LangRewritingContext rwContext = new LangRewritingContext(metadataProvider, functions, null,
- TestUtils.NOOP_WARNING_COLLECTOR, query.getVarCounter());
- rewrite(rewriter, query, rwContext);
+ LangRewritingContextFactory contextFactory =
+ (LangRewritingContextFactory) sqlppRewriterFactory.createContextFactory();
+ contextFactory.reset(metadataProvider, functions, null, TestUtils.NOOP_WARNING_COLLECTOR,
+ query.getVarCounter());
+ rewrite(rewriter, query, contextFactory.createRewritingContext());
// Tests deep copy and deep equality.
Query copiedQuery = (Query) SqlppRewriteUtil.deepCopy(query);
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/base/IRewriterFactory.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/base/IRewriterFactory.java
index 935fe26..b77663b 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/base/IRewriterFactory.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/base/IRewriterFactory.java
@@ -18,10 +18,13 @@
*/
package org.apache.asterix.lang.common.base;
+import org.apache.asterix.lang.common.rewrites.ILangRewritingContextFactory;
+
public interface IRewriterFactory {
IStatementRewriter createStatementRewriter();
IQueryRewriter createQueryRewriter();
+ ILangRewritingContextFactory createContextFactory();
}
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/rewrites/ILangRewritingContextFactory.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/rewrites/ILangRewritingContextFactory.java
new file mode 100644
index 0000000..1583464
--- /dev/null
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/rewrites/ILangRewritingContextFactory.java
@@ -0,0 +1,24 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.asterix.lang.common.rewrites;
+
+@FunctionalInterface
+public interface ILangRewritingContextFactory {
+ LangRewritingContext createRewritingContext();
+}
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 95cccb0..7f2ce32 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.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;
@@ -41,7 +41,7 @@
private int systemVarCounter = 1;
private final Map<Integer, VarIdentifier> oldVarIdToNewVarId = new HashMap<>();
- public LangRewritingContext(MetadataProvider metadataProvider, List<FunctionDecl> declaredFunctions,
+ protected LangRewritingContext(MetadataProvider metadataProvider, List<FunctionDecl> declaredFunctions,
List<ViewDecl> declaredViews, IWarningCollector warningCollector, int varCounter) {
this.metadataProvider = metadataProvider;
this.warningCollector = warningCollector;
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/rewrites/LangRewritingContextFactory.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/rewrites/LangRewritingContextFactory.java
new file mode 100644
index 0000000..eacf094
--- /dev/null
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/rewrites/LangRewritingContextFactory.java
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.asterix.lang.common.rewrites;
+
+import java.util.List;
+
+import org.apache.asterix.lang.common.statement.FunctionDecl;
+import org.apache.asterix.lang.common.statement.ViewDecl;
+import org.apache.asterix.metadata.declared.MetadataProvider;
+import org.apache.hyracks.api.exceptions.IWarningCollector;
+
+public class LangRewritingContextFactory implements ILangRewritingContextFactory {
+ protected MetadataProvider metadataProvider;
+ protected List<FunctionDecl> declaredFunctions;
+ protected List<ViewDecl> declaredViews;
+ protected IWarningCollector warningCollector;
+ protected int varCounter;
+
+ public void reset(MetadataProvider metadataProvider, List<FunctionDecl> declaredFunctions,
+ List<ViewDecl> declaredViews, IWarningCollector warningCollector, int varCounter) {
+ this.metadataProvider = metadataProvider;
+ this.declaredFunctions = declaredFunctions;
+ this.declaredViews = declaredViews;
+ this.warningCollector = warningCollector;
+ this.varCounter = varCounter;
+ }
+
+ @Override
+ public LangRewritingContext createRewritingContext() {
+ return new LangRewritingContext(metadataProvider, declaredFunctions, declaredViews, warningCollector,
+ varCounter);
+ }
+}
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/SqlppRewriterFactory.java b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/SqlppRewriterFactory.java
index 67a0243..7d6bc92 100644
--- a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/SqlppRewriterFactory.java
+++ b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/SqlppRewriterFactory.java
@@ -22,6 +22,8 @@
import org.apache.asterix.lang.common.base.IQueryRewriter;
import org.apache.asterix.lang.common.base.IRewriterFactory;
import org.apache.asterix.lang.common.base.IStatementRewriter;
+import org.apache.asterix.lang.common.rewrites.ILangRewritingContextFactory;
+import org.apache.asterix.lang.common.rewrites.LangRewritingContextFactory;
public class SqlppRewriterFactory implements IRewriterFactory {
@@ -37,6 +39,11 @@
}
@Override
+ public ILangRewritingContextFactory createContextFactory() {
+ return new LangRewritingContextFactory();
+ }
+
+ @Override
public IStatementRewriter createStatementRewriter() {
return new SqlppStatementRewriter();
}
--
To view, visit https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/16443
To unsubscribe, or for help writing mail filters, visit https://asterix-gerrit.ics.uci.edu/settings
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Change-Id: Iab8c11ee9d111a2c3b4abc58deaaf3dfe9d96da5
Gerrit-Change-Number: 16443
Gerrit-PatchSet: 1
Gerrit-Owner: Glenn Galvizo <gg...@uci.edu>
Gerrit-MessageType: newchange