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(); }