>From Ali Alsuliman <[email protected]>:
Ali Alsuliman has uploaded this change for review. (
https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/21088?usp=email )
Change subject: correlation with LIMIT
......................................................................
correlation with LIMIT
Change-Id: Ie17ec11dd1e8ae1300de28956f389943dbe0fe0d
---
M
asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/subplan/InlineAllNtsInSubplanVisitor.java
1 file changed, 16 insertions(+), 6 deletions(-)
git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb
refs/changes/88/21088/1
diff --git
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/subplan/InlineAllNtsInSubplanVisitor.java
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/subplan/InlineAllNtsInSubplanVisitor.java
index 497d21c..bd462fb 100644
---
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/subplan/InlineAllNtsInSubplanVisitor.java
+++
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/subplan/InlineAllNtsInSubplanVisitor.java
@@ -274,7 +274,7 @@
}
// Get live variables before limit (or running aggregate) operator.
- Set<LogicalVariable> inputLiveVars = new HashSet<LogicalVariable>();
+ Set<LogicalVariable> inputLiveVars = new HashSet<>();
VariableUtilities.getSubplanLocalLiveVariables(op.getInputs().get(0).getValue(),
inputLiveVars);
// Creates a record construction assign operator.
@@ -286,9 +286,9 @@
assignOp.getInputs().add(new MutableObject<>(inputOp));
// Rewrites limit (or running aggregate) to a group-by with limit (or
running aggregate) as its nested operator.
- Pair<ILogicalOperator, LogicalVariable> gbyOpAndAggVar =
+ Pair<GroupByOperator, LogicalVariable> gbyOpAndAggVar =
wrapLimitOrRunningAggregateInGroupBy(op, recordVar,
inputLiveVars);
- ILogicalOperator gbyOp = gbyOpAndAggVar.first;
+ GroupByOperator gbyOp = gbyOpAndAggVar.first;
LogicalVariable aggVar = gbyOpAndAggVar.second;
gbyOp.getInputs().add(new MutableObject<>(assignOp));
@@ -301,7 +301,7 @@
// Adds field accesses to recover input live variables.
ILogicalOperator fieldAccessAssignOp =
- createFieldAccessAssignOperator(unnestVar, inputLiveVars,
op.getSourceLocation());
+ createFieldAccessAssignOperator(unnestVar, inputLiveVars,
op.getSourceLocation(), gbyOp);
fieldAccessAssignOp.getInputs().add(new MutableObject<>(unnestOp));
OperatorManipulationUtil.computeTypeEnvironmentBottomUp(fieldAccessAssignOp,
context);
@@ -331,7 +331,7 @@
return new Pair<>(assignOp, recordVar);
}
- private Pair<ILogicalOperator, LogicalVariable>
wrapLimitOrRunningAggregateInGroupBy(ILogicalOperator op,
+ private Pair<GroupByOperator, LogicalVariable>
wrapLimitOrRunningAggregateInGroupBy(ILogicalOperator op,
LogicalVariable recordVar, Set<LogicalVariable> inputLiveVars)
throws AlgebricksException {
SourceLocation sourceLoc = op.getSourceLocation();
GroupByOperator gbyOp = new GroupByOperator();
@@ -417,7 +417,7 @@
}
private ILogicalOperator createFieldAccessAssignOperator(LogicalVariable
recordVar,
- Set<LogicalVariable> inputLiveVars, SourceLocation sourceLoc) {
+ Set<LogicalVariable> inputLiveVars, SourceLocation sourceLoc,
GroupByOperator gbyOp) {
List<LogicalVariable> fieldAccessVars = new ArrayList<>();
List<Mutable<ILogicalExpression>> fieldAccessExprs = new ArrayList<>();
// Adds field access by name.
@@ -426,6 +426,16 @@
// field Var
LogicalVariable newVar = context.newVar();
fieldAccessVars.add(newVar);
+ List<LogicalVariable> groupByVarList =
gbyOp.getGroupByVarList();
+ int i = groupByVarList.indexOf(inputLiveVar);
+ if (i >= 0) {
+ LogicalVariable fVar =
gbyOp.getGroupByList().get(i).getFirst();
+ VariableReferenceExpression keyVarRef = new
VariableReferenceExpression(fVar);
+ keyVarRef.setSourceLocation(sourceLoc);
+ fieldAccessExprs.add(new MutableObject<>(keyVarRef));
+ updateInputToOutputVarMapping(fVar, newVar, false);
+ continue;
+ }
// fieldAcess expr
List<Mutable<ILogicalExpression>> argRefs = new ArrayList<>();
VariableReferenceExpression recordVarRef = new
VariableReferenceExpression(recordVar);
--
To view, visit https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/21088?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: trinity
Gerrit-Change-Id: Ie17ec11dd1e8ae1300de28956f389943dbe0fe0d
Gerrit-Change-Number: 21088
Gerrit-PatchSet: 1
Gerrit-Owner: Ali Alsuliman <[email protected]>