blob: d75c29294ddd43c8777eadf7d9f36d15a5fe0d82 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.pig.backend.hadoop.executionengine.mapReduceLayer;
import java.util.List;
import org.apache.pig.backend.hadoop.executionengine.physicalLayer.PhysicalOperator;
import org.apache.pig.backend.hadoop.executionengine.physicalLayer.expressionOperators.Add;
import org.apache.pig.backend.hadoop.executionengine.physicalLayer.expressionOperators.ConstantExpression;
import org.apache.pig.backend.hadoop.executionengine.physicalLayer.expressionOperators.Divide;
import org.apache.pig.backend.hadoop.executionengine.physicalLayer.expressionOperators.EqualToExpr;
import org.apache.pig.backend.hadoop.executionengine.physicalLayer.expressionOperators.GTOrEqualToExpr;
import org.apache.pig.backend.hadoop.executionengine.physicalLayer.expressionOperators.GreaterThanExpr;
import org.apache.pig.backend.hadoop.executionengine.physicalLayer.expressionOperators.LTOrEqualToExpr;
import org.apache.pig.backend.hadoop.executionengine.physicalLayer.expressionOperators.LessThanExpr;
import org.apache.pig.backend.hadoop.executionengine.physicalLayer.expressionOperators.Mod;
import org.apache.pig.backend.hadoop.executionengine.physicalLayer.expressionOperators.Multiply;
import org.apache.pig.backend.hadoop.executionengine.physicalLayer.expressionOperators.NotEqualToExpr;
import org.apache.pig.backend.hadoop.executionengine.physicalLayer.expressionOperators.POAnd;
import org.apache.pig.backend.hadoop.executionengine.physicalLayer.expressionOperators.POBinCond;
import org.apache.pig.backend.hadoop.executionengine.physicalLayer.expressionOperators.POCast;
import org.apache.pig.backend.hadoop.executionengine.physicalLayer.expressionOperators.POIsNull;
import org.apache.pig.backend.hadoop.executionengine.physicalLayer.expressionOperators.POMapLookUp;
import org.apache.pig.backend.hadoop.executionengine.physicalLayer.expressionOperators.PONegative;
import org.apache.pig.backend.hadoop.executionengine.physicalLayer.expressionOperators.PONot;
import org.apache.pig.backend.hadoop.executionengine.physicalLayer.expressionOperators.POOr;
import org.apache.pig.backend.hadoop.executionengine.physicalLayer.expressionOperators.POProject;
import org.apache.pig.backend.hadoop.executionengine.physicalLayer.expressionOperators.PORegexp;
import org.apache.pig.backend.hadoop.executionengine.physicalLayer.expressionOperators.POUserComparisonFunc;
import org.apache.pig.backend.hadoop.executionengine.physicalLayer.expressionOperators.POUserFunc;
import org.apache.pig.backend.hadoop.executionengine.physicalLayer.expressionOperators.Subtract;
import org.apache.pig.backend.hadoop.executionengine.physicalLayer.plans.PhyPlanVisitor;
import org.apache.pig.backend.hadoop.executionengine.physicalLayer.plans.PhysicalPlan;
import org.apache.pig.backend.hadoop.executionengine.physicalLayer.relationalOperators.POCollectedGroup;
import org.apache.pig.backend.hadoop.executionengine.physicalLayer.relationalOperators.PODemux;
import org.apache.pig.backend.hadoop.executionengine.physicalLayer.relationalOperators.PODistinct;
import org.apache.pig.backend.hadoop.executionengine.physicalLayer.relationalOperators.POFRJoin;
import org.apache.pig.backend.hadoop.executionengine.physicalLayer.relationalOperators.POFilter;
import org.apache.pig.backend.hadoop.executionengine.physicalLayer.relationalOperators.POForEach;
import org.apache.pig.backend.hadoop.executionengine.physicalLayer.relationalOperators.POGlobalRearrange;
import org.apache.pig.backend.hadoop.executionengine.physicalLayer.relationalOperators.POLimit;
import org.apache.pig.backend.hadoop.executionengine.physicalLayer.relationalOperators.POLoad;
import org.apache.pig.backend.hadoop.executionengine.physicalLayer.relationalOperators.POLocalRearrange;
import org.apache.pig.backend.hadoop.executionengine.physicalLayer.relationalOperators.POMergeCogroup;
import org.apache.pig.backend.hadoop.executionengine.physicalLayer.relationalOperators.POMergeJoin;
import org.apache.pig.backend.hadoop.executionengine.physicalLayer.relationalOperators.PONative;
import org.apache.pig.backend.hadoop.executionengine.physicalLayer.relationalOperators.POOptimizedForEach;
import org.apache.pig.backend.hadoop.executionengine.physicalLayer.relationalOperators.POPackage;
import org.apache.pig.backend.hadoop.executionengine.physicalLayer.relationalOperators.POPartialAgg;
import org.apache.pig.backend.hadoop.executionengine.physicalLayer.relationalOperators.POPoissonSample;
import org.apache.pig.backend.hadoop.executionengine.physicalLayer.relationalOperators.POPreCombinerLocalRearrange;
import org.apache.pig.backend.hadoop.executionengine.physicalLayer.relationalOperators.PORank;
import org.apache.pig.backend.hadoop.executionengine.physicalLayer.relationalOperators.POReservoirSample;
import org.apache.pig.backend.hadoop.executionengine.physicalLayer.relationalOperators.POSkewedJoin;
import org.apache.pig.backend.hadoop.executionengine.physicalLayer.relationalOperators.POSort;
import org.apache.pig.backend.hadoop.executionengine.physicalLayer.relationalOperators.POSplit;
import org.apache.pig.backend.hadoop.executionengine.physicalLayer.relationalOperators.POStore;
import org.apache.pig.backend.hadoop.executionengine.physicalLayer.relationalOperators.POStream;
import org.apache.pig.backend.hadoop.executionengine.physicalLayer.relationalOperators.POUnion;
import org.apache.pig.impl.plan.DependencyOrderWalker;
import org.apache.pig.impl.plan.VisitorException;
/**
* Sets the parent plan for all Physical Operators. Note: parentPlan
* is a bit of a misnomer. We actually want all the operators to point
* to the same plan - not necessarily the one they're a member of.
*/
public class PhyPlanSetter extends PhyPlanVisitor {
PhysicalPlan parent;
public PhyPlanSetter(PhysicalPlan plan) {
super(plan, new DependencyOrderWalker<PhysicalOperator, PhysicalPlan>(plan));
parent = plan;
}
@Override
public void visit(PhysicalOperator op) {
op.setParentPlan(parent);
}
@Override
public void visitLoad(POLoad ld) throws VisitorException{
ld.setParentPlan(parent);
}
@Override
public void visitNative(PONative nt) throws VisitorException{
nt.setParentPlan(parent);
}
@Override
public void visitStore(POStore st) throws VisitorException{
st.setParentPlan(parent);
}
@Override
public void visitFilter(POFilter fl) throws VisitorException{
super.visitFilter(fl);
fl.setParentPlan(parent);
}
@Override
public void visitLocalRearrange(POLocalRearrange lr) throws VisitorException{
super.visitLocalRearrange(lr);
lr.setParentPlan(parent);
}
@Override
public void visitCollectedGroup(POCollectedGroup mg) throws VisitorException{
super.visitCollectedGroup(mg);
mg.setParentPlan(parent);
}
@Override
public void visitGlobalRearrange(POGlobalRearrange gr) throws VisitorException{
gr.setParentPlan(parent);
}
@Override
public void visitPackage(POPackage pkg) throws VisitorException{
pkg.setParentPlan(parent);
}
@Override
public void visitPOForEach(POForEach nfe) throws VisitorException {
super.visitPOForEach(nfe);
nfe.setParentPlan(parent);
}
@Override
public void visitUnion(POUnion un) throws VisitorException{
un.setParentPlan(parent);
}
@Override
public void visitSplit(POSplit spl) throws VisitorException{
PhysicalPlan oldPlan = parent;
List<PhysicalPlan> plans = spl.getPlans();
for (PhysicalPlan plan : plans) {
parent = plan;
pushWalker(mCurrentWalker.spawnChildWalker(plan));
visit();
popWalker();
}
parent=oldPlan;
spl.setParentPlan(parent);
}
@Override
public void visitDemux(PODemux demux) throws VisitorException{
super.visitDemux(demux);
demux.setParentPlan(parent);
}
@Override
public void visitDistinct(PODistinct distinct) throws VisitorException {
distinct.setParentPlan(parent);
}
@Override
public void visitSort(POSort sort) throws VisitorException {
super.visitSort(sort);
sort.setParentPlan(parent);
}
@Override
public void visitRank(PORank rank) throws VisitorException {
rank.setParentPlan(parent);
}
@Override
public void visitConstant(ConstantExpression cnst) throws VisitorException{
cnst.setParentPlan(parent);
}
@Override
public void visitProject(POProject proj) throws VisitorException{
proj.setParentPlan(parent);
}
@Override
public void visitGreaterThan(GreaterThanExpr grt) throws VisitorException{
grt.setParentPlan(parent);
}
@Override
public void visitLessThan(LessThanExpr lt) throws VisitorException{
lt.setParentPlan(parent);
}
@Override
public void visitGTOrEqual(GTOrEqualToExpr gte) throws VisitorException{
gte.setParentPlan(parent);
}
@Override
public void visitLTOrEqual(LTOrEqualToExpr lte) throws VisitorException{
lte.setParentPlan(parent);
}
@Override
public void visitEqualTo(EqualToExpr eq) throws VisitorException{
eq.setParentPlan(parent);
}
@Override
public void visitNotEqualTo(NotEqualToExpr eq) throws VisitorException{
eq.setParentPlan(parent);
}
@Override
public void visitRegexp(PORegexp re) throws VisitorException{
re.setParentPlan(parent);
}
@Override
public void visitIsNull(POIsNull isNull) throws VisitorException {
isNull.setParentPlan(parent);
}
@Override
public void visitAdd(Add add) throws VisitorException{
add.setParentPlan(parent);
}
@Override
public void visitSubtract(Subtract sub) throws VisitorException {
sub.setParentPlan(parent);
}
@Override
public void visitMultiply(Multiply mul) throws VisitorException {
mul.setParentPlan(parent);
}
@Override
public void visitDivide(Divide dv) throws VisitorException {
dv.setParentPlan(parent);
}
@Override
public void visitMod(Mod mod) throws VisitorException {
mod.setParentPlan(parent);
}
@Override
public void visitAnd(POAnd and) throws VisitorException {
and.setParentPlan(parent);
}
@Override
public void visitOr(POOr or) throws VisitorException {
or.setParentPlan(parent);
}
@Override
public void visitNot(PONot not) throws VisitorException {
not.setParentPlan(parent);
}
@Override
public void visitBinCond(POBinCond binCond) {
binCond.setParentPlan(parent);
}
@Override
public void visitNegative(PONegative negative) {
negative.setParentPlan(parent);
}
@Override
public void visitUserFunc(POUserFunc userFunc) throws VisitorException {
userFunc.setParentPlan(parent);
}
@Override
public void visitComparisonFunc(POUserComparisonFunc compFunc) throws VisitorException {
compFunc.setParentPlan(parent);
}
@Override
public void visitMapLookUp(POMapLookUp mapLookUp) {
mapLookUp.setParentPlan(parent);
}
@Override
public void visitCast(POCast cast) {
cast.setParentPlan(parent);
}
@Override
public void visitLimit(POLimit lim) throws VisitorException{
lim.setParentPlan(parent);
}
@Override
public void visitFRJoin(POFRJoin join) throws VisitorException {
join.setParentPlan(parent);
}
@Override
public void visitMergeJoin(POMergeJoin join) throws VisitorException {
join.setParentPlan(parent);
}
@Override
public void visitSkewedJoin(POSkewedJoin join) throws VisitorException {
join.setParentPlan(parent);
}
@Override
public void visitStream(POStream stream) throws VisitorException {
stream.setParentPlan(parent);
}
/*
@Override
public void visitPartitionRearrange(POPartitionRearrange lrfi) throws VisitorException {
super.visitPartitionRearrange(lrfi);
lrfi.setParentPlan(parent);
}
*/
@Override
public void visitPartialAgg(POPartialAgg poPartialAgg) throws VisitorException {
poPartialAgg.setParentPlan(parent);
}
@Override
public void visitPOOptimizedForEach(POOptimizedForEach optimizedForEach) throws VisitorException {
optimizedForEach.setParentPlan(parent);
}
@Override
public void visitPreCombinerLocalRearrange(
POPreCombinerLocalRearrange preCombinerLocalRearrange) throws VisitorException {
super.visitPreCombinerLocalRearrange(preCombinerLocalRearrange);
preCombinerLocalRearrange.setParentPlan(parent);
}
@Override
public void visitMergeCoGroup(POMergeCogroup mergeCoGrp)
throws VisitorException {
mergeCoGrp.setParentPlan(parent);
}
@Override
public void visitReservoirSample(POReservoirSample reservoirSample)
throws VisitorException {
reservoirSample.setParentPlan(parent);
}
@Override
public void visitPoissonSample(POPoissonSample poissonSample)
throws VisitorException {
poissonSample.setParentPlan(parent);
}
}