Author: sms
Date: Mon Feb 23 21:15:05 2009
New Revision: 747139

URL: http://svn.apache.org/viewvc?rev=747139&view=rev
Log:
PIG-658: Data type long : When 'L' or 'l' is included with data (123L or 123l) 
load produces null value. Also the case with Float (thejas via sms)

Modified:
    hadoop/pig/trunk/CHANGES.txt
    hadoop/pig/trunk/src/org/apache/pig/builtin/Utf8StorageConverter.java
    hadoop/pig/trunk/test/org/apache/pig/test/TestConversions.java

Modified: hadoop/pig/trunk/CHANGES.txt
URL: 
http://svn.apache.org/viewvc/hadoop/pig/trunk/CHANGES.txt?rev=747139&r1=747138&r2=747139&view=diff
==============================================================================
--- hadoop/pig/trunk/CHANGES.txt (original)
+++ hadoop/pig/trunk/CHANGES.txt Mon Feb 23 21:15:05 2009
@@ -426,3 +426,7 @@
 
     PIG-545: PERFORMANCE: Sampler for order bys does not produce a good
     distribution (pradeepkth)
+
+    PIG-658: Data type long : When 'L' or 'l' is included with data 
+    (123L or 123l) load produces null value. Also the case with Float (thejas
+    via sms)

Modified: hadoop/pig/trunk/src/org/apache/pig/builtin/Utf8StorageConverter.java
URL: 
http://svn.apache.org/viewvc/hadoop/pig/trunk/src/org/apache/pig/builtin/Utf8StorageConverter.java?rev=747139&r1=747138&r2=747139&view=diff
==============================================================================
--- hadoop/pig/trunk/src/org/apache/pig/builtin/Utf8StorageConverter.java 
(original)
+++ hadoop/pig/trunk/src/org/apache/pig/builtin/Utf8StorageConverter.java Mon 
Feb 23 21:15:05 2009
@@ -107,8 +107,17 @@
     public Float bytesToFloat(byte[] b) throws IOException {
         if(b == null)
             return null;
+        String s;
+        if(b.length > 0 && 
+           (b[b.length - 1] == 'F' || b[b.length - 1] == 'f') ){
+            s = new String(b, 0, b.length - 1);
+        } 
+        else {
+            s = new String(b);
+        }
+        
         try {
-            return Float.valueOf(new String(b));
+            return Float.valueOf(s);
         } catch (NumberFormatException nfe) {
             mLog.warn("Unable to interpret value " + b + " in field being " +
                     "converted to float, caught NumberFormatException <" +
@@ -148,7 +157,16 @@
     public Long bytesToLong(byte[] b) throws IOException {
         if(b == null)
             return null;
-        String s = new String(b);
+
+        String s;
+        if(b.length > 0  &&  
+           (b[b.length - 1] == 'L' || b[b.length - 1] == 'l') ){
+            s = new String(b, 0, b.length - 1);
+        } 
+        else {
+            s = new String(b);
+        }
+
         try {
             return Long.valueOf(s);
         } catch (NumberFormatException nfe) {

Modified: hadoop/pig/trunk/test/org/apache/pig/test/TestConversions.java
URL: 
http://svn.apache.org/viewvc/hadoop/pig/trunk/test/org/apache/pig/test/TestConversions.java?rev=747139&r1=747138&r2=747139&view=diff
==============================================================================
--- hadoop/pig/trunk/test/org/apache/pig/test/TestConversions.java (original)
+++ hadoop/pig/trunk/test/org/apache/pig/test/TestConversions.java Mon Feb 23 
21:15:05 2009
@@ -70,8 +70,12 @@
     public  void testBytesToFloat() throws IOException
     {
         // valid floats
-        String[] a = {"1", "-2.345",  "12.12334567", "1.02e-2",".23344", 
"23.1234567897", ""};
-        Float[] f = {1f, -2.345f,  12.12334567f, 1.02e-2f,.23344f, 
23.1234567f}; // last case is a truncation case
+        String[] a = {"1", "-2.345",  "12.12334567", "1.02e-2",".23344",
+                     "23.1234567897", "12312.33f", "002312.33F", "1.02e-2f", 
""};
+
+        Float[] f = {1f, -2.345f,  12.12334567f, 1.02e-2f,.23344f, 
23.1234567f, // 23.1234567f is a truncation case
+                    12312.33f, 2312.33f, 1.02e-2f }; 
+
         for (int j = 0; j < f.length; j++) {
             byte[] b = a[j].getBytes();            
             assertEquals(f[j], ps.bytesToFloat(b));
@@ -112,8 +116,10 @@
     public  void testBytesToLong() throws IOException
     {
         // valid Longs
-        String[] a = {"1", "-2345",  "123456789012345678", "1.1", "-23.45", 
""};
-        Long[] la = {1L, -2345L, 123456789012345678L, 1L, -23L};
+        String[] a = {"1", "-2345",  "123456789012345678", "1.1", "-23.45",
+                     "21345345l", "3422342L", ""};
+        Long[] la = {1L, -2345L, 123456789012345678L, 1L, -23L, 
+                    21345345L, 3422342L};
         
         for (int i = 0; i < la.length; i++) {
             byte[] b = a[i].getBytes();


Reply via email to