Author: gates Date: Wed Aug 27 17:09:04 2008 New Revision: 689673 URL: http://svn.apache.org/viewvc?rev=689673&view=rev Log: PIG-399 Added LOLimit to visitors in the optimizer so that when the plan is rearranged limit is handled correctly.
Modified: incubator/pig/branches/types/src/org/apache/pig/impl/logicalLayer/LOLimit.java incubator/pig/branches/types/src/org/apache/pig/impl/logicalLayer/PlanSetter.java incubator/pig/branches/types/src/org/apache/pig/impl/logicalLayer/optimizer/SchemaCalculator.java incubator/pig/branches/types/src/org/apache/pig/impl/logicalLayer/optimizer/SchemaRemover.java incubator/pig/branches/types/src/org/apache/pig/impl/logicalLayer/package.html incubator/pig/branches/types/src/org/apache/pig/impl/logicalLayer/parser/QueryParser.jjt Modified: incubator/pig/branches/types/src/org/apache/pig/impl/logicalLayer/LOLimit.java URL: http://svn.apache.org/viewvc/incubator/pig/branches/types/src/org/apache/pig/impl/logicalLayer/LOLimit.java?rev=689673&r1=689672&r2=689673&view=diff ============================================================================== --- incubator/pig/branches/types/src/org/apache/pig/impl/logicalLayer/LOLimit.java (original) +++ incubator/pig/branches/types/src/org/apache/pig/impl/logicalLayer/LOLimit.java Wed Aug 27 17:09:04 2008 @@ -9,7 +9,6 @@ public class LOLimit extends LogicalOperator { private static final long serialVersionUID = 2L; - private LogicalOperator mInput; private long mLimit; /** * @@ -23,15 +22,13 @@ * the input that needs to limit */ - public LOLimit(LogicalPlan plan, OperatorKey k, - long limit, LogicalOperator input) { + public LOLimit(LogicalPlan plan, OperatorKey k, long limit) { super(plan, k); mLimit = limit; - mInput = input; } public LogicalOperator getInput() { - return mInput; + return mPlan.getPredecessors(this).get(0); } public long getLimit() { @@ -45,7 +42,7 @@ public Schema getSchema() throws FrontendException { if (!mIsSchemaComputed) { try { - mSchema = mInput.getSchema(); + mSchema = getInput().getSchema(); mIsSchemaComputed = true; } catch (FrontendException ioe) { mSchema = null; @@ -81,8 +78,9 @@ return DataType.BAG ; } + // Shouldn't this be clone? public LOLimit duplicate() { - return new LOLimit(mPlan, OperatorKey.genOpKey(mKey.scope), mLimit, mInput); + return new LOLimit(mPlan, OperatorKey.genOpKey(mKey.scope), mLimit); } } Modified: incubator/pig/branches/types/src/org/apache/pig/impl/logicalLayer/PlanSetter.java URL: http://svn.apache.org/viewvc/incubator/pig/branches/types/src/org/apache/pig/impl/logicalLayer/PlanSetter.java?rev=689673&r1=689672&r2=689673&view=diff ============================================================================== --- incubator/pig/branches/types/src/org/apache/pig/impl/logicalLayer/PlanSetter.java (original) +++ incubator/pig/branches/types/src/org/apache/pig/impl/logicalLayer/PlanSetter.java Wed Aug 27 17:09:04 2008 @@ -108,6 +108,10 @@ op.setPlan(mCurrentWalker.getPlan()); } + public void visit(LOLimit op) throws VisitorException { + op.setPlan(mCurrentWalker.getPlan()); + } + public void visit(LOLoad op) throws VisitorException { op.setPlan(mCurrentWalker.getPlan()); } Modified: incubator/pig/branches/types/src/org/apache/pig/impl/logicalLayer/optimizer/SchemaCalculator.java URL: http://svn.apache.org/viewvc/incubator/pig/branches/types/src/org/apache/pig/impl/logicalLayer/optimizer/SchemaCalculator.java?rev=689673&r1=689672&r2=689673&view=diff ============================================================================== --- incubator/pig/branches/types/src/org/apache/pig/impl/logicalLayer/optimizer/SchemaCalculator.java (original) +++ incubator/pig/branches/types/src/org/apache/pig/impl/logicalLayer/optimizer/SchemaCalculator.java Wed Aug 27 17:09:04 2008 @@ -94,6 +94,21 @@ /** * + * @param limit + * the logical limit operator that has to be visited + * @throws VisitorException + */ + protected void visit(LOLimit limit) throws VisitorException { + try { + limit.getSchema(); + super.visit(limit); + } catch (FrontendException fe) { + throw new VisitorException(fe); + } + } + + /** + * * @param filter * the logical filter operator that has to be visited * @throws VisitorException Modified: incubator/pig/branches/types/src/org/apache/pig/impl/logicalLayer/optimizer/SchemaRemover.java URL: http://svn.apache.org/viewvc/incubator/pig/branches/types/src/org/apache/pig/impl/logicalLayer/optimizer/SchemaRemover.java?rev=689673&r1=689672&r2=689673&view=diff ============================================================================== --- incubator/pig/branches/types/src/org/apache/pig/impl/logicalLayer/optimizer/SchemaRemover.java (original) +++ incubator/pig/branches/types/src/org/apache/pig/impl/logicalLayer/optimizer/SchemaRemover.java Wed Aug 27 17:09:04 2008 @@ -78,6 +78,18 @@ /** * + * @param limit + * the logical limit operator that has to be visited + * @throws VisitorException + */ + protected void visit(LOLimit limit) throws VisitorException { + limit.unsetSchema(); + super.visit(limit); + } + + + /** + * * @param filter * the logical filter operator that has to be visited * @throws VisitorException Modified: incubator/pig/branches/types/src/org/apache/pig/impl/logicalLayer/package.html URL: http://svn.apache.org/viewvc/incubator/pig/branches/types/src/org/apache/pig/impl/logicalLayer/package.html?rev=689673&r1=689672&r2=689673&view=diff ============================================================================== --- incubator/pig/branches/types/src/org/apache/pig/impl/logicalLayer/package.html (original) +++ incubator/pig/branches/types/src/org/apache/pig/impl/logicalLayer/package.html Wed Aug 27 17:09:04 2008 @@ -37,5 +37,14 @@ other statement in the language rather than being like SQL where the statement execution tends to be more linear. +<h2> Notes </h2> +<p> +Heads up to developers: when adding a new logical operator to the plan, +there are a number of classes that need to know about every type of operator. +These include [EMAIL PROTECTED] org.apache.pig.impl.logicalLayer.PlanSetter}, [EMAIL PROTECTED] org.apache.pig.impl.logicalLayer.optimizer.SchemaRemover}, [EMAIL PROTECTED] org.apache.pig.impl.logicalLayer.optimizer.SchemaCalculator}, and [EMAIL PROTECTED] org.apache.pig.impl.logicalLayer.optimizer.LogicalTransformer}. + </body> </html> Modified: incubator/pig/branches/types/src/org/apache/pig/impl/logicalLayer/parser/QueryParser.jjt URL: http://svn.apache.org/viewvc/incubator/pig/branches/types/src/org/apache/pig/impl/logicalLayer/parser/QueryParser.jjt?rev=689673&r1=689672&r2=689673&view=diff ============================================================================== --- incubator/pig/branches/types/src/org/apache/pig/impl/logicalLayer/parser/QueryParser.jjt (original) +++ incubator/pig/branches/types/src/org/apache/pig/impl/logicalLayer/parser/QueryParser.jjt Wed Aug 27 17:09:04 2008 @@ -860,7 +860,7 @@ ) { long l = Integer.parseInt(t.image); - LogicalOperator limit = new LOLimit(lp, new OperatorKey(scope, getNextId()), l, input); + LogicalOperator limit = new LOLimit(lp, new OperatorKey(scope, getNextId()), l); addAlias(input.getAlias(), input); lp.add(limit); log.debug("Added operator " + limit.getClass().getName() + " to the logical plan");