>From Preetham Poluparthi <[email protected]>:

Preetham Poluparthi has uploaded this change for review. ( 
https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/20986?usp=email )


Change subject: WIP: Fix adding replicate operators with joins
......................................................................

WIP: Fix adding replicate operators with joins

Change-Id: I9c95e889a6a85e6d3e4f6258c75aef8caa09acfd
---
M 
hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/OperatorDeepCopyVisitor.java
M 
hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/rewriter/base/AbstractRuleController.java
M 
hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/ExtractCommonOperatorsRule.java
3 files changed, 25 insertions(+), 10 deletions(-)



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

diff --git 
a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/OperatorDeepCopyVisitor.java
 
b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/OperatorDeepCopyVisitor.java
index eacacde..b1361a6 100644
--- 
a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/OperatorDeepCopyVisitor.java
+++ 
b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/OperatorDeepCopyVisitor.java
@@ -439,7 +439,7 @@
     @Override
     public ILogicalOperator visitWindowOperator(WindowOperator op, Void arg) 
throws AlgebricksException {
         List<Mutable<ILogicalExpression>> newPartitionExprs = new 
ArrayList<>();
-        deepCopyExpressionRefs(op.getPartitionExpressions(), 
newPartitionExprs);
+        deepCopyExpressionRefs(newPartitionExprs, 
op.getPartitionExpressions());
         List<Pair<IOrder, Mutable<ILogicalExpression>>> newOrderExprs =
                 deepCopyOrderAndExpression(op.getOrderExpressions());
         List<Pair<IOrder, Mutable<ILogicalExpression>>> newFrameValueExprs =
diff --git 
a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/rewriter/base/AbstractRuleController.java
 
b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/rewriter/base/AbstractRuleController.java
index dca5d62..6a13214 100644
--- 
a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/rewriter/base/AbstractRuleController.java
+++ 
b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/rewriter/base/AbstractRuleController.java
@@ -41,7 +41,7 @@
     protected IOptimizationContext context;

     public AbstractRuleController() {
-        isTraceEnabled = AlgebricksConfig.ALGEBRICKS_LOGGER.isTraceEnabled();
+        isTraceEnabled = false;
     }

     public void setContext(IOptimizationContext context) {
@@ -186,9 +186,9 @@

     private void printRuleApplication(IAlgebraicRewriteRule rule, String 
status, String beforePlan, String afterPlan) {
         if (isTraceEnabled) {
-            AlgebricksConfig.ALGEBRICKS_LOGGER.trace(">> Rule " + 
rule.getClass().getName() + " " + status + "\n");
-            AlgebricksConfig.ALGEBRICKS_LOGGER.trace(">> Before plan\n" + 
LogRedactionUtil.userData(beforePlan) + "\n");
-            AlgebricksConfig.ALGEBRICKS_LOGGER.trace(">> After plan\n" + 
LogRedactionUtil.userData(afterPlan) + "\n");
+            AlgebricksConfig.ALGEBRICKS_LOGGER.info(">> Rule " + 
rule.getClass().getName() + " " + status + "\n");
+            AlgebricksConfig.ALGEBRICKS_LOGGER.info(">> Before plan\n" + 
LogRedactionUtil.userData(beforePlan) + "\n");
+            AlgebricksConfig.ALGEBRICKS_LOGGER.info(">> After plan\n" + 
LogRedactionUtil.userData(afterPlan) + "\n");
         }
     }
 }
diff --git 
a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/ExtractCommonOperatorsRule.java
 
b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/ExtractCommonOperatorsRule.java
index 14a44ac..88cfaad 100644
--- 
a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/ExtractCommonOperatorsRule.java
+++ 
b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/ExtractCommonOperatorsRule.java
@@ -414,13 +414,15 @@

     private void genCandidates() throws AlgebricksException {
         List<List<Mutable<ILogicalOperator>>> previousEquivalenceClasses = new 
ArrayList<>();
-        while (equivalenceClasses.size() > 0) {
+        boolean grown = true;
+        while (equivalenceClasses.size() > 0 && grown) {
             previousEquivalenceClasses.clear();
             for (List<Mutable<ILogicalOperator>> candidates : 
equivalenceClasses) {
                 List<Mutable<ILogicalOperator>> candidatesCopy = new 
ArrayList<>(candidates);
                 previousEquivalenceClasses.add(candidatesCopy);
             }
             List<Mutable<ILogicalOperator>> currentLevelOpRefs = new 
ArrayList<>();
+            grown = false;
             for (List<Mutable<ILogicalOperator>> candidates : 
equivalenceClasses) {
                 if (candidates.size() > 0) {
                     for (Mutable<ILogicalOperator> opRef : candidates) {
@@ -433,11 +435,20 @@
                 if (currentLevelOpRefs.size() == 0) {
                     continue;
                 }
-                candidatesGrow(currentLevelOpRefs, candidates);
+                grown |= candidatesGrow(currentLevelOpRefs, candidates);
             }
             if (currentLevelOpRefs.size() == 0) {
                 break;
             }
+
+            for (int i = equivalenceClasses.size() - 1; i >= 0; i--) {
+                for (int j = i - 1; j >= 0; j--) {
+                    if 
(equivalenceClasses.get(i).equals(equivalenceClasses.get(j))) {
+                        equivalenceClasses.remove(i);
+                        break;
+                    }
+                }
+            }
             prune();
         }
         if (equivalenceClasses.size() < 1 && previousEquivalenceClasses.size() 
> 0) {
@@ -473,15 +484,14 @@
         }
     }

-    private void candidatesGrow(List<Mutable<ILogicalOperator>> opList, 
List<Mutable<ILogicalOperator>> candidates) {
+    private boolean candidatesGrow(List<Mutable<ILogicalOperator>> opList, 
List<Mutable<ILogicalOperator>> candidates) {
         List<Mutable<ILogicalOperator>> previousCandidates = new 
ArrayList<>(candidates);
         candidates.clear();
-        boolean validCandidate = false;
         for (Mutable<ILogicalOperator> op : opList) {
             List<Mutable<ILogicalOperator>> inputs = op.getValue().getInputs();
+            boolean validCandidate = false;
             for (int i = 0; i < inputs.size(); i++) {
                 Mutable<ILogicalOperator> inputRef = inputs.get(i);
-                validCandidate = false;
                 for (Mutable<ILogicalOperator> candidate : previousCandidates) 
{
                     // if current input is in candidates
                     if (inputRef.getValue().equals(candidate.getValue())) {
@@ -509,6 +519,11 @@
                 candidates.add(op);
             }
         }
+        if (candidates.isEmpty()) {
+            candidates.addAll(previousCandidates);
+            return false;
+        }
+        return true;
     }

     private void prune() throws AlgebricksException {

--
To view, visit https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/20986?usp=email
To unsubscribe, or for help writing mail filters, visit 
https://asterix-gerrit.ics.uci.edu/settings?usp=email

Gerrit-MessageType: newchange
Gerrit-Project: asterixdb
Gerrit-Branch: lumina
Gerrit-Change-Id: I9c95e889a6a85e6d3e4f6258c75aef8caa09acfd
Gerrit-Change-Number: 20986
Gerrit-PatchSet: 1
Gerrit-Owner: Preetham Poluparthi <[email protected]>

Reply via email to