>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