You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by xu...@apache.org on 2014/06/22 18:48:27 UTC
svn commit: r1604611 - in /hive/trunk: ql/src/test/queries/clientpositive/
ql/src/test/results/clientpositive/
serde/src/java/org/apache/hadoop/hive/serde2/lazy/
Author: xuefu
Date: Sun Jun 22 16:48:26 2014
New Revision: 1604611
URL: http://svn.apache.org/r1604611
Log:
HIVE-7234: Select on decimal column throws NPE (Ashish via Xuefu)
Added:
hive/trunk/ql/src/test/queries/clientpositive/decimal_10_0.q
hive/trunk/ql/src/test/results/clientpositive/decimal_10_0.q.out
Modified:
hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyHiveDecimal.java
hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyUtils.java
Added: hive/trunk/ql/src/test/queries/clientpositive/decimal_10_0.q
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/queries/clientpositive/decimal_10_0.q?rev=1604611&view=auto
==============================================================================
--- hive/trunk/ql/src/test/queries/clientpositive/decimal_10_0.q (added)
+++ hive/trunk/ql/src/test/queries/clientpositive/decimal_10_0.q Sun Jun 22 16:48:26 2014
@@ -0,0 +1,9 @@
+DROP TABLE IF EXISTS DECIMAL;
+
+CREATE TABLE DECIMAL (dec decimal);
+
+LOAD DATA LOCAL INPATH '../../data/files/decimal_10_0.txt' OVERWRITE INTO TABLE DECIMAL;
+
+SELECT dec FROM DECIMAL;
+
+DROP TABLE DECIMAL;
\ No newline at end of file
Added: hive/trunk/ql/src/test/results/clientpositive/decimal_10_0.q.out
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/results/clientpositive/decimal_10_0.q.out?rev=1604611&view=auto
==============================================================================
--- hive/trunk/ql/src/test/results/clientpositive/decimal_10_0.q.out (added)
+++ hive/trunk/ql/src/test/results/clientpositive/decimal_10_0.q.out Sun Jun 22 16:48:26 2014
@@ -0,0 +1,37 @@
+PREHOOK: query: DROP TABLE IF EXISTS DECIMAL
+PREHOOK: type: DROPTABLE
+POSTHOOK: query: DROP TABLE IF EXISTS DECIMAL
+POSTHOOK: type: DROPTABLE
+PREHOOK: query: CREATE TABLE DECIMAL (dec decimal)
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+POSTHOOK: query: CREATE TABLE DECIMAL (dec decimal)
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@DECIMAL
+PREHOOK: query: LOAD DATA LOCAL INPATH '../../data/files/decimal_10_0.txt' OVERWRITE INTO TABLE DECIMAL
+PREHOOK: type: LOAD
+#### A masked pattern was here ####
+PREHOOK: Output: default@decimal
+POSTHOOK: query: LOAD DATA LOCAL INPATH '../../data/files/decimal_10_0.txt' OVERWRITE INTO TABLE DECIMAL
+POSTHOOK: type: LOAD
+#### A masked pattern was here ####
+POSTHOOK: Output: default@decimal
+PREHOOK: query: SELECT dec FROM DECIMAL
+PREHOOK: type: QUERY
+PREHOOK: Input: default@decimal
+#### A masked pattern was here ####
+POSTHOOK: query: SELECT dec FROM DECIMAL
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@decimal
+#### A masked pattern was here ####
+1000000000
+NULL
+PREHOOK: query: DROP TABLE DECIMAL
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: default@decimal
+PREHOOK: Output: default@decimal
+POSTHOOK: query: DROP TABLE DECIMAL
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: default@decimal
+POSTHOOK: Output: default@decimal
Modified: hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyHiveDecimal.java
URL: http://svn.apache.org/viewvc/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyHiveDecimal.java?rev=1604611&r1=1604610&r2=1604611&view=diff
==============================================================================
--- hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyHiveDecimal.java (original)
+++ hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyHiveDecimal.java Sun Jun 22 16:48:26 2014
@@ -17,6 +17,9 @@
*/
package org.apache.hadoop.hive.serde2.lazy;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.nio.ByteBuffer;
import java.nio.charset.CharacterCodingException;
import org.apache.commons.logging.Log;
@@ -33,6 +36,7 @@ public class LazyHiveDecimal extends Laz
private final int precision;
private final int scale;
+ private static final byte[] nullBytes = new byte[]{0x0, 0x0, 0x0, 0x0};
public LazyHiveDecimal(LazyHiveDecimalObjectInspector oi) {
super(oi);
@@ -93,4 +97,19 @@ public class LazyHiveDecimal extends Laz
return data;
}
+ /**
+ * Writes HiveDecimal object to output stream as string
+ * @param outputStream
+ * @param hiveDecimal
+ * @throws IOException
+ */
+ public static void writeUTF8(OutputStream outputStream, HiveDecimal hiveDecimal)
+ throws IOException {
+ if (hiveDecimal == null) {
+ outputStream.write(nullBytes);
+ } else {
+ ByteBuffer b = Text.encode(hiveDecimal.toString());
+ outputStream.write(b.array(), 0, b.limit());
+ }
+ }
}
Modified: hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyUtils.java
URL: http://svn.apache.org/viewvc/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyUtils.java?rev=1604611&r1=1604610&r2=1604611&view=diff
==============================================================================
--- hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyUtils.java (original)
+++ hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/lazy/LazyUtils.java Sun Jun 22 16:48:26 2014
@@ -28,7 +28,6 @@ import java.util.Arrays;
import java.util.Properties;
import org.apache.commons.codec.binary.Base64;
-import org.apache.hadoop.hive.common.type.HiveDecimal;
import org.apache.hadoop.hive.serde.serdeConstants;
import org.apache.hadoop.hive.serde2.SerDeException;
import org.apache.hadoop.hive.serde2.io.HiveCharWritable;
@@ -261,9 +260,8 @@ public final class LazyUtils {
break;
}
case DECIMAL: {
- HiveDecimal bd = ((HiveDecimalObjectInspector) oi).getPrimitiveJavaObject(o);
- ByteBuffer b = Text.encode(bd.toString());
- out.write(b.array(), 0, b.limit());
+ LazyHiveDecimal.writeUTF8(out,
+ ((HiveDecimalObjectInspector) oi).getPrimitiveJavaObject(o));
break;
}
default: {