Author: dvryaboy Date: Sun Mar 21 19:22:23 2010 New Revision: 925868 URL: http://svn.apache.org/viewvc?rev=925868&view=rev Log: PIG-1285: Allow SingleTupleBag to be serialized (dvryaboy)
Modified: hadoop/pig/trunk/CHANGES.txt hadoop/pig/trunk/src/org/apache/pig/data/SingleTupleBag.java hadoop/pig/trunk/test/org/apache/pig/test/TestDataBag.java Modified: hadoop/pig/trunk/CHANGES.txt URL: http://svn.apache.org/viewvc/hadoop/pig/trunk/CHANGES.txt?rev=925868&r1=925867&r2=925868&view=diff ============================================================================== --- hadoop/pig/trunk/CHANGES.txt (original) +++ hadoop/pig/trunk/CHANGES.txt Sun Mar 21 19:22:23 2010 @@ -68,6 +68,8 @@ manner (rding via pradeepkth) IMPROVEMENTS +PIG-1285: Allow SingleTupleBag to be serialized (dvryaboy) + PIG-1117: Pig reading hive columnar rc tables (gerritjvv via dvryaboy) PIG-1287: Use hadoop-0.20.2 with pig 0.7.0 release (pradeepkth) Modified: hadoop/pig/trunk/src/org/apache/pig/data/SingleTupleBag.java URL: http://svn.apache.org/viewvc/hadoop/pig/trunk/src/org/apache/pig/data/SingleTupleBag.java?rev=925868&r1=925867&r2=925868&view=diff ============================================================================== --- hadoop/pig/trunk/src/org/apache/pig/data/SingleTupleBag.java (original) +++ hadoop/pig/trunk/src/org/apache/pig/data/SingleTupleBag.java Sun Mar 21 19:22:23 2010 @@ -43,7 +43,7 @@ public class SingleTupleBag implements D public SingleTupleBag(Tuple t) { item = t; } - + /* (non-Javadoc) * @see org.apache.pig.data.DataBag#add(org.apache.pig.data.Tuple) * NOTE: It is the user's responsibility to ensure only a single @@ -131,10 +131,16 @@ public class SingleTupleBag implements D */ @Override public void readFields(DataInput in) throws IOException { - // TODO Auto-generated method stub - int errCode = 2113; - String msg = "SingleTupleBag should never be serialized or serialized."; - throw new ExecException(msg, errCode, PigException.BUG); + long size = in.readLong(); + + for (long i = 0; i < size; i++) { + try { + Object o = DataReaderWriter.readDatum(in); + add((Tuple)o); + } catch (ExecException ee) { + throw ee; + } + } } /* (non-Javadoc) @@ -142,10 +148,12 @@ public class SingleTupleBag implements D */ @Override public void write(DataOutput out) throws IOException { - // TODO Auto-generated method stub - int errCode = 2113; - String msg = "SingleTupleBag should never be serialized or serialized."; - throw new ExecException(msg, errCode, PigException.BUG); + out.writeLong(size()); + Iterator<Tuple> it = iterator(); + while (it.hasNext()) { + Tuple item = it.next(); + item.write(out); + } } /* (non-Javadoc) @@ -175,7 +183,7 @@ public class SingleTupleBag implements D public boolean hasNext() { return !nextDone; } - + /* (non-Javadoc) * @see java.util.Iterator#next() */ @@ -183,9 +191,9 @@ public class SingleTupleBag implements D public Tuple next() { nextDone = true; return item; - + } - + /* (non-Javadoc) * @see java.util.Iterator#remove() */ @@ -194,7 +202,7 @@ public class SingleTupleBag implements D throw new RuntimeException("SingleTupleBag.iterator().remove() is not allowed"); } } - + /** * Write the bag into a string. */ @Override Modified: hadoop/pig/trunk/test/org/apache/pig/test/TestDataBag.java URL: http://svn.apache.org/viewvc/hadoop/pig/trunk/test/org/apache/pig/test/TestDataBag.java?rev=925868&r1=925867&r2=925868&view=diff ============================================================================== --- hadoop/pig/trunk/test/org/apache/pig/test/TestDataBag.java (original) +++ hadoop/pig/trunk/test/org/apache/pig/test/TestDataBag.java Sun Mar 21 19:22:23 2010 @@ -18,7 +18,12 @@ package org.apache.pig.test; import java.util.*; +import java.io.DataInputStream; +import java.io.DataOutput; +import java.io.DataOutputStream; import java.io.IOException; +import java.io.PipedInputStream; +import java.io.PipedOutputStream; import org.junit.Test; import org.apache.pig.data.*; @@ -1105,6 +1110,21 @@ public class TestDataBag extends junit.f processDataBag(bg5, false); } + // See PIG-1285 + @Test + public void testSerializeSingleTupleBag() throws Exception { + Tuple t = Util.createTuple(new String[] {"foo", "bar", "baz"}); + DataBag stBag = new SingleTupleBag(t); + PipedOutputStream pos = new PipedOutputStream(); + DataOutputStream dos = new DataOutputStream(pos); + PipedInputStream pis = new PipedInputStream(pos); + DataInputStream dis = new DataInputStream(pis); + stBag.write(dos); + DataBag dfBag = new DefaultDataBag(); + dfBag.readFields(dis); + assertTrue(dfBag.equals(stBag)); + } + void processDataBag(DataBag bg, boolean doSpill) { Tuple t = TupleFactory.getInstance().newTuple(new Integer(0)); bg.add(t);