@Override public ILogicalOperator visitUnionOperator(UnionAllOperator op, Void arg) throws AlgebricksException { List<Triple<LogicalVariable, LogicalVariable, LogicalVariable>> newVarMap = new ArrayList<>(); List<Triple<LogicalVariable, LogicalVariable, LogicalVariable>> varMap = op.getVariableMappings(); for (Triple<LogicalVariable, LogicalVariable, LogicalVariable> triple : varMap) { newVarMap.add(new Triple<>(triple.first, triple.second, triple.third)); } return new UnionAllOperator(newVarMap); }
@Override public ILogicalOperator visitUnionOperator(UnionAllOperator op, ILogicalOperator arg) throws AlgebricksException { List<Mutable<ILogicalOperator>> copiedInputs = new ArrayList<>(); for (Mutable<ILogicalOperator> childRef : op.getInputs()) { copiedInputs.add(deepCopyOperatorReference(childRef, null)); } List<List<LogicalVariable>> liveVarsInInputs = new ArrayList<>(); for (Mutable<ILogicalOperator> inputOpRef : copiedInputs) { List<LogicalVariable> liveVars = new ArrayList<>(); VariableUtilities.getLiveVariables(inputOpRef.getValue(), liveVars); liveVarsInInputs.add(liveVars); } List<LogicalVariable> liveVarsInLeftInput = liveVarsInInputs.get(0); List<LogicalVariable> liveVarsInRightInput = liveVarsInInputs.get(1); List<Triple<LogicalVariable, LogicalVariable, LogicalVariable>> copiedTriples = new ArrayList<>(); int index = 0; for (Triple<LogicalVariable, LogicalVariable, LogicalVariable> triple : op.getVariableMappings()) { LogicalVariable producedVar = deepCopyVariable(triple.third); Triple<LogicalVariable, LogicalVariable, LogicalVariable> copiedTriple = new Triple<>(liveVarsInLeftInput.get(index), liveVarsInRightInput.get(index), producedVar); copiedTriples.add(copiedTriple); ++index; } UnionAllOperator opCopy = new UnionAllOperator(copiedTriples); deepCopyInputsAnnotationsAndExecutionMode(op, arg, opCopy); return opCopy; }
UnionAllOperator newUnionAllOp = new UnionAllOperator(varMap); newUnionAllOp.getInputs() .add(new MutableObject<ILogicalOperator>(unionAllOp.getInputs().get(0).getValue()));
topUnionAllOp = new UnionAllOperator(varTriples); topUnionAllOp.getInputs().add(leftInputBranch); topUnionAllOp.getInputs().add(inputOpRefIterator.next());
unionAllOp = new UnionAllOperator(unionVarMap); unionAllOp.setSourceLocation(sourceLoc); unionAllOp.getInputs().add(new MutableObject<ILogicalOperator>(newSelectOpInLeftPath));
unnestOpRef.getVariables().get(0)); varMap.add(union_triple_vars); UnionAllOperator unionOpFinal = new UnionAllOperator(varMap);
indexSubTreeVar)); UnionAllOperator unionAllOp = new UnionAllOperator(varMap); unionAllOp.setSourceLocation(topOp.getSourceLocation()); unionAllOp.getInputs().add(new MutableObject<ILogicalOperator>(topOp));