You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pig.apache.org by ga...@apache.org on 2008/08/28 02:09:05 UTC

svn commit: r689673 - in /incubator/pig/branches/types/src/org/apache/pig/impl/logicalLayer: LOLimit.java PlanSetter.java optimizer/SchemaCalculator.java optimizer/SchemaRemover.java package.html parser/QueryParser.jjt

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 {@link org.apache.pig.impl.logicalLayer.PlanSetter},
+{@link org.apache.pig.impl.logicalLayer.optimizer.SchemaRemover},
+{@link org.apache.pig.impl.logicalLayer.optimizer.SchemaCalculator}, and 
+{@link 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");