/* * 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.pen; import java.util.LinkedList; import java.util.ArrayList; import org.apache.pig.backend.hadoop.executionengine.physicalLayer.PhysicalOperator; import org.apache.pig.data.BagFactory; import org.apache.pig.data.DataBag; import org.apache.pig.data.Tuple; import org.apache.pig.impl.PigContext; import org.apache.pig.pen.util.LineageTracer; import org.apache.pig.impl.util.IdentityHashSet; import org.apache.pig.newplan.logical.relational.LogicalSchema; /** * Class used by physical operators to generate example tuples for the ILLUSTRATE * purpose */ public class Illustrator { private LineageTracer lineage; private LinkedList<IdentityHashSet<Tuple>> equivalenceClasses; // all input tuples for an expression private IdentityHashSet<Tuple> inputs = null; private DataBag data; private int maxRecords = -1; private int recCounter = 0; private IllustratorAttacher attacher; private ArrayList<Boolean[]> subExpResults; private Boolean[] subExpResult; private boolean eqClassesShared; private long oriLimit = -1; private LogicalSchema schema; public Illustrator(LineageTracer lineage, LinkedList<IdentityHashSet<Tuple>> equivalenceClasses, IllustratorAttacher attacher, PigContext hadoopPigContext) { this.lineage = lineage; this.equivalenceClasses = equivalenceClasses; data = BagFactory.getInstance().newDefaultBag(); this.attacher = attacher; subExpResults = new ArrayList<Boolean[]>(); subExpResult = new Boolean[1]; schema = null; } public Illustrator(LineageTracer lineage, LinkedList<IdentityHashSet<Tuple>> equivalenceClasses, int maxRecords, IllustratorAttacher attacher, LogicalSchema schema, PigContext hadoopPigContext) { this(lineage, equivalenceClasses, attacher, hadoopPigContext); this.maxRecords = maxRecords; this.schema = schema; } public ArrayList<Boolean[]> getSubExpResults() { return subExpResults; } Boolean[] getSubExpResult() { return subExpResult; } public LineageTracer getLineage() { return lineage; } public LinkedList<IdentityHashSet<Tuple>> getEquivalenceClasses() { return equivalenceClasses; } public void setSubExpResult(boolean result) { subExpResult[0] = result; } public void setEquivalenceClasses(LinkedList<IdentityHashSet<Tuple>> eqClasses, PhysicalOperator po) { equivalenceClasses = eqClasses; attacher.poToEqclassesMap.put(po, eqClasses); } public boolean ceilingCheck() { if (maxRecords != -1 && ++recCounter > maxRecords) return false; else return true; } public IdentityHashSet<Tuple> getInputs() { return inputs; } public void addInputs(IdentityHashSet<Tuple> inputs) { if (this.inputs == null) this.inputs = new IdentityHashSet<Tuple>(); this.inputs.addAll(inputs); } public void addData(Tuple t) { data.add(t); } public DataBag getData() { return data; } public long getOriginalLimit() { return oriLimit; } public void setOriginalLimit(long oriLimit) { this.oriLimit = oriLimit; } public void setEqClassesShared() { eqClassesShared = true; } public boolean getEqClassesShared() { return eqClassesShared; } public LogicalSchema getSchema() { return schema; } }