Steven Jacobs has uploaded a new change for review.

  https://asterix-gerrit.ics.uci.edu/1304

Change subject: ASTERIXDB-1573 Allow Extension of Rewrite Rules
......................................................................

ASTERIXDB-1573 Allow Extension of Rewrite Rules

Add IRuleSetFactory which builds rewrite Rule Set
Can be extended by Asterix Extensions

Change-Id: I7f59dea86b0ef4ee9d31b56766a97bd2b34ec02c
---
M 
asterixdb/asterix-algebra/src/main/java/org/apache/asterix/compiler/provider/AqlCompilationProvider.java
A 
asterixdb/asterix-algebra/src/main/java/org/apache/asterix/compiler/provider/DefaultRuleSetFactory.java
M 
asterixdb/asterix-algebra/src/main/java/org/apache/asterix/compiler/provider/ILangCompilationProvider.java
A 
asterixdb/asterix-algebra/src/main/java/org/apache/asterix/compiler/provider/IRuleSetFactory.java
M 
asterixdb/asterix-algebra/src/main/java/org/apache/asterix/compiler/provider/SqlppCompilationProvider.java
M 
asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/base/RuleCollections.java
M 
asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/UnnestToDataScanRule.java
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
10 files changed, 153 insertions(+), 72 deletions(-)


  git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb 
refs/changes/04/1304/1

diff --git 
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/compiler/provider/AqlCompilationProvider.java
 
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/compiler/provider/AqlCompilationProvider.java
index 00affa8..af0ba73 100644
--- 
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/compiler/provider/AqlCompilationProvider.java
+++ 
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/compiler/provider/AqlCompilationProvider.java
@@ -49,4 +49,9 @@
         return new AqlExpressionToPlanTranslatorFactory();
     }
 
+    @Override
+    public IRuleSetFactory getRuleSetFactory() {
+        return new DefaultRuleSetFactory();
+    }
+
 }
diff --git 
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/compiler/provider/DefaultRuleSetFactory.java
 
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/compiler/provider/DefaultRuleSetFactory.java
new file mode 100644
index 0000000..ccae63c
--- /dev/null
+++ 
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/compiler/provider/DefaultRuleSetFactory.java
@@ -0,0 +1,84 @@
+/*
+ * 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.compiler.provider;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.asterix.optimizer.base.RuleCollections;
+import org.apache.hyracks.algebricks.common.utils.Pair;
+import 
org.apache.hyracks.algebricks.compiler.rewriter.rulecontrollers.SequentialFixpointRuleController;
+import 
org.apache.hyracks.algebricks.compiler.rewriter.rulecontrollers.SequentialOnceRuleController;
+import org.apache.hyracks.algebricks.core.rewriter.base.AbstractRuleController;
+import org.apache.hyracks.algebricks.core.rewriter.base.IAlgebraicRewriteRule;
+
+public class DefaultRuleSetFactory implements IRuleSetFactory {
+
+    @Override
+    public List<Pair<AbstractRuleController, List<IAlgebraicRewriteRule>>> 
buildLogicalRewrites() {
+        return buildLogical();
+    }
+
+    @Override
+    public List<Pair<AbstractRuleController, List<IAlgebraicRewriteRule>>> 
buildPhysicalRewrites() {
+        return buildPhysical();
+    }
+
+    public static List<Pair<AbstractRuleController, 
List<IAlgebraicRewriteRule>>> buildLogical() {
+        List<Pair<AbstractRuleController, List<IAlgebraicRewriteRule>>> 
defaultLogicalRewrites = new ArrayList<>();
+        SequentialFixpointRuleController seqCtrlNoDfs = new 
SequentialFixpointRuleController(false);
+        SequentialFixpointRuleController seqCtrlFullDfs = new 
SequentialFixpointRuleController(true);
+        SequentialOnceRuleController seqOnceCtrl = new 
SequentialOnceRuleController(true);
+        defaultLogicalRewrites.add(new Pair<>(seqOnceCtrl, 
RuleCollections.buildInitialTranslationRuleCollection()));
+        defaultLogicalRewrites.add(new Pair<>(seqOnceCtrl, 
RuleCollections.buildTypeInferenceRuleCollection()));
+        defaultLogicalRewrites.add(new Pair<>(seqOnceCtrl, 
RuleCollections.buildAutogenerateIDRuleCollection()));
+        defaultLogicalRewrites
+            .add(new Pair<>(seqCtrlFullDfs, 
RuleCollections.buildNormalizationRuleCollection()));
+        defaultLogicalRewrites
+                .add(new Pair<>(seqCtrlNoDfs, 
RuleCollections.buildCondPushDownAndJoinInferenceRuleCollection()));
+        defaultLogicalRewrites.add(new Pair<>(seqCtrlFullDfs, 
RuleCollections.buildLoadFieldsRuleCollection()));
+        // fj
+        defaultLogicalRewrites.add(new Pair<>(seqCtrlFullDfs, 
RuleCollections.buildFuzzyJoinRuleCollection()));
+        //
+        defaultLogicalRewrites.add(new Pair<>(seqCtrlFullDfs, 
RuleCollections.buildNormalizationRuleCollection()));
+        defaultLogicalRewrites
+                .add(new Pair<>(seqCtrlNoDfs, 
RuleCollections.buildCondPushDownAndJoinInferenceRuleCollection()));
+        defaultLogicalRewrites.add(new Pair<>(seqCtrlFullDfs, 
RuleCollections.buildLoadFieldsRuleCollection()));
+        defaultLogicalRewrites.add(new Pair<>(seqOnceCtrl, 
RuleCollections.buildDataExchangeRuleCollection()));
+        defaultLogicalRewrites.add(new Pair<>(seqCtrlNoDfs, 
RuleCollections.buildConsolidationRuleCollection()));
+        defaultLogicalRewrites.add(new Pair<>(seqCtrlNoDfs, 
RuleCollections.buildAccessMethodRuleCollection()));
+        defaultLogicalRewrites.add(new Pair<>(seqCtrlNoDfs, 
RuleCollections.buildPlanCleanupRuleCollection()));
+
+        //put TXnRuleCollection!
+        return defaultLogicalRewrites;
+    }
+
+    public static List<Pair<AbstractRuleController, 
List<IAlgebraicRewriteRule>>> buildPhysical() {
+        List<Pair<AbstractRuleController, List<IAlgebraicRewriteRule>>> 
defaultPhysicalRewrites = new ArrayList<>();
+        SequentialOnceRuleController seqOnceCtrl = new 
SequentialOnceRuleController(true);
+        SequentialOnceRuleController seqOnceTopLevel = new 
SequentialOnceRuleController(false);
+        defaultPhysicalRewrites
+                .add(new Pair<>(seqOnceCtrl, 
RuleCollections.buildPhysicalRewritesAllLevelsRuleCollection()));
+        defaultPhysicalRewrites
+                .add(new Pair<>(seqOnceTopLevel, 
RuleCollections.buildPhysicalRewritesTopLevelRuleCollection()));
+        defaultPhysicalRewrites.add(new Pair<>(seqOnceCtrl, 
RuleCollections.prepareForJobGenRuleCollection()));
+        return defaultPhysicalRewrites;
+    }
+
+}
diff --git 
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/compiler/provider/ILangCompilationProvider.java
 
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/compiler/provider/ILangCompilationProvider.java
index fbb55e9..f658be9 100644
--- 
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/compiler/provider/ILangCompilationProvider.java
+++ 
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/compiler/provider/ILangCompilationProvider.java
@@ -45,4 +45,9 @@
      */
     public ILangExpressionToPlanTranslatorFactory 
getExpressionToPlanTranslatorFactory();
 
+    /**
+     * @return the rule set factory of a language implementation
+     */
+    public IRuleSetFactory getRuleSetFactory();
+
 }
diff --git 
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/compiler/provider/IRuleSetFactory.java
 
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/compiler/provider/IRuleSetFactory.java
new file mode 100644
index 0000000..660ba43
--- /dev/null
+++ 
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/compiler/provider/IRuleSetFactory.java
@@ -0,0 +1,42 @@
+/*
+ * 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.compiler.provider;
+
+import java.util.List;
+
+import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
+import org.apache.hyracks.algebricks.common.utils.Pair;
+import org.apache.hyracks.algebricks.core.rewriter.base.AbstractRuleController;
+import org.apache.hyracks.algebricks.core.rewriter.base.IAlgebraicRewriteRule;
+
+public interface IRuleSetFactory {
+
+    /**
+     * @return the logical rewrites
+     * @throws AlgebricksException
+     */
+    public List<Pair<AbstractRuleController, List<IAlgebraicRewriteRule>>> 
buildLogicalRewrites()
+            throws AlgebricksException;
+
+    /**
+     * @return the physical rewrites
+     */
+    public List<Pair<AbstractRuleController, List<IAlgebraicRewriteRule>>> 
buildPhysicalRewrites();
+
+}
diff --git 
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/compiler/provider/SqlppCompilationProvider.java
 
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/compiler/provider/SqlppCompilationProvider.java
index 2b270df..70f8f92 100644
--- 
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/compiler/provider/SqlppCompilationProvider.java
+++ 
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/compiler/provider/SqlppCompilationProvider.java
@@ -49,4 +49,9 @@
         return new SqlppExpressionToPlanTranslatorFactory();
     }
 
+    @Override
+    public IRuleSetFactory getRuleSetFactory() {
+        return new DefaultRuleSetFactory();
+    }
+
 }
diff --git 
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/base/RuleCollections.java
 
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/base/RuleCollections.java
index 56a3bd0..3efc4dc 100644
--- 
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/base/RuleCollections.java
+++ 
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/base/RuleCollections.java
@@ -22,7 +22,6 @@
 import java.util.LinkedList;
 import java.util.List;
 
-import org.apache.asterix.algebra.extension.IAlgebraExtensionManager;
 import 
org.apache.asterix.optimizer.rules.AddEquivalenceClassForRecordConstructorRule;
 import 
org.apache.asterix.optimizer.rules.AsterixExtractFunctionsFromJoinConditionRule;
 import org.apache.asterix.optimizer.rules.AsterixInlineVariablesRule;
@@ -66,10 +65,10 @@
 import org.apache.asterix.optimizer.rules.RemoveRedundantSelectRule;
 import org.apache.asterix.optimizer.rules.RemoveSortInFeedIngestionRule;
 import org.apache.asterix.optimizer.rules.RemoveUnusedOneToOneEquiJoinRule;
-import org.apache.asterix.optimizer.rules.SetupCommitExtensionOpRule;
 import org.apache.asterix.optimizer.rules.ResolveVariableRule;
 import org.apache.asterix.optimizer.rules.SetAsterixPhysicalOperatorsRule;
 import org.apache.asterix.optimizer.rules.SetClosedRecordConstructorsRule;
+import org.apache.asterix.optimizer.rules.SetupCommitExtensionOpRule;
 import org.apache.asterix.optimizer.rules.SimilarityCheckRule;
 import org.apache.asterix.optimizer.rules.SweepIllegalNonfunctionalFunctions;
 import org.apache.asterix.optimizer.rules.UnnestToDataScanRule;
@@ -155,9 +154,7 @@
         return autogen;
     }
 
-    //TODO(amoudi/yingyi): refactor this to use a provider instead of passing 
the extensionManager
-    public static final List<IAlgebraicRewriteRule> 
buildNormalizationRuleCollection(
-            IAlgebraExtensionManager algebraExtensionManager) {
+    public static final List<IAlgebraicRewriteRule> 
buildNormalizationRuleCollection() {
         List<IAlgebraicRewriteRule> normalization = new LinkedList<>();
         normalization.add(new ResolveVariableRule());
         normalization.add(new IntroduceUnnestForCollectionToSequenceRule());
@@ -183,7 +180,7 @@
         normalization.add(new ListifyUnnestingFunctionRule());
         normalization.add(new ConstantFoldingRule());
         normalization.add(new RemoveRedundantSelectRule());
-        normalization.add(new UnnestToDataScanRule(algebraExtensionManager));
+        normalization.add(new UnnestToDataScanRule());
         normalization.add(new MetaFunctionToMetaVariableRule());
         normalization.add(new FuzzyEqRule());
         normalization.add(new SimilarityCheckRule());
diff --git 
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/UnnestToDataScanRule.java
 
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/UnnestToDataScanRule.java
index c033214..dc49d6c 100644
--- 
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/UnnestToDataScanRule.java
+++ 
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/UnnestToDataScanRule.java
@@ -21,7 +21,6 @@
 import java.util.ArrayList;
 import java.util.List;
 
-import org.apache.asterix.algebra.extension.IAlgebraExtensionManager;
 import org.apache.asterix.common.config.DatasetConfig.DatasetType;
 import org.apache.asterix.external.feed.watch.FeedActivityDetails;
 import org.apache.asterix.external.util.ExternalDataUtils;
@@ -68,11 +67,6 @@
 import org.apache.hyracks.algebricks.core.rewriter.base.IAlgebraicRewriteRule;
 
 public class UnnestToDataScanRule implements IAlgebraicRewriteRule {
-    private final IAlgebraExtensionManager algebraExtensionManager;
-
-    public UnnestToDataScanRule(IAlgebraExtensionManager 
algebraExtensionManager) {
-        this.algebraExtensionManager = algebraExtensionManager;
-    }
 
     @Override
     public boolean rewritePre(Mutable<ILogicalOperator> opRef, 
IOptimizationContext context)
@@ -202,8 +196,6 @@
                 opRef.setValue(scan);
                 context.computeAndSetTypeEnvironmentForOperator(scan);
                 return true;
-            } else if (algebraExtensionManager != null) {
-                return algebraExtensionManager.unnestToDataScan(opRef, 
context, unnest, unnestExpr, f);
             }
         }
 
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 eb1764c..376d9b9 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
@@ -21,13 +21,11 @@
 import java.io.IOException;
 import java.io.PrintWriter;
 import java.rmi.RemoteException;
-import java.util.ArrayList;
 import java.util.List;
 
 import org.apache.asterix.algebra.base.ILangExpressionToPlanTranslator;
 import org.apache.asterix.algebra.base.ILangExpressionToPlanTranslatorFactory;
 import org.apache.asterix.api.common.Job.SubmissionMode;
-import org.apache.asterix.app.cc.CompilerExtensionManager;
 import org.apache.asterix.app.result.ResultUtil;
 import org.apache.asterix.common.config.AsterixCompilerProperties;
 import org.apache.asterix.common.config.AsterixExternalProperties;
@@ -35,6 +33,7 @@
 import org.apache.asterix.common.exceptions.ACIDException;
 import org.apache.asterix.common.exceptions.AsterixException;
 import org.apache.asterix.compiler.provider.ILangCompilationProvider;
+import org.apache.asterix.compiler.provider.IRuleSetFactory;
 import org.apache.asterix.dataflow.data.common.AqlExpressionTypeComputer;
 import 
org.apache.asterix.dataflow.data.common.AqlMergeAggregationExpressionFactory;
 import org.apache.asterix.dataflow.data.common.AqlMissableTypeComputer;
@@ -50,7 +49,6 @@
 import org.apache.asterix.lang.common.statement.FunctionDecl;
 import org.apache.asterix.lang.common.statement.Query;
 import org.apache.asterix.metadata.declared.AqlMetadataProvider;
-import org.apache.asterix.optimizer.base.RuleCollections;
 import org.apache.asterix.runtime.job.listener.JobEventListenerFactory;
 import org.apache.asterix.runtime.util.AsterixAppContextInfo;
 import 
org.apache.asterix.transaction.management.service.transaction.JobIdFactory;
@@ -63,8 +61,6 @@
 import 
org.apache.hyracks.algebricks.compiler.api.HeuristicCompilerFactoryBuilder;
 import org.apache.hyracks.algebricks.compiler.api.ICompiler;
 import org.apache.hyracks.algebricks.compiler.api.ICompilerFactory;
-import 
org.apache.hyracks.algebricks.compiler.rewriter.rulecontrollers.SequentialFixpointRuleController;
-import 
org.apache.hyracks.algebricks.compiler.rewriter.rulecontrollers.SequentialOnceRuleController;
 import org.apache.hyracks.algebricks.core.algebra.base.ILogicalPlan;
 import org.apache.hyracks.algebricks.core.algebra.base.IOptimizationContext;
 import 
org.apache.hyracks.algebricks.core.algebra.expressions.IConflictingTypeResolver;
@@ -77,9 +73,7 @@
 import 
org.apache.hyracks.algebricks.core.algebra.prettyprint.LogicalOperatorPrettyPrintVisitor;
 import org.apache.hyracks.algebricks.core.algebra.prettyprint.PlanPlotter;
 import 
org.apache.hyracks.algebricks.core.algebra.prettyprint.PlanPrettyPrinter;
-import org.apache.hyracks.algebricks.core.rewriter.base.AbstractRuleController;
 import 
org.apache.hyracks.algebricks.core.rewriter.base.AlgebricksOptimizationContext;
-import org.apache.hyracks.algebricks.core.rewriter.base.IAlgebraicRewriteRule;
 import 
org.apache.hyracks.algebricks.core.rewriter.base.IOptimizationContextFactory;
 import 
org.apache.hyracks.algebricks.core.rewriter.base.PhysicalOptimizationConfig;
 import org.apache.hyracks.api.client.IHyracksClientConnection;
@@ -96,56 +90,13 @@
     private final IRewriterFactory rewriterFactory;
     private final IAstPrintVisitorFactory astPrintVisitorFactory;
     private final ILangExpressionToPlanTranslatorFactory translatorFactory;
-    private final CompilerExtensionManager cExtensionManager;
+    private final IRuleSetFactory ruleSetFactory;
 
-    public APIFramework(ILangCompilationProvider compilationProvider, 
CompilerExtensionManager cExtensionManager) {
+    public APIFramework(ILangCompilationProvider compilationProvider) {
         this.rewriterFactory = compilationProvider.getRewriterFactory();
         this.astPrintVisitorFactory = 
compilationProvider.getAstPrintVisitorFactory();
         this.translatorFactory = 
compilationProvider.getExpressionToPlanTranslatorFactory();
-        this.cExtensionManager = cExtensionManager;
-    }
-
-    private static List<Pair<AbstractRuleController, 
List<IAlgebraicRewriteRule>>>
-            buildDefaultLogicalRewrites(CompilerExtensionManager 
ccExtensionManager) {
-        List<Pair<AbstractRuleController, List<IAlgebraicRewriteRule>>> 
defaultLogicalRewrites = new ArrayList<>();
-        SequentialFixpointRuleController seqCtrlNoDfs = new 
SequentialFixpointRuleController(false);
-        SequentialFixpointRuleController seqCtrlFullDfs = new 
SequentialFixpointRuleController(true);
-        SequentialOnceRuleController seqOnceCtrl = new 
SequentialOnceRuleController(true);
-        defaultLogicalRewrites.add(new Pair<>(seqOnceCtrl, 
RuleCollections.buildInitialTranslationRuleCollection()));
-        defaultLogicalRewrites.add(new Pair<>(seqOnceCtrl, 
RuleCollections.buildTypeInferenceRuleCollection()));
-        defaultLogicalRewrites.add(new Pair<>(seqOnceCtrl, 
RuleCollections.buildAutogenerateIDRuleCollection()));
-        defaultLogicalRewrites
-                .add(new Pair<>(seqCtrlFullDfs, 
RuleCollections.buildNormalizationRuleCollection(ccExtensionManager)));
-        defaultLogicalRewrites
-                .add(new Pair<>(seqCtrlNoDfs, 
RuleCollections.buildCondPushDownAndJoinInferenceRuleCollection()));
-        defaultLogicalRewrites.add(new Pair<>(seqCtrlFullDfs, 
RuleCollections.buildLoadFieldsRuleCollection()));
-        // fj
-        defaultLogicalRewrites.add(new Pair<>(seqCtrlFullDfs, 
RuleCollections.buildFuzzyJoinRuleCollection()));
-        //
-        defaultLogicalRewrites
-                .add(new Pair<>(seqCtrlFullDfs, 
RuleCollections.buildNormalizationRuleCollection(ccExtensionManager)));
-        defaultLogicalRewrites
-                .add(new Pair<>(seqCtrlNoDfs, 
RuleCollections.buildCondPushDownAndJoinInferenceRuleCollection()));
-        defaultLogicalRewrites.add(new Pair<>(seqCtrlFullDfs, 
RuleCollections.buildLoadFieldsRuleCollection()));
-        defaultLogicalRewrites.add(new Pair<>(seqOnceCtrl, 
RuleCollections.buildDataExchangeRuleCollection()));
-        defaultLogicalRewrites.add(new Pair<>(seqCtrlNoDfs, 
RuleCollections.buildConsolidationRuleCollection()));
-        defaultLogicalRewrites.add(new Pair<>(seqCtrlNoDfs, 
RuleCollections.buildAccessMethodRuleCollection()));
-        defaultLogicalRewrites.add(new Pair<>(seqCtrlNoDfs, 
RuleCollections.buildPlanCleanupRuleCollection()));
-
-        //put TXnRuleCollection!
-        return defaultLogicalRewrites;
-    }
-
-    private static List<Pair<AbstractRuleController, 
List<IAlgebraicRewriteRule>>> buildDefaultPhysicalRewrites() {
-        List<Pair<AbstractRuleController, List<IAlgebraicRewriteRule>>> 
defaultPhysicalRewrites = new ArrayList<>();
-        SequentialOnceRuleController seqOnceCtrl = new 
SequentialOnceRuleController(true);
-        SequentialOnceRuleController seqOnceTopLevel = new 
SequentialOnceRuleController(false);
-        defaultPhysicalRewrites
-                .add(new Pair<>(seqOnceCtrl, 
RuleCollections.buildPhysicalRewritesAllLevelsRuleCollection()));
-        defaultPhysicalRewrites
-                .add(new Pair<>(seqOnceTopLevel, 
RuleCollections.buildPhysicalRewritesTopLevelRuleCollection()));
-        defaultPhysicalRewrites.add(new Pair<>(seqOnceCtrl, 
RuleCollections.prepareForJobGenRuleCollection()));
-        return defaultPhysicalRewrites;
+        this.ruleSetFactory = compilationProvider.getRuleSetFactory();
     }
 
     private static class AqlOptimizationContextFactory implements 
IOptimizationContextFactory {
@@ -258,8 +209,8 @@
         HeuristicCompilerFactoryBuilder builder =
                 new 
HeuristicCompilerFactoryBuilder(AqlOptimizationContextFactory.INSTANCE);
         
builder.setPhysicalOptimizationConfig(OptimizationConfUtil.getPhysicalOptimizationConfig());
-        
builder.setLogicalRewrites(buildDefaultLogicalRewrites(cExtensionManager));
-        builder.setPhysicalRewrites(buildDefaultPhysicalRewrites());
+        builder.setLogicalRewrites(ruleSetFactory.buildLogicalRewrites());
+        builder.setPhysicalRewrites(ruleSetFactory.buildPhysicalRewrites());
         IDataFormat format = queryMetadataProvider.getFormat();
         ICompilerFactory compilerFactory = builder.create();
         
builder.setExpressionEvalSizeComputer(format.getExpressionEvalSizeComputer());
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 b269ecf..fd9c6cd 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
@@ -56,7 +56,7 @@
         this.queryText = queryText;
         this.writer = writer;
         this.compilationProvider = compilationProvider;
-        this.apiFramework = new APIFramework(compilationProvider, null);
+        this.apiFramework = new APIFramework(compilationProvider);
         this.statementExecutorFactory = statementExecutorFactory;
         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 d5b1415..df0461d 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
@@ -235,7 +235,7 @@
         this.statements = aqlStatements;
         this.sessionConfig = conf;
         this.declaredFunctions = getDeclaredFunctions(aqlStatements);
-        this.apiFramework = new APIFramework(compliationProvider, 
ccExtensionManager);
+        this.apiFramework = new APIFramework(compliationProvider);
         this.rewriterFactory = compliationProvider.getRewriterFactory();
         activeDefaultDataverse = MetadataBuiltinEntities.DEFAULT_DATAVERSE;
     }
@@ -3123,7 +3123,7 @@
         return (dataverse != null) ? dataverse : 
activeDefaultDataverse.getDataverseName();
     }
 
-    protected String getActiveDataverse(Identifier dataverse) {
+    public String getActiveDataverse(Identifier dataverse) {
         return getActiveDataverseName(dataverse != null ? dataverse.getValue() 
: null);
     }
 

-- 
To view, visit https://asterix-gerrit.ics.uci.edu/1304
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I7f59dea86b0ef4ee9d31b56766a97bd2b34ec02c
Gerrit-PatchSet: 1
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Steven Jacobs <sjaco...@ucr.edu>

Reply via email to