You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pig.apache.org by da...@apache.org on 2011/05/14 02:38:03 UTC

svn commit: r1102932 - in /pig/trunk: CHANGES.txt src/org/apache/pig/newplan/optimizer/Rule.java test/org/apache/pig/test/TestNewPlanRule.java

Author: daijy
Date: Sat May 14 00:38:03 2011
New Revision: 1102932

URL: http://svn.apache.org/viewvc?rev=1102932&view=rev
Log:
PIG-2044: Patten match bug in org.apache.pig.newplan.optimizer.Rule

Modified:
    pig/trunk/CHANGES.txt
    pig/trunk/src/org/apache/pig/newplan/optimizer/Rule.java
    pig/trunk/test/org/apache/pig/test/TestNewPlanRule.java

Modified: pig/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/pig/trunk/CHANGES.txt?rev=1102932&r1=1102931&r2=1102932&view=diff
==============================================================================
--- pig/trunk/CHANGES.txt (original)
+++ pig/trunk/CHANGES.txt Sat May 14 00:38:03 2011
@@ -42,6 +42,8 @@ PIG-2011: Speed up TestTypedMap.java (dv
 
 BUG FIXES
 
+PIG-2044: Patten match bug in org.apache.pig.newplan.optimizer.Rule (knoguchi via daijy)
+
 PIG-1938: support project-range as udf argument (thejas)
 
 PIG-2048: Add zookeeper to pig jar (gbowyer via gates)

Modified: pig/trunk/src/org/apache/pig/newplan/optimizer/Rule.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/newplan/optimizer/Rule.java?rev=1102932&r1=1102931&r2=1102932&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/newplan/optimizer/Rule.java (original)
+++ pig/trunk/src/org/apache/pig/newplan/optimizer/Rule.java Sat May 14 00:38:03 2011
@@ -176,7 +176,6 @@ public abstract class Rule {
                         if (matched) {
                             for(int j=1; j<leaves.size(); j++) {
                                 planOps.add(siblings.get(index+j));
-                                break;
                             }
                         }
                     

Modified: pig/trunk/test/org/apache/pig/test/TestNewPlanRule.java
URL: http://svn.apache.org/viewvc/pig/trunk/test/org/apache/pig/test/TestNewPlanRule.java?rev=1102932&r1=1102931&r2=1102932&view=diff
==============================================================================
--- pig/trunk/test/org/apache/pig/test/TestNewPlanRule.java (original)
+++ pig/trunk/test/org/apache/pig/test/TestNewPlanRule.java Sat May 14 00:38:03 2011
@@ -364,5 +364,55 @@ public class TestNewPlanRule extends Tes
         m2 = l.get(0).getSinks().get(1);
         assertTrue(m2.getName().equals("f3") || m2.getName().equals("f4"));    
     }
+    public void testThreeNodeMatch() throws FrontendException {
+        // load --|                                |- filter - store
+        // load --|-join - filter - filter - split |- filter - store
+        //               | filter - store
+        //               | filter - store
+        Operator f5 = new OP_Filter("f5", plan);
+        Operator f6 = new OP_Filter("f6", plan);
+        Operator s5 = new OP_Store("s5", plan);
+        Operator s6 = new OP_Store("s6", plan);
+        plan.add(f5);
+        plan.add(f6);
+        plan.add(s5);
+        plan.add(s6);
+        plan.connect(f5, s5);
+        plan.connect(f6, s6);
+        plan.connect(join, f5);
+        plan.connect(join, f6);
+
+        OperatorPlan pattern = new SillyPlan();
+        Operator s1 = new OP_Join("mmm1", pattern);
+        Operator s2 = new OP_Filter("mmm2", pattern);
+        Operator s3 = new OP_Filter("mmm3", pattern);
+        Operator s4 = new OP_Filter("mmm4", pattern);
+        pattern.add(s1);
+        pattern.add(s2);        
+        pattern.add(s3);
+        pattern.add(s4);
+        pattern.connect(s1, s2);
+        pattern.connect(s1, s3);
+        pattern.connect(s1, s4);
+        
+        Rule r = new SillyRule("basic", pattern);
+        List<OperatorPlan> l = r.match(plan);
+        assertEquals(1, l.size());
+        
+        assertEquals(1, l.get(0).getSources().size());
+        assertEquals(3, l.get(0).getSinks().size());
+        assertEquals(4, l.get(0).size());
+        
+        Operator m1,m2;
+        m1 = l.get(0).getSources().get(0);
+        assertTrue(m1.getName().equals("j1"));
+        for( int i=0; i < 3; i++ ) {
+          m2 = l.get(0).getSinks().get(i);
+          assertTrue(m2.getName().equals("f1") 
+                   || m2.getName().equals("f5") 
+                   || m2.getName().equals("f6") 
+          );    
+        }
+    }
    
 }