>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

Reply via email to