You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pig.apache.org by ch...@apache.org on 2013/06/26 17:27:03 UTC

svn commit: r1496966 - in /pig/trunk: CHANGES.txt src/org/apache/pig/parser/LogicalPlanGenerator.g test/org/apache/pig/test/TestCase.java

Author: cheolsoo
Date: Wed Jun 26 15:27:03 2013
New Revision: 1496966

URL: http://svn.apache.org/r1496966
Log:
PIG-3364: Case expression fails with an even number of when branches (cheolsoo)

Modified:
    pig/trunk/CHANGES.txt
    pig/trunk/src/org/apache/pig/parser/LogicalPlanGenerator.g
    pig/trunk/test/org/apache/pig/test/TestCase.java

Modified: pig/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/pig/trunk/CHANGES.txt?rev=1496966&r1=1496965&r2=1496966&view=diff
==============================================================================
--- pig/trunk/CHANGES.txt (original)
+++ pig/trunk/CHANGES.txt Wed Jun 26 15:27:03 2013
@@ -198,6 +198,8 @@ PIG-3013: BinInterSedes improve chararra
 
 BUG FIXES
 
+PIG-3364: Case expression fails with an even number of when branches (cheolsoo)
+
 PIG-3354: UDF example does not handle nulls (patc888 via daijy)
 
 PIG-3355: ColumnMapKeyPrune bug with distinct operator (jeremykarn via aniket486)

Modified: pig/trunk/src/org/apache/pig/parser/LogicalPlanGenerator.g
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/parser/LogicalPlanGenerator.g?rev=1496966&r1=1496965&r2=1496966&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/parser/LogicalPlanGenerator.g (original)
+++ pig/trunk/src/org/apache/pig/parser/LogicalPlanGenerator.g Wed Jun 26 15:27:03 2013
@@ -1102,7 +1102,7 @@ case_cond[LogicalExpressionPlan plan] re
     {
         // Convert CASE tree to nested bincond expressions. Please also see
         // QueryParser.g for how CASE tree is constructed from case statement.
-        boolean hasElse = exprs.size() \% 2 == 1;
+        boolean hasElse = exprs.size() != conds.size();
         LogicalExpression elseExpr = hasElse ? exprs.get(exprs.size() - 1)
                                              : new ConstantExpression($plan, null);
         int numWhenBranches = conds.size();

Modified: pig/trunk/test/org/apache/pig/test/TestCase.java
URL: http://svn.apache.org/viewvc/pig/trunk/test/org/apache/pig/test/TestCase.java?rev=1496966&r1=1496965&r2=1496966&view=diff
==============================================================================
--- pig/trunk/test/org/apache/pig/test/TestCase.java (original)
+++ pig/trunk/test/org/apache/pig/test/TestCase.java Wed Jun 26 15:27:03 2013
@@ -95,25 +95,24 @@ public class TestCase {
 
         pigServer.registerQuery("A = LOAD 'foo' USING mock.Storage() AS (i:int);");
         pigServer.registerQuery("B = FOREACH A GENERATE i, (" +
-                "  CASE i % 5" +
-                "    WHEN 0 THEN '5n'" +
-                "    WHEN 1 THEN '5n+1'" +
-                "    WHEN 2 THEN '5n+2'" +
-                "    WHEN 3 THEN '5n+3'" +
-                "    ELSE        '5n+4'" +
+                "  CASE i % 4" +
+                "    WHEN 0 THEN '4n'" +
+                "    WHEN 1 THEN '4n+1'" +
+                "    WHEN 2 THEN '4n+2'" +
+                "    ELSE        '4n+3'" +
                 "  END" +
                 ");");
         pigServer.registerQuery("STORE B INTO 'bar' USING mock.Storage();");
 
         List<Tuple> out = data.get("bar");
         assertEquals(7, out.size());
-        assertEquals(tuple(1,"5n+1"), out.get(0));
-        assertEquals(tuple(2,"5n+2"), out.get(1));
-        assertEquals(tuple(3,"5n+3"), out.get(2));
-        assertEquals(tuple(4,"5n+4"), out.get(3));
-        assertEquals(tuple(5,"5n"),   out.get(4));
-        assertEquals(tuple(6,"5n+1"), out.get(5));
-        assertEquals(tuple(7,"5n+2"), out.get(6));
+        assertEquals(tuple(1,"4n+1"), out.get(0));
+        assertEquals(tuple(2,"4n+2"), out.get(1));
+        assertEquals(tuple(3,"4n+3"), out.get(2));
+        assertEquals(tuple(4,"4n"),   out.get(3));
+        assertEquals(tuple(5,"4n+1"), out.get(4));
+        assertEquals(tuple(6,"4n+2"), out.get(5));
+        assertEquals(tuple(7,"4n+3"), out.get(6));
     }
 
     /**
@@ -179,24 +178,23 @@ public class TestCase {
         pigServer.registerQuery("A = LOAD 'foo' USING mock.Storage() AS (i:int);");
         pigServer.registerQuery("B = FOREACH A GENERATE i, (" +
                 "  CASE " +
-                "    WHEN i % 5 == 0 THEN '5n'" + // Conditional expression in when branch
-                "    WHEN i % 5 == 1 THEN '5n+1'" +
-                "    WHEN i % 5 == 2 THEN '5n+2'" +
-                "    WHEN i % 5 == 3 THEN '5n+3'" +
-                "    ELSE                 '5n+4'" +
+                "    WHEN i % 4 == 0 THEN '4n'" + // Conditional expression in when branch
+                "    WHEN i % 4 == 1 THEN '4n+1'" +
+                "    WHEN i % 4 == 2 THEN '4n+2'" +
+                "    ELSE                 '4n+3'" +
                 "  END" +
                 ");");
         pigServer.registerQuery("STORE B INTO 'bar' USING mock.Storage();");
 
         List<Tuple> out = data.get("bar");
         assertEquals(7, out.size());
-        assertEquals(tuple(1,"5n+1"), out.get(0));
-        assertEquals(tuple(2,"5n+2"), out.get(1));
-        assertEquals(tuple(3,"5n+3"), out.get(2));
-        assertEquals(tuple(4,"5n+4"), out.get(3));
-        assertEquals(tuple(5,"5n"),   out.get(4));
-        assertEquals(tuple(6,"5n+1"), out.get(5));
-        assertEquals(tuple(7,"5n+2"), out.get(6));
+        assertEquals(tuple(1,"4n+1"), out.get(0));
+        assertEquals(tuple(2,"4n+2"), out.get(1));
+        assertEquals(tuple(3,"4n+3"), out.get(2));
+        assertEquals(tuple(4,"4n"),   out.get(3));
+        assertEquals(tuple(5,"4n+1"), out.get(4));
+        assertEquals(tuple(6,"4n+2"), out.get(5));
+        assertEquals(tuple(7,"4n+3"), out.get(6));
     }
 
     /**