Author: namit
Date: Thu Nov  3 17:17:08 2011
New Revision: 1197227

URL: http://svn.apache.org/viewvc?rev=1197227&view=rev
Log:
HIVE-2465 Primitive Data Types returning null if the data is out of range of
the data type. (Ashutosh Chauhan via namit)


Modified:
    hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyBinary.java
    
hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyBoolean.java
    hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyByte.java
    hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyDouble.java
    hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyFloat.java
    
hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyInteger.java
    hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyLong.java
    
hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyPrimitive.java
    hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyShort.java
    
hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyTimestamp.java
    
hive/trunk/serde/src/test/org/apache/hadoop/hive/serde2/lazy/TestLazyPrimitive.java

Modified: 
hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyBinary.java
URL: 
http://svn.apache.org/viewvc/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyBinary.java?rev=1197227&r1=1197226&r2=1197227&view=diff
==============================================================================
--- 
hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyBinary.java 
(original)
+++ 
hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyBinary.java 
Thu Nov  3 17:17:08 2011
@@ -18,12 +18,19 @@
 
 package org.apache.hadoop.hive.serde2.lazy;
 
+import java.nio.charset.CharacterCodingException;
+
 import org.apache.commons.codec.binary.Base64;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 import 
org.apache.hadoop.hive.serde2.lazy.objectinspector.primitive.LazyBinaryObjectInspector;
 import org.apache.hadoop.io.BytesWritable;
+import org.apache.hadoop.io.Text;
 
 public class LazyBinary extends LazyPrimitive<LazyBinaryObjectInspector, 
BytesWritable> {
 
+  private static final Log LOG = LogFactory.getLog(LazyBinary.class);
+
   LazyBinary(LazyBinaryObjectInspector oi) {
     super(oi);
     data = new BytesWritable();
@@ -42,7 +49,12 @@ public class LazyBinary extends LazyPrim
 
     byte[] recv = new byte[length];
     System.arraycopy(bytes.getData(), start, recv, 0, length);
-    byte[] decoded = Base64.isArrayByteBase64(recv) ? 
Base64.decodeBase64(recv) : recv;
+    boolean arrayByteBase64 = Base64.isArrayByteBase64(recv);
+    if (arrayByteBase64) {
+      LOG.debug("Data not contains valid characters within the Base64 alphabet 
so " +
+                "decoded the data.");
+    }
+    byte[] decoded = arrayByteBase64 ? Base64.decodeBase64(recv) : recv;
     data.set(decoded, 0, decoded.length);
   }
 

Modified: 
hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyBoolean.java
URL: 
http://svn.apache.org/viewvc/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyBoolean.java?rev=1197227&r1=1197226&r2=1197227&view=diff
==============================================================================
--- 
hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyBoolean.java 
(original)
+++ 
hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyBoolean.java 
Thu Nov  3 17:17:08 2011
@@ -64,6 +64,7 @@ public class LazyBoolean extends
       isNull = false;
     } else {
       isNull = true;
+      logExceptionMessage(bytes, start, length, "BOOLEAN");
     }
   }
 

Modified: 
hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyByte.java
URL: 
http://svn.apache.org/viewvc/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyByte.java?rev=1197227&r1=1197226&r2=1197227&view=diff
==============================================================================
--- hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyByte.java 
(original)
+++ hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyByte.java 
Thu Nov  3 17:17:08 2011
@@ -53,6 +53,7 @@ public class LazyByte extends
       isNull = false;
     } catch (NumberFormatException e) {
       isNull = true;
+      logExceptionMessage(bytes, start, length, "TINYINT");
     }
   }
 

Modified: 
hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyDouble.java
URL: 
http://svn.apache.org/viewvc/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyDouble.java?rev=1197227&r1=1197226&r2=1197227&view=diff
==============================================================================
--- 
hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyDouble.java 
(original)
+++ 
hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyDouble.java 
Thu Nov  3 17:17:08 2011
@@ -19,6 +19,8 @@ package org.apache.hadoop.hive.serde2.la
 
 import java.nio.charset.CharacterCodingException;
 
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.hive.serde2.io.DoubleWritable;
 import 
org.apache.hadoop.hive.serde2.lazy.objectinspector.primitive.LazyDoubleObjectInspector;
 import org.apache.hadoop.io.Text;
@@ -30,6 +32,7 @@ import org.apache.hadoop.io.Text;
 public class LazyDouble extends
     LazyPrimitive<LazyDoubleObjectInspector, DoubleWritable> {
 
+  private static final Log LOG = LogFactory.getLog(LazyDouble.class);
   public LazyDouble(LazyDoubleObjectInspector oi) {
     super(oi);
     data = new DoubleWritable();
@@ -42,13 +45,18 @@ public class LazyDouble extends
 
   @Override
   public void init(ByteArrayRef bytes, int start, int length) {
+    String byteData = null;
     try {
-      data.set(Double.parseDouble(Text.decode(bytes.getData(), start, 
length)));
+      byteData = Text.decode(bytes.getData(), start, length);
+      data.set(Double.parseDouble(byteData));
       isNull = false;
     } catch (NumberFormatException e) {
       isNull = true;
+      LOG.debug("Data not in the Double data type range so converted to null. 
Given data is :"
+          + byteData, e);
     } catch (CharacterCodingException e) {
       isNull = true;
+      LOG.debug("Data not in the Double data type range so converted to 
null.", e);
     }
   }
 

Modified: 
hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyFloat.java
URL: 
http://svn.apache.org/viewvc/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyFloat.java?rev=1197227&r1=1197226&r2=1197227&view=diff
==============================================================================
--- hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyFloat.java 
(original)
+++ hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyFloat.java 
Thu Nov  3 17:17:08 2011
@@ -19,6 +19,8 @@ package org.apache.hadoop.hive.serde2.la
 
 import java.nio.charset.CharacterCodingException;
 
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 import 
org.apache.hadoop.hive.serde2.lazy.objectinspector.primitive.LazyFloatObjectInspector;
 import org.apache.hadoop.io.FloatWritable;
 import org.apache.hadoop.io.Text;
@@ -30,6 +32,7 @@ import org.apache.hadoop.io.Text;
 public class LazyFloat extends
     LazyPrimitive<LazyFloatObjectInspector, FloatWritable> {
 
+  private static final Log LOG = LogFactory.getLog(LazyFloat.class);
   public LazyFloat(LazyFloatObjectInspector oi) {
     super(oi);
     data = new FloatWritable();
@@ -42,13 +45,18 @@ public class LazyFloat extends
 
   @Override
   public void init(ByteArrayRef bytes, int start, int length) {
+    String byteData = null;
     try {
-      data.set(Float.parseFloat(Text.decode(bytes.getData(), start, length)));
+      byteData = Text.decode(bytes.getData(), start, length);
+      data.set(Float.parseFloat(byteData));
       isNull = false;
     } catch (NumberFormatException e) {
       isNull = true;
+      LOG.debug("Data not in the Float data type range so converted to null. 
Given data is :"
+          + byteData, e);
     } catch (CharacterCodingException e) {
       isNull = true;
+      LOG.debug("Data not in the Float data type range so converted to null.", 
e);
     }
   }
 

Modified: 
hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyInteger.java
URL: 
http://svn.apache.org/viewvc/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyInteger.java?rev=1197227&r1=1197226&r2=1197227&view=diff
==============================================================================
--- 
hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyInteger.java 
(original)
+++ 
hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyInteger.java 
Thu Nov  3 17:17:08 2011
@@ -56,6 +56,7 @@ public class LazyInteger extends
       isNull = false;
     } catch (NumberFormatException e) {
       isNull = true;
+      logExceptionMessage(bytes, start, length, "INT");
     }
   }
 

Modified: 
hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyLong.java
URL: 
http://svn.apache.org/viewvc/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyLong.java?rev=1197227&r1=1197226&r2=1197227&view=diff
==============================================================================
--- hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyLong.java 
(original)
+++ hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyLong.java 
Thu Nov  3 17:17:08 2011
@@ -56,6 +56,7 @@ public class LazyLong extends
       isNull = false;
     } catch (NumberFormatException e) {
       isNull = true;
+      logExceptionMessage(bytes, start, length, "BIGINT");
     }
   }
 

Modified: 
hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyPrimitive.java
URL: 
http://svn.apache.org/viewvc/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyPrimitive.java?rev=1197227&r1=1197226&r2=1197227&view=diff
==============================================================================
--- 
hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyPrimitive.java 
(original)
+++ 
hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyPrimitive.java 
Thu Nov  3 17:17:08 2011
@@ -17,7 +17,12 @@
  */
 package org.apache.hadoop.hive.serde2.lazy;
 
+import java.nio.charset.CharacterCodingException;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector;
+import org.apache.hadoop.io.Text;
 import org.apache.hadoop.io.Writable;
 
 /**
@@ -26,6 +31,7 @@ import org.apache.hadoop.io.Writable;
 public abstract class LazyPrimitive<OI extends ObjectInspector, T extends 
Writable>
     extends LazyObject<OI> {
 
+  private static final Log LOG = LogFactory.getLog(LazyPrimitive.class);
   LazyPrimitive(OI oi) {
     super(oi);
   }
@@ -61,4 +67,15 @@ public abstract class LazyPrimitive<OI e
     return isNull ? 0 : data.hashCode();
   }
 
+  public void logExceptionMessage(ByteArrayRef bytes, int start, int length, 
String dataType) {
+    try {
+      String byteData = Text.decode(bytes.getData(), start, length);
+      LOG.debug("Data not in the " + dataType
+          + " data type range so converted to null. Given data is :" +
+                  byteData);
+    } catch (CharacterCodingException e1) {
+      LOG.debug("Data not in the " + dataType + " data type range so converted 
to null.", e1);
+    }
+  }
+
 }

Modified: 
hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyShort.java
URL: 
http://svn.apache.org/viewvc/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyShort.java?rev=1197227&r1=1197226&r2=1197227&view=diff
==============================================================================
--- hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyShort.java 
(original)
+++ hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyShort.java 
Thu Nov  3 17:17:08 2011
@@ -53,6 +53,7 @@ public class LazyShort extends
       isNull = false;
     } catch (NumberFormatException e) {
       isNull = true;
+      logExceptionMessage(bytes, start, length, "SMALLINT");
     }
   }
 

Modified: 
hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyTimestamp.java
URL: 
http://svn.apache.org/viewvc/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyTimestamp.java?rev=1197227&r1=1197226&r2=1197227&view=diff
==============================================================================
--- 
hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyTimestamp.java 
(original)
+++ 
hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyTimestamp.java 
Thu Nov  3 17:17:08 2011
@@ -69,6 +69,7 @@ public class LazyTimestamp extends LazyP
     Timestamp t;
     if (s.compareTo("NULL") == 0) {
       t = null;
+      logExceptionMessage(bytes, start, length, "TIMESTAMP");
     } else {
       t = Timestamp.valueOf(s);
     }

Modified: 
hive/trunk/serde/src/test/org/apache/hadoop/hive/serde2/lazy/TestLazyPrimitive.java
URL: 
http://svn.apache.org/viewvc/hive/trunk/serde/src/test/org/apache/hadoop/hive/serde2/lazy/TestLazyPrimitive.java?rev=1197227&r1=1197226&r2=1197227&view=diff
==============================================================================
--- 
hive/trunk/serde/src/test/org/apache/hadoop/hive/serde2/lazy/TestLazyPrimitive.java
 (original)
+++ 
hive/trunk/serde/src/test/org/apache/hadoop/hive/serde2/lazy/TestLazyPrimitive.java
 Thu Nov  3 17:17:08 2011
@@ -375,16 +375,17 @@ public class TestLazyPrimitive extends T
   }
 
   public void testLazyBinary() {
-
     LazyBinary ba = new 
LazyBinary(LazyPrimitiveObjectInspectorFactory.LAZY_BINARY_OBJECT_INSPECTOR);
-    initLazyObject(ba, new byte[]{}, 0, 0);
+    initLazyObject(ba, new byte[] {}, 0, 0);
     assertEquals(new BytesWritable(), ba.getWritableObject());
-    initLazyObject(ba, new byte[]{'%'}, 0, 1);
-    assertEquals(new BytesWritable(new byte[]{'%'}), ba.getWritableObject());
-    initLazyObject(ba, new byte[]{'2','>','3'}, 1, 1);
-    assertEquals(new BytesWritable(new byte[]{'>'}), ba.getWritableObject());
-    initLazyObject(ba, new byte[]{'2','?','3'}, 0, 3);
-    assertEquals(new BytesWritable(new byte[]{'2','?','3'}), 
ba.getWritableObject());
+    initLazyObject(ba, new byte[] {'%'}, 0, 1);
+    assertEquals(new BytesWritable(new byte[] {'%'}), ba.getWritableObject());
+    initLazyObject(ba, new byte[] {'2', '>', '3'}, 1, 1);
+    assertEquals(new BytesWritable(new byte[] {'>'}), ba.getWritableObject());
+    initLazyObject(ba, new byte[] {'2', '?', '3'}, 0, 3);
+    assertEquals(new BytesWritable(new byte[] {'2', '?', '3'}), 
ba.getWritableObject());
+    initLazyObject(ba, new byte[] {'\n'}, 0, 1);
+    assertEquals(new BytesWritable(new byte[] {}), ba.getWritableObject());
   }
 
   public void testLazyIntegerWrite() throws Throwable {


Reply via email to