Author: daijy
Date: Fri Aug 14 16:27:49 2009
New Revision: 804282

URL: http://svn.apache.org/viewvc?rev=804282&view=rev
Log:
PIG-913: Error in Pig script when grouping on chararray column

Added:
    hadoop/pig/trunk/test/org/apache/pig/test/data/DotFiles/optlimitplan10.dot
Modified:
    hadoop/pig/trunk/CHANGES.txt
    
hadoop/pig/trunk/src/org/apache/pig/impl/logicalLayer/optimizer/LogicalTransformer.java
    
hadoop/pig/trunk/src/org/apache/pig/impl/logicalLayer/optimizer/OpLimitOptimizer.java
    hadoop/pig/trunk/test/org/apache/pig/test/TestLogicalOptimizer.java

Modified: hadoop/pig/trunk/CHANGES.txt
URL: 
http://svn.apache.org/viewvc/hadoop/pig/trunk/CHANGES.txt?rev=804282&r1=804281&r2=804282&view=diff
==============================================================================
--- hadoop/pig/trunk/CHANGES.txt (original)
+++ hadoop/pig/trunk/CHANGES.txt Fri Aug 14 16:27:49 2009
@@ -49,6 +49,8 @@
 
 BUG FIXES
     
+    PIG-913: Error in Pig script when grouping on chararray column (daijy)
+
     PIG-907: Provide multiple version of HashFNV (Piggybank) (daijy)
 
     PIG-905: TOKENIZE throws exception on null data (daijy)

Modified: 
hadoop/pig/trunk/src/org/apache/pig/impl/logicalLayer/optimizer/LogicalTransformer.java
URL: 
http://svn.apache.org/viewvc/hadoop/pig/trunk/src/org/apache/pig/impl/logicalLayer/optimizer/LogicalTransformer.java?rev=804282&r1=804281&r2=804282&view=diff
==============================================================================
--- 
hadoop/pig/trunk/src/org/apache/pig/impl/logicalLayer/optimizer/LogicalTransformer.java
 (original)
+++ 
hadoop/pig/trunk/src/org/apache/pig/impl/logicalLayer/optimizer/LogicalTransformer.java
 Fri Aug 14 16:27:49 2009
@@ -206,73 +206,6 @@
         insertBetween(after, newNode, successors.get(0), projectionMapping);
     }
 
-    /**
-     * Remove a node in the middle of a linear chain. This includes removing 
the node 
-     * from the plan and reconnect the nodes before and after the node as well 
as rebuilding
-     * all of the schemas. This node should have one and only one predecessor 
and zero or one 
-     * successor
-     * @param nodeToRemove Node to remove
-     * @param projectionMapping A map that defines how projections in after
-     * relate to projections in nodeToRemove.  Keys are the projection offsets 
in
-     * after, values are the new offsets in nodeToRemove.  If this field is 
null,
-     * then it will be assumed that the mapping is 1-1.
-     * @throws VisitorException, FrontendException
-     */
-    protected void removeFromChain(
-            LogicalOperator nodeToRemove,
-            Map<Integer, Integer> projectionMapping)
-            throws VisitorException, FrontendException {
-       
-       List<LogicalOperator> afterNodes = mPlan.getPredecessors(nodeToRemove);
-       if (afterNodes.size()!=1)
-               throw new RuntimeException("removeFromChain only valid to 
remove " + 
-               "node has one predecessor.");
-       List<LogicalOperator> beforeNodes = mPlan.getSuccessors(nodeToRemove);
-       if (beforeNodes!=null && beforeNodes.size()!=1)
-               throw new RuntimeException("removeFromChain only valid to 
remove " + 
-                       "node has one successor.");
-       
-       // Get after and before node
-       LogicalOperator after = mPlan.getPredecessors(nodeToRemove).get(0);
-       LogicalOperator before = null;
-       if (beforeNodes!=null)
-               before = mPlan.getSuccessors(nodeToRemove).get(0);
-       
-        // Remove nodeToRemove from plan
-       mPlan.remove(nodeToRemove);
-       if (before!=null)
-       {
-               // Shortcut nodeToRemove.
-               mPlan.connect(after, before);
-       
-               // Visit all the inner plans of before and change their 
projects to
-               // connect to after instead of nodeToRemove.
-               // Find right inner plan(s) to visit
-               List<LogicalPlan> plans = new ArrayList<LogicalPlan>();
-               if (before instanceof LOCogroup) {
-                   
plans.addAll((((LOCogroup)before).getGroupByPlans()).values());
-               } else if (before instanceof LOSort) {
-                   plans.addAll(((LOSort)before).getSortColPlans());
-               } else if (before instanceof LOFilter) {
-                   plans.add(((LOFilter)before).getComparisonPlan());
-               } else if (before instanceof LOSplitOutput) {
-                   plans.add(((LOSplitOutput)before).getConditionPlan());
-               } else if (before instanceof LOForEach) {
-                   plans.addAll(((LOForEach)before).getForEachPlans());
-               }
-               
-               for (LogicalPlan lp : plans) {
-                   ProjectFixerUpper pfu =
-                       new ProjectFixerUpper(lp, nodeToRemove, after, 
projectionMapping);
-                   pfu.visit();
-               }
-       
-       }
-
-       // Now rebuild the schemas
-        // rebuildSchemas();
-    }
-
     @Override
     public void reset() {
         // do nothing

Modified: 
hadoop/pig/trunk/src/org/apache/pig/impl/logicalLayer/optimizer/OpLimitOptimizer.java
URL: 
http://svn.apache.org/viewvc/hadoop/pig/trunk/src/org/apache/pig/impl/logicalLayer/optimizer/OpLimitOptimizer.java?rev=804282&r1=804281&r2=804282&view=diff
==============================================================================
--- 
hadoop/pig/trunk/src/org/apache/pig/impl/logicalLayer/optimizer/OpLimitOptimizer.java
 (original)
+++ 
hadoop/pig/trunk/src/org/apache/pig/impl/logicalLayer/optimizer/OpLimitOptimizer.java
 Fri Aug 14 16:27:49 2009
@@ -159,7 +159,7 @@
                        if (prepredecessor!=null)
                        {
                                        try {
-                                               removeFromChain(limit, null);
+                                               mPlan.removeAndReconnect(limit);
                                                insertBetween(prepredecessor, 
limit, predecessor, null);
                                                
                                        } catch (Exception e) {
@@ -213,7 +213,7 @@
                     else
                         
sort.setLimit(sort.getLimit()<limit.getLimit()?sort.getLimit():limit.getLimit());
                     try {
-                        removeFromChain(limit, null);
+                        mPlan.removeAndReconnect(limit);
                     } catch (Exception e) {
                         int errCode = 2012;
                         String msg = "Can not remove LOLimit after LOSort";
@@ -227,7 +227,7 @@
                LOLimit beforeLimit = (LOLimit)predecessor;
                
beforeLimit.setLimit(beforeLimit.getLimit()<limit.getLimit()?beforeLimit.getLimit():limit.getLimit());
                try {
-                       removeFromChain(limit, null);
+                       mPlan.removeAndReconnect(limit);
                } catch (Exception e) {
                    int errCode = 2012;
                    String msg = "Can not remove LOLimit after LOLimit";

Modified: hadoop/pig/trunk/test/org/apache/pig/test/TestLogicalOptimizer.java
URL: 
http://svn.apache.org/viewvc/hadoop/pig/trunk/test/org/apache/pig/test/TestLogicalOptimizer.java?rev=804282&r1=804281&r2=804282&view=diff
==============================================================================
--- hadoop/pig/trunk/test/org/apache/pig/test/TestLogicalOptimizer.java 
(original)
+++ hadoop/pig/trunk/test/org/apache/pig/test/TestLogicalOptimizer.java Fri Aug 
14 16:27:49 2009
@@ -185,6 +185,17 @@
     }
 
     @Test
+    //See bug PIG-913
+    public void testOPLimit10Optimizer() throws Exception {
+        planTester.buildPlan("A = load 'myfile' AS (s:chararray);");
+        planTester.buildPlan("B = limit A 100;");
+        LogicalPlan plan = planTester.buildPlan("C = GROUP B by $0;");
+        optimizePlan(plan);
+        compareWithGoldenFile(plan, FILE_BASE_LOCATION + "optlimitplan10.dot");
+    }
+
+    
+    @Test
     //Test to ensure that the right exception is thrown
     public void testErrImplicitSplitInserter() throws Exception {
         LogicalPlan lp = new LogicalPlan();

Added: 
hadoop/pig/trunk/test/org/apache/pig/test/data/DotFiles/optlimitplan10.dot
URL: 
http://svn.apache.org/viewvc/hadoop/pig/trunk/test/org/apache/pig/test/data/DotFiles/optlimitplan10.dot?rev=804282&view=auto
==============================================================================
--- hadoop/pig/trunk/test/org/apache/pig/test/data/DotFiles/optlimitplan10.dot 
(added)
+++ hadoop/pig/trunk/test/org/apache/pig/test/data/DotFiles/optlimitplan10.dot 
Fri Aug 14 16:27:49 2009
@@ -0,0 +1,7 @@
+digraph graph1 {
+    LOLoad1061 -> LOLimit1062;
+    LOLimit1062 [limit="100"];
+    LOLimit1062 -> LOForEach1067;
+    LOForEach1067 [hasflat="false"];
+    LOForEach1067 -> LOCogroup1064;
+}


Reply via email to