Author: olga
Date: Fri Sep 12 12:29:46 2008
New Revision: 694782

URL: http://svn.apache.org/viewvc?rev=694782&view=rev
Log:
PIG-428: TypeCastInserter does not replace projects in inner plans correctly

Modified:
    incubator/pig/branches/types/CHANGES.txt
    
incubator/pig/branches/types/src/org/apache/pig/impl/logicalLayer/optimizer/LogicalTransformer.java

Modified: incubator/pig/branches/types/CHANGES.txt
URL: 
http://svn.apache.org/viewvc/incubator/pig/branches/types/CHANGES.txt?rev=694782&r1=694781&r2=694782&view=diff
==============================================================================
--- incubator/pig/branches/types/CHANGES.txt (original)
+++ incubator/pig/branches/types/CHANGES.txt Fri Sep 12 12:29:46 2008
@@ -191,3 +191,7 @@
     PIG-422: cross is broken (shravanmn via olgan)
 
     PIG-407: need to clone operators (pradeepk vi olgan)
+
+    PIG-428: TypeCastInserter does not replace projects in inner plans
+    correctly (pradeepk vi olgan)
+

Modified: 
incubator/pig/branches/types/src/org/apache/pig/impl/logicalLayer/optimizer/LogicalTransformer.java
URL: 
http://svn.apache.org/viewvc/incubator/pig/branches/types/src/org/apache/pig/impl/logicalLayer/optimizer/LogicalTransformer.java?rev=694782&r1=694781&r2=694782&view=diff
==============================================================================
--- 
incubator/pig/branches/types/src/org/apache/pig/impl/logicalLayer/optimizer/LogicalTransformer.java
 (original)
+++ 
incubator/pig/branches/types/src/org/apache/pig/impl/logicalLayer/optimizer/LogicalTransformer.java
 Fri Sep 12 12:29:46 2008
@@ -73,15 +73,17 @@
     private class ProjectFixerUpper extends LOVisitor {
 
         private LogicalOperator mNewNode;
+        private LogicalOperator mOldNode;
         private Map<Integer, Integer> mProjectionMapping;
 
         ProjectFixerUpper(
                 LogicalPlan plan,
-                LogicalOperator newNode,
-                Map<Integer, Integer> projectionMapping) {
+                LogicalOperator oldNode,
+                LogicalOperator newNode, Map<Integer, Integer> 
projectionMapping) {
             super(plan,
                 new DepthFirstWalker<LogicalOperator, LogicalPlan>(plan));
             mNewNode = newNode;
+            mOldNode = oldNode;
             mProjectionMapping = projectionMapping;
         }
 
@@ -109,8 +111,9 @@
             // outside the plan).
             List<LogicalOperator> preds = mPlan.getPredecessors(p);
             if (preds == null || preds.size() == 0) {
-                // Change the expression
-                p.setExpression(mNewNode);
+                if(p.getExpression().equals(mOldNode))
+                    // Change the expression
+                    p.setExpression(mNewNode);
 
                 // Remap the projection column if necessary
                 if (mProjectionMapping != null && !p.isStar()) {
@@ -209,7 +212,7 @@
         
         for (LogicalPlan lp : plans) {
             ProjectFixerUpper pfu =
-                new ProjectFixerUpper(lp, newNode, projectionMapping);
+                new ProjectFixerUpper(lp, after, newNode, projectionMapping);
             pfu.visit();
         }
     }
@@ -302,7 +305,7 @@
                
                for (LogicalPlan lp : plans) {
                    ProjectFixerUpper pfu =
-                       new ProjectFixerUpper(lp, after, projectionMapping);
+                       new ProjectFixerUpper(lp, nodeToRemove, after, 
projectionMapping);
                    pfu.visit();
                }
        


Reply via email to