Author: daijy
Date: Tue May 19 23:43:52 2015
New Revision: 1680425

URL: http://svn.apache.org/r1680425
Log:
PIG-4506: binstorage fails to write biginteger

Modified:
    pig/branches/branch-0.15/CHANGES.txt
    pig/branches/branch-0.15/src/org/apache/pig/data/DataReaderWriter.java
    pig/branches/branch-0.15/test/org/apache/pig/test/TestEvalPipeline2.java

Modified: pig/branches/branch-0.15/CHANGES.txt
URL: 
http://svn.apache.org/viewvc/pig/branches/branch-0.15/CHANGES.txt?rev=1680425&r1=1680424&r2=1680425&view=diff
==============================================================================
--- pig/branches/branch-0.15/CHANGES.txt (original)
+++ pig/branches/branch-0.15/CHANGES.txt Tue May 19 23:43:52 2015
@@ -66,6 +66,8 @@ PIG-4333: Split BigData tests into multi
  
 BUG FIXES
 
+PIG-4506: binstorage fails to write biginteger (daijy)
+
 PIG-4556: Local mode is broken in some case by PIG-4247 (daijy)
 
 PIG-4523: Tez engine should use tez config rather than mr config whenever 
possible (daijy)

Modified: pig/branches/branch-0.15/src/org/apache/pig/data/DataReaderWriter.java
URL: 
http://svn.apache.org/viewvc/pig/branches/branch-0.15/src/org/apache/pig/data/DataReaderWriter.java?rev=1680425&r1=1680424&r2=1680425&view=diff
==============================================================================
--- pig/branches/branch-0.15/src/org/apache/pig/data/DataReaderWriter.java 
(original)
+++ pig/branches/branch-0.15/src/org/apache/pig/data/DataReaderWriter.java Tue 
May 19 23:43:52 2015
@@ -174,10 +174,14 @@ public class DataReaderWriter {
                 return Double.valueOf(in.readDouble());
 
             case DataType.BIGINTEGER:
-                return new BigInteger(((DataByteArray)readDatum(in, 
in.readByte())).get());
+                byte[] bigIntegerByteArray = new byte[in.readInt()];
+                in.readFully(bigIntegerByteArray);
+                return new BigInteger(bigIntegerByteArray);
 
             case DataType.BIGDECIMAL:
-                return new BigDecimal((String)readDatum(in, in.readByte()));
+                byte[] bt = new byte[in.readInt()];
+                in.readFully(bt);
+                return new BigDecimal(new String(bt, DataReaderWriter.UTF8));
 
             case DataType.BOOLEAN:
                 return Boolean.valueOf(in.readBoolean());
@@ -315,12 +319,16 @@ public class DataReaderWriter {
 
             case DataType.BIGINTEGER:
                 out.writeByte(DataType.BIGINTEGER);
-                writeDatum(out, ((BigInteger)val).toByteArray());
+                byte[] bytes = ((BigInteger)val).toByteArray();
+                out.writeInt(bytes.length);
+                out.write(bytes);
                 break;
 
             case DataType.BIGDECIMAL:
                 out.writeByte(DataType.BIGDECIMAL);
-                writeDatum(out, ((BigDecimal)val).toString());
+                byte[] bt =  
((BigDecimal)val).toString().getBytes(DataReaderWriter.UTF8);
+                out.writeInt(bt.length);
+                out.write(bt);
                 break;
 
             case DataType.CHARARRAY: {

Modified: 
pig/branches/branch-0.15/test/org/apache/pig/test/TestEvalPipeline2.java
URL: 
http://svn.apache.org/viewvc/pig/branches/branch-0.15/test/org/apache/pig/test/TestEvalPipeline2.java?rev=1680425&r1=1680424&r2=1680425&view=diff
==============================================================================
--- pig/branches/branch-0.15/test/org/apache/pig/test/TestEvalPipeline2.java 
(original)
+++ pig/branches/branch-0.15/test/org/apache/pig/test/TestEvalPipeline2.java 
Tue May 19 23:43:52 2015
@@ -21,6 +21,8 @@ import java.io.File;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.PrintStream;
+import java.math.BigDecimal;
+import java.math.BigInteger;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
@@ -162,9 +164,9 @@ public class TestEvalPipeline2 {
         // if the conversion happens when minimum conditions for conversion
         // such as expected number of bytes are met.
         String[] input = {
-                    "asdf\t12\t1.1\t231\t234",
-                    "sa\t1231\t123.4\t12345678\t1234.567",
-                    "asdff\t1232123\t1.45345\t123456789\t123456789.9"
+                    "asdf\t12\t1.1\t231\t234\t3024123\t3.2492",
+                    
"sa\t1231\t123.4\t12345678\t1234.567\t5081123453\t9.181817",
+                    
"asdff\t1232123\t1.45345\t123456789\t123456789.9\t1234567\t1.234567"
                     };
 
         Util.createInputFile(cluster, "table_bs_ac", input);
@@ -176,7 +178,7 @@ public class TestEvalPipeline2 {
         pigServer.store("a", output, BinStorage.class.getName());
 
         pigServer.registerQuery("b = load '" + output + "' using 
BinStorage('Utf8StorageConverter') "
-                + "as (name: int, age: int, gpa: float, lage: long, dgpa: 
double);");
+                + "as (name: int, age: int, gpa: float, lage: long, dgpa: 
double, bi:biginteger, bd:bigdecimal);");
 
         Iterator<Tuple> it = pigServer.openIterator("b");
 
@@ -195,6 +197,8 @@ public class TestEvalPipeline2 {
         Assert.assertTrue((Float)tup.get(2) == 1.1F);
         Assert.assertTrue((Long)tup.get(3) == 231L);
         Assert.assertTrue((Double)tup.get(4) == 234.0);
+        Assert.assertEquals((BigInteger)tup.get(5), new BigInteger("3024123"));
+        Assert.assertEquals((BigDecimal)tup.get(6), new BigDecimal("3.2492"));
 
         //tuple 2
         tup = it.next();
@@ -203,6 +207,8 @@ public class TestEvalPipeline2 {
         Assert.assertTrue((Float)tup.get(2) == 123.4F);
         Assert.assertTrue((Long)tup.get(3) == 12345678L);
         Assert.assertTrue((Double)tup.get(4) == 1234.567);
+        Assert.assertEquals((BigInteger)tup.get(5), new 
BigInteger("5081123453"));
+        Assert.assertEquals((BigDecimal)tup.get(6), new 
BigDecimal("9.181817"));
 
         //tuple 3
         tup = it.next();
@@ -211,6 +217,8 @@ public class TestEvalPipeline2 {
         Assert.assertTrue((Float)tup.get(2) == 1.45345F);
         Assert.assertTrue((Long)tup.get(3) == 123456789L);
         Assert.assertTrue((Double)tup.get(4) == 1.234567899E8);
+        Assert.assertEquals((BigInteger)tup.get(5), new BigInteger("1234567"));
+        Assert.assertEquals((BigDecimal)tup.get(6), new 
BigDecimal("1.234567"));
 
         Util.deleteFile(cluster, "table");
     }


Reply via email to