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 2016/02/15 07:26:08 UTC

svn commit: r1730453 - in /pig/trunk: CHANGES.txt src/org/apache/pig/builtin/PluckTuple.java test/org/apache/pig/builtin/TestPluckTuple.java

Author: daijy
Date: Mon Feb 15 06:26:08 2016
New Revision: 1730453

URL: http://svn.apache.org/viewvc?rev=1730453&view=rev
Log:
PIG-4808: PluckTuple overwrites regex if used more than once in the same script

Modified:
    pig/trunk/CHANGES.txt
    pig/trunk/src/org/apache/pig/builtin/PluckTuple.java
    pig/trunk/test/org/apache/pig/builtin/TestPluckTuple.java

Modified: pig/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/pig/trunk/CHANGES.txt?rev=1730453&r1=1730452&r2=1730453&view=diff
==============================================================================
--- pig/trunk/CHANGES.txt (original)
+++ pig/trunk/CHANGES.txt Mon Feb 15 06:26:08 2016
@@ -91,6 +91,8 @@ PIG-4639: Add better parser for Apache H
 
 BUG FIXES
 
+PIG-4808: PluckTuple overwrites regex if used more than once in the same script (eyal via daijy)
+
 PIG-4801: Provide backward compatibility with mapreduce mapred.task settings (rohini)
 
 PIG-4759: Fix Classresolution_1 e2e failure (rohini)

Modified: pig/trunk/src/org/apache/pig/builtin/PluckTuple.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/builtin/PluckTuple.java?rev=1730453&r1=1730452&r2=1730453&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/builtin/PluckTuple.java (original)
+++ pig/trunk/src/org/apache/pig/builtin/PluckTuple.java Mon Feb 15 06:26:08 2016
@@ -61,7 +61,7 @@ import com.google.common.collect.Lists;
  */
 public class PluckTuple extends EvalFunc<Tuple> {
     private static final TupleFactory mTupleFactory = TupleFactory.getInstance();
-    private static Pattern pattern;
+    private Pattern pattern;
 
     private boolean isInitialized = false;
     private int[] indicesToInclude;
@@ -85,10 +85,10 @@ public class PluckTuple extends EvalFunc
             Schema inputSchema = getInputSchema();
             for (int i = 0; i < inputSchema.size(); i++) {
                 String alias = inputSchema.getField(i).alias;
-                if ((alias.startsWith(prefix) || pattern.matcher(alias).matches()) && this.match) {
+                if (this.match && (alias.startsWith(prefix) || pattern.matcher(alias).matches()) ) {
                     indicesToInclude.add(i);
                 }
-                else if (!alias.startsWith(prefix) && !pattern.matcher(alias).matches() && !this.match){
+                else if (!this.match && !alias.startsWith(prefix) && !pattern.matcher(alias).matches() ){
                     indicesToInclude.add(i);
                 }
             }
@@ -117,10 +117,10 @@ public class PluckTuple extends EvalFunc
                 } catch (FrontendException e) {
                     throw new RuntimeException(e); // Should never happen
                 }
-                if ((alias.startsWith(prefix) || pattern.matcher(alias).matches()) && this.match) {
+                if (this.match && (alias.startsWith(prefix) || pattern.matcher(alias).matches())) {
                     indicesToInclude.add(i);
                 }
-                else if (!alias.startsWith(prefix) && !pattern.matcher(alias).matches() && !this.match){
+                else if (!this.match && !alias.startsWith(prefix) && !pattern.matcher(alias).matches()){
                     indicesToInclude.add(i);
                 }
             }

Modified: pig/trunk/test/org/apache/pig/builtin/TestPluckTuple.java
URL: http://svn.apache.org/viewvc/pig/trunk/test/org/apache/pig/builtin/TestPluckTuple.java?rev=1730453&r1=1730452&r2=1730453&view=diff
==============================================================================
--- pig/trunk/test/org/apache/pig/builtin/TestPluckTuple.java (original)
+++ pig/trunk/test/org/apache/pig/builtin/TestPluckTuple.java Mon Feb 15 06:26:08 2016
@@ -122,6 +122,29 @@ public class TestPluckTuple {
     }
 
     @Test
+    public void testTwoPluckTuples() throws Exception {
+        Data data = resetData(pigServer);
+
+        data.set("a",
+            Utils.getSchemaFromString("xa:int,yb:chararray,zc:long"),
+            tuple(1, "hey", 3L),
+            tuple(2, "woah", 4L)
+            );
+
+        String query = "a = load 'a' using mock.Storage();" +
+            "define pluck1 PluckTuple('.a');" +
+            "define pluck2 PluckTuple('.b');" +
+            "b = foreach a generate flatten(pluck1(*)), flatten(pluck2(*));";
+        pigServer.registerQuery(query);
+        Iterator<Tuple> it = pigServer.openIterator("b");
+        assertTrue(it.hasNext());
+        assertEquals(tuple(1,"hey"), it.next());
+        assertTrue(it.hasNext());
+        assertEquals(tuple(2,"woah"), it.next());
+        assertFalse(it.hasNext());
+    }
+
+    @Test
     public void testNegativeOutput() throws Exception {
         Data data = resetData(pigServer);