>From Peeyush Gupta <[email protected]>:
Peeyush Gupta has uploaded this change for review. (
https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/18332 )
Change subject: WIP: nested query with unionall failing compilation
......................................................................
WIP: nested query with unionall failing compilation
Change-Id: Id4975cc73a51480ef05d6b6d472bf1ca21600000
---
M
hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/LogicalOperatorDeepCopyWithNewVariablesVisitor.java
M
hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/OperatorDeepCopyVisitor.java
M
asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/subplan/InlineAllNtsInSubplanVisitor.java
M
hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/UnionAllOperator.java
4 files changed, 49 insertions(+), 2 deletions(-)
git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb
refs/changes/32/18332/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 55165ed..0f58188 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
@@ -593,6 +593,11 @@
@Override
public ILogicalOperator visitUnionOperator(UnionAllOperator op, Void arg)
throws AlgebricksException {
visitMultiInputOperator(op);
+ for (LogicalVariable keyVar : correlatedKeyVars) {
+ if (op.getSchema() == null || !op.getSchema().contains(keyVar)) {
+ op.addDecorVariable(keyVar);
+ }
+ }
// Update the variable mappings
List<Triple<LogicalVariable, LogicalVariable, LogicalVariable>>
varTriples = op.getVariableMappings();
for (Triple<LogicalVariable, LogicalVariable, LogicalVariable> triple
: varTriples) {
diff --git
a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/UnionAllOperator.java
b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/UnionAllOperator.java
index 45c6e2f..667553e 100644
---
a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/UnionAllOperator.java
+++
b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/UnionAllOperator.java
@@ -36,9 +36,25 @@
// (left-var, right-var, out-var)
private final List<Triple<LogicalVariable, LogicalVariable,
LogicalVariable>> varMap;
+ private final List<LogicalVariable> decorList;
public UnionAllOperator(List<Triple<LogicalVariable, LogicalVariable,
LogicalVariable>> varMap) {
this.varMap = varMap;
+ this.decorList = new ArrayList<>();
+ }
+
+ public UnionAllOperator(List<Triple<LogicalVariable, LogicalVariable,
LogicalVariable>> varMap,
+ List<LogicalVariable> decorList) {
+ this.varMap = varMap;
+ this.decorList = decorList;
+ }
+
+ public void addDecorVariable(LogicalVariable decorVariable) {
+ decorList.add(decorVariable);
+ }
+
+ public List<LogicalVariable> getDecorList() {
+ return decorList;
}
public List<Triple<LogicalVariable, LogicalVariable, LogicalVariable>>
getVariableMappings() {
@@ -60,6 +76,9 @@
for (Triple<LogicalVariable, LogicalVariable, LogicalVariable>
t : varMap) {
target.addVariable(t.third);
}
+ for (LogicalVariable var : decorList) {
+ target.addVariable(var);
+ }
}
};
@@ -152,6 +171,15 @@
env.setVarType(t.third,
ctx.getConflictingTypeResolver().resolve(typeFromLeft, typeFromRight));
}
}
+ for (LogicalVariable t : decorList) {
+ Object typeFromLeft = envLeft.getVarType(t);
+ if (typeFromLeft != null) {
+ env.setVarType(t, typeFromLeft);
+ } else {
+ Object typeFromRight = envLeft.getVarType(t);
+ env.setVarType(t, typeFromRight);
+ }
+ }
return env;
}
diff --git
a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/LogicalOperatorDeepCopyWithNewVariablesVisitor.java
b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/LogicalOperatorDeepCopyWithNewVariablesVisitor.java
index ba49233..b5fecc7 100644
---
a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/LogicalOperatorDeepCopyWithNewVariablesVisitor.java
+++
b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/LogicalOperatorDeepCopyWithNewVariablesVisitor.java
@@ -492,7 +492,8 @@
public ILogicalOperator visitUnionOperator(UnionAllOperator op,
ILogicalOperator arg) throws AlgebricksException {
List<Triple<LogicalVariable, LogicalVariable, LogicalVariable>>
variableMappingsCopy =
new ArrayList<>(op.getVariableMappings().size());
- UnionAllOperator opCopy = new UnionAllOperator(variableMappingsCopy);
+ List<LogicalVariable> decorList = new
ArrayList<>(op.getDecorList().size());
+ UnionAllOperator opCopy = new UnionAllOperator(variableMappingsCopy,
decorList);
deepCopyInputsAnnotationsAndExecutionMode(op, arg, opCopy);
for (Triple<LogicalVariable, LogicalVariable, LogicalVariable> triple
: op.getVariableMappings()) {
LogicalVariable producedVar = deepCopyVariable(triple.third);
@@ -502,6 +503,10 @@
new Triple<>(newLeftVar, newRightVar, producedVar);
variableMappingsCopy.add(copiedTriple);
}
+ for (LogicalVariable var : op.getDecorList()) {
+ LogicalVariable producedVar = deepCopyVariable(var);
+ decorList.add(producedVar);
+ }
return opCopy;
}
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 8664acf..74af3ad 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
@@ -214,7 +214,7 @@
for (Triple<LogicalVariable, LogicalVariable, LogicalVariable> triple
: varMap) {
newVarMap.add(new Triple<>(triple.first, triple.second,
triple.third));
}
- return new UnionAllOperator(newVarMap);
+ return new UnionAllOperator(newVarMap, op.getDecorList());
}
@Override
--
To view, visit https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/18332
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: Id4975cc73a51480ef05d6b6d472bf1ca21600000
Gerrit-Change-Number: 18332
Gerrit-PatchSet: 1
Gerrit-Owner: Peeyush Gupta <[email protected]>
Gerrit-MessageType: newchange