You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by jx...@apache.org on 2015/08/18 18:11:04 UTC

hive git commit: HIVE-11580: ThriftUnionObjectInspector#toString throws NPE (Jimmy, reviewed by Chao)

Repository: hive
Updated Branches:
  refs/heads/master 5edbf31a7 -> 6433c3b0b


HIVE-11580: ThriftUnionObjectInspector#toString throws NPE (Jimmy, reviewed by Chao)


Project: http://git-wip-us.apache.org/repos/asf/hive/repo
Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/6433c3b0
Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/6433c3b0
Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/6433c3b0

Branch: refs/heads/master
Commit: 6433c3b0b8e305c8dddc6ea2fe94cfcd5062e40d
Parents: 5edbf31
Author: Jimmy Xiang <jx...@cloudera.com>
Authored: Fri Aug 14 15:48:23 2015 -0700
Committer: Jimmy Xiang <jx...@cloudera.com>
Committed: Tue Aug 18 08:49:21 2015 -0700

----------------------------------------------------------------------
 .../ThriftUnionObjectInspector.java             | 26 ++++++++++----------
 .../TestThriftObjectInspectors.java             | 10 ++++++--
 2 files changed, 21 insertions(+), 15 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hive/blob/6433c3b0/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/ThriftUnionObjectInspector.java
----------------------------------------------------------------------
diff --git a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/ThriftUnionObjectInspector.java b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/ThriftUnionObjectInspector.java
index 17add28..600abbb 100644
--- a/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/ThriftUnionObjectInspector.java
+++ b/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/ThriftUnionObjectInspector.java
@@ -18,18 +18,18 @@
 
 package org.apache.hadoop.hive.serde2.objectinspector;
 
-import com.google.common.primitives.UnsignedBytes;
-import org.apache.hadoop.util.ReflectionUtils;
-import org.apache.thrift.TFieldIdEnum;
-import org.apache.thrift.TUnion;
-import org.apache.thrift.meta_data.FieldMetaData;
-
 import java.lang.reflect.Field;
 import java.lang.reflect.Type;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
+import org.apache.thrift.TFieldIdEnum;
+import org.apache.thrift.TUnion;
+import org.apache.thrift.meta_data.FieldMetaData;
+
+import com.google.common.primitives.UnsignedBytes;
+
 /**
  * Always use the ObjectInspectorFactory to create new ObjectInspector objects,
  * instead of directly creating an instance of this class.
@@ -37,7 +37,8 @@ import java.util.Map;
 public class ThriftUnionObjectInspector extends ReflectionStructObjectInspector implements UnionObjectInspector {
 
   private static final String FIELD_METADATA_MAP = "metaDataMap";
-  private  List<ObjectInspector> ois;
+  private List<ObjectInspector> ois;
+  private List<StandardStructObjectInspector.MyField> fields;
 
   @Override
   public boolean shouldIgnoreField(String name) {
@@ -88,10 +89,14 @@ public class ThriftUnionObjectInspector extends ReflectionStructObjectInspector
 
     try {
       final Map<? extends TFieldIdEnum, FieldMetaData> fieldMap = (Map<? extends TFieldIdEnum, FieldMetaData>) fieldMetaData.get(null);
+      fields = new ArrayList<StandardStructObjectInspector.MyField>(fieldMap.size());
       this.ois = new ArrayList<ObjectInspector>();
       for(Map.Entry<? extends TFieldIdEnum, FieldMetaData> metadata : fieldMap.entrySet()) {
-        final Type fieldType = ThriftObjectInspectorUtils.getFieldType(objectClass, metadata.getValue().fieldName);
+        int fieldId = metadata.getKey().getThriftFieldId();
+        String fieldName = metadata.getValue().fieldName;
+        final Type fieldType = ThriftObjectInspectorUtils.getFieldType(objectClass, fieldName);
         final ObjectInspector reflectionObjectInspector = ObjectInspectorFactory.getReflectionObjectInspector(fieldType, options);
+        fields.add(new StandardStructObjectInspector.MyField(fieldId, fieldName, reflectionObjectInspector));
         this.ois.add(reflectionObjectInspector);
       }
     } catch (IllegalAccessException e) {
@@ -112,10 +117,5 @@ public class ThriftUnionObjectInspector extends ReflectionStructObjectInspector
   public String getTypeName() {
     return ObjectInspectorUtils.getStandardUnionTypeName(this);
   }
-
-  @Override
-  public Object create() {
-    return ReflectionUtils.newInstance(objectClass, null);
-  }
 }
 

http://git-wip-us.apache.org/repos/asf/hive/blob/6433c3b0/serde/src/test/org/apache/hadoop/hive/serde2/objectinspector/TestThriftObjectInspectors.java
----------------------------------------------------------------------
diff --git a/serde/src/test/org/apache/hadoop/hive/serde2/objectinspector/TestThriftObjectInspectors.java b/serde/src/test/org/apache/hadoop/hive/serde2/objectinspector/TestThriftObjectInspectors.java
index 968cd22..85f2bd6 100644
--- a/serde/src/test/org/apache/hadoop/hive/serde2/objectinspector/TestThriftObjectInspectors.java
+++ b/serde/src/test/org/apache/hadoop/hive/serde2/objectinspector/TestThriftObjectInspectors.java
@@ -23,14 +23,15 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 
-import junit.framework.TestCase;
-
 import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector.Category;
 import org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorFactory;
 import org.apache.hadoop.hive.serde2.thrift.test.Complex;
 import org.apache.hadoop.hive.serde2.thrift.test.IntString;
+import org.apache.hadoop.hive.serde2.thrift.test.PropValueUnion;
 import org.apache.hadoop.hive.serde2.thrift.test.SetIntString;
 
+import junit.framework.TestCase;
+
 /**
  * TestThriftObjectInspectors.
  *
@@ -60,6 +61,11 @@ public class TestThriftObjectInspectors extends TestCase {
         assertNull(soi.getStructFieldData(null, fields.get(i)));
       }
 
+      ObjectInspector oi = ObjectInspectorFactory
+          .getReflectionObjectInspector(PropValueUnion.class,
+          ObjectInspectorFactory.ObjectInspectorOptions.THRIFT);
+      assertNotNull(oi.toString());
+
       // real object
       Complex c = new Complex();
       c.setAint(1);