>From Vijay Sarathy <[email protected]>:

Vijay Sarathy has uploaded this change for review. ( 
https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/19351 )


Change subject: [ASTERIXDB-3543][COMP] Investigate single reference inlining 
rule
......................................................................

[ASTERIXDB-3543][COMP] Investigate single reference inlining rule

Ext-ref: MB-64252

Change-Id: Ia818f11e45bf66e3b4807938bfb635c70fa9c496
---
M 
hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/InlineSingleReferenceVariablesRule.java
1 file changed, 33 insertions(+), 1 deletion(-)



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

diff --git 
a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/InlineSingleReferenceVariablesRule.java
 
b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/InlineSingleReferenceVariablesRule.java
index be169f4..e949462 100644
--- 
a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/InlineSingleReferenceVariablesRule.java
+++ 
b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/InlineSingleReferenceVariablesRule.java
@@ -19,6 +19,7 @@
 package org.apache.hyracks.algebricks.rewriter.rules;

 import java.util.ArrayList;
+import java.util.HashSet;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
@@ -26,6 +27,7 @@
 import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
 import org.apache.hyracks.algebricks.core.algebra.base.ILogicalOperator;
 import org.apache.hyracks.algebricks.core.algebra.base.IOptimizationContext;
+import org.apache.hyracks.algebricks.core.algebra.base.LogicalOperatorTag;
 import org.apache.hyracks.algebricks.core.algebra.base.LogicalVariable;
 import 
org.apache.hyracks.algebricks.core.algebra.operators.logical.visitors.VariableUtilities;

@@ -53,12 +55,14 @@
     protected Map<LogicalVariable, List<ILogicalOperator>> usedVarsMap =
             new LinkedHashMap<LogicalVariable, List<ILogicalOperator>>();
     protected List<LogicalVariable> usedVars = new 
ArrayList<LogicalVariable>();
+    protected List<LogicalVariable> usedResultVars = new 
ArrayList<LogicalVariable>();

     @Override
     protected void prepare(IOptimizationContext context) {
         super.prepare(context);
         usedVarsMap.clear();
         usedVars.clear();
+        usedResultVars.clear();
     }

     @Override
@@ -68,7 +72,7 @@
             // Perform replacement only if variable is referenced a single 
time.
             if (entry.getValue().size() == 1) {
                 ILogicalOperator op = entry.getValue().get(0);
-                if (!op.requiresVariableReferenceExpressions()) {
+                if (!op.requiresVariableReferenceExpressions() && 
!opVarsInSelectList(op)) {
                     inlineVisitor.setOperator(op);
                     inlineVisitor.setTargetVariable(entry.getKey());
                     if (op.accept(inlineVisitor, inlineVisitor)) {
@@ -85,6 +89,10 @@
     protected boolean performBottomUpAction(ILogicalOperator op) throws 
AlgebricksException {
         usedVars.clear();
         VariableUtilities.getUsedVariables(op, usedVars);
+        usedResultVars.clear();
+        if (op.getOperatorTag() == LogicalOperatorTag.DISTRIBUTE_RESULT) {
+            VariableUtilities.getUsedVariables(op, usedResultVars);
+        }
         for (LogicalVariable var : usedVars) {
             List<ILogicalOperator> opsUsingVar = usedVarsMap.get(var);
             if (opsUsingVar == null) {
@@ -95,4 +103,17 @@
         }
         return false;
     }
+
+    private boolean opVarsInSelectList(ILogicalOperator op)
+            throws AlgebricksException{
+        List<LogicalVariable> vars = new ArrayList<>();
+        vars.clear();
+        VariableUtilities.getProducedVariables(op, vars);
+        for (LogicalVariable var : vars) {
+            if (usedResultVars.contains(var)) {
+                return true;
+            }
+        }
+        return false;
+    }
 }

--
To view, visit https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/19351
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: Ia818f11e45bf66e3b4807938bfb635c70fa9c496
Gerrit-Change-Number: 19351
Gerrit-PatchSet: 1
Gerrit-Owner: Vijay Sarathy <[email protected]>
Gerrit-MessageType: newchange

Reply via email to