You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by zs...@apache.org on 2010/01/21 10:52:48 UTC
svn commit: r901625 [3/6] - in /hadoop/hive/trunk: ./
serde/src/java/org/apache/hadoop/hive/serde2/
serde/src/java/org/apache/hadoop/hive/serde2/binarysortable/
serde/src/java/org/apache/hadoop/hive/serde2/columnar/
serde/src/java/org/apache/hadoop/hiv...
Modified: hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/thrift/WriteTextProtocol.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/thrift/WriteTextProtocol.java?rev=901625&r1=901624&r2=901625&view=diff
==============================================================================
--- hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/thrift/WriteTextProtocol.java (original)
+++ hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/thrift/WriteTextProtocol.java Thu Jan 21 09:52:44 2010
@@ -19,13 +19,12 @@
package org.apache.hadoop.hive.serde2.thrift;
import org.apache.hadoop.io.Text;
-
import org.apache.thrift.TException;
/**
* An interface for TProtocols that can write out data in hadoop Text objects
- * (UTF-8 encoded String). This helps a lot with performance because we don't
- * need to do unnecessary UTF-8 decoding and encoding loops.
+ * (UTF-8 encoded String). This helps a lot with performance because we don't
+ * need to do unnecessary UTF-8 decoding and encoding loops.
*/
public interface WriteTextProtocol {
Modified: hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/ListTypeInfo.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/ListTypeInfo.java?rev=901625&r1=901624&r2=901625&view=diff
==============================================================================
--- hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/ListTypeInfo.java (original)
+++ hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/ListTypeInfo.java Thu Jan 21 09:52:44 2010
@@ -19,50 +19,61 @@
package org.apache.hadoop.hive.serde2.typeinfo;
import java.io.Serializable;
+
import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector.Category;
-/** A List Type has homogeneous elements. All elements of the List has
- * the same TypeInfo which is returned by getListElementTypeInfo.
- *
- * Always use the TypeInfoFactory to create new TypeInfo objects, instead
- * of directly creating an instance of this class.
+/**
+ * A List Type has homogeneous elements. All elements of the List has the same
+ * TypeInfo which is returned by getListElementTypeInfo.
+ *
+ * Always use the TypeInfoFactory to create new TypeInfo objects, instead of
+ * directly creating an instance of this class.
*/
public class ListTypeInfo extends TypeInfo implements Serializable {
private static final long serialVersionUID = 1L;
TypeInfo listElementTypeInfo;
-
- /** For java serialization use only.
+
+ /**
+ * For java serialization use only.
*/
- public ListTypeInfo() {}
-
+ public ListTypeInfo() {
+ }
+
+ @Override
public String getTypeName() {
- return org.apache.hadoop.hive.serde.Constants.LIST_TYPE_NAME
- + "<" + listElementTypeInfo.getTypeName() + ">";
+ return org.apache.hadoop.hive.serde.Constants.LIST_TYPE_NAME + "<"
+ + listElementTypeInfo.getTypeName() + ">";
}
-
- /** For java serialization use only.
+
+ /**
+ * For java serialization use only.
*/
public void setListElementTypeInfo(TypeInfo listElementTypeInfo) {
this.listElementTypeInfo = listElementTypeInfo;
}
-
- /** For TypeInfoFactory use only.
+
+ /**
+ * For TypeInfoFactory use only.
*/
ListTypeInfo(TypeInfo elementTypeInfo) {
- this.listElementTypeInfo = elementTypeInfo;
+ listElementTypeInfo = elementTypeInfo;
}
+ @Override
public Category getCategory() {
return Category.LIST;
- }
+ }
public TypeInfo getListElementTypeInfo() {
return listElementTypeInfo;
}
+ @Override
public boolean equals(Object other) {
- if (this == other) return true;
+ if (this == other) {
+ return true;
+ }
if (!(other instanceof ListTypeInfo)) {
return false;
}
@@ -70,9 +81,10 @@
return o.getCategory().equals(getCategory())
&& o.getListElementTypeInfo().equals(getListElementTypeInfo());
}
-
+
+ @Override
public int hashCode() {
return listElementTypeInfo.hashCode();
}
-
+
}
Modified: hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/MapTypeInfo.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/MapTypeInfo.java?rev=901625&r1=901624&r2=901625&view=diff
==============================================================================
--- hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/MapTypeInfo.java (original)
+++ hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/MapTypeInfo.java Thu Jan 21 09:52:44 2010
@@ -22,52 +22,59 @@
import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector.Category;
-/** A Map Type has homogeneous keys and homogeneous values.
- * All keys of the Map have the same TypeInfo, which is returned by
- * getMapKeyTypeInfo(); and all values of the Map has the same TypeInfo,
- * which is returned by getMapValueTypeInfo().
- *
- * Always use the TypeInfoFactory to create new TypeInfo objects, instead
- * of directly creating an instance of this class.
+/**
+ * A Map Type has homogeneous keys and homogeneous values. All keys of the Map
+ * have the same TypeInfo, which is returned by getMapKeyTypeInfo(); and all
+ * values of the Map has the same TypeInfo, which is returned by
+ * getMapValueTypeInfo().
+ *
+ * Always use the TypeInfoFactory to create new TypeInfo objects, instead of
+ * directly creating an instance of this class.
*/
-public class MapTypeInfo extends TypeInfo implements Serializable{
+public class MapTypeInfo extends TypeInfo implements Serializable {
private static final long serialVersionUID = 1L;
-
+
TypeInfo mapKeyTypeInfo;
TypeInfo mapValueTypeInfo;
-
- /** For java serialization use only.
+
+ /**
+ * For java serialization use only.
*/
- public MapTypeInfo() {}
-
+ public MapTypeInfo() {
+ }
+
+ @Override
public String getTypeName() {
- return org.apache.hadoop.hive.serde.Constants.MAP_TYPE_NAME
- + "<" + mapKeyTypeInfo.getTypeName() + ","
- + mapValueTypeInfo.getTypeName() + ">";
+ return org.apache.hadoop.hive.serde.Constants.MAP_TYPE_NAME + "<"
+ + mapKeyTypeInfo.getTypeName() + "," + mapValueTypeInfo.getTypeName()
+ + ">";
}
-
- /** For java serialization use only.
+
+ /**
+ * For java serialization use only.
*/
public void setMapKeyTypeInfo(TypeInfo mapKeyTypeInfo) {
this.mapKeyTypeInfo = mapKeyTypeInfo;
}
- /** For java serialization use only.
+ /**
+ * For java serialization use only.
*/
public void setMapValueTypeInfo(TypeInfo mapValueTypeInfo) {
this.mapValueTypeInfo = mapValueTypeInfo;
}
-
+
// For TypeInfoFactory use only
MapTypeInfo(TypeInfo keyTypeInfo, TypeInfo valueTypeInfo) {
- this.mapKeyTypeInfo = keyTypeInfo;
- this.mapValueTypeInfo = valueTypeInfo;
+ mapKeyTypeInfo = keyTypeInfo;
+ mapValueTypeInfo = valueTypeInfo;
}
+ @Override
public Category getCategory() {
return Category.MAP;
- }
+ }
public TypeInfo getMapKeyTypeInfo() {
return mapKeyTypeInfo;
@@ -77,8 +84,11 @@
return mapValueTypeInfo;
}
+ @Override
public boolean equals(Object other) {
- if (this == other) return true;
+ if (this == other) {
+ return true;
+ }
if (!(other instanceof MapTypeInfo)) {
return false;
}
@@ -87,10 +97,10 @@
&& o.getMapKeyTypeInfo().equals(getMapKeyTypeInfo())
&& o.getMapValueTypeInfo().equals(getMapValueTypeInfo());
}
-
+
+ @Override
public int hashCode() {
return mapKeyTypeInfo.hashCode() ^ mapValueTypeInfo.hashCode();
}
-
-
+
}
Modified: hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/PrimitiveTypeInfo.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/PrimitiveTypeInfo.java?rev=901625&r1=901624&r2=901625&view=diff
==============================================================================
--- hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/PrimitiveTypeInfo.java (original)
+++ hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/PrimitiveTypeInfo.java Thu Jan 21 09:52:44 2010
@@ -19,38 +19,41 @@
package org.apache.hadoop.hive.serde2.typeinfo;
import java.io.Serializable;
-import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspectorUtils;
+
import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector.Category;
import org.apache.hadoop.hive.serde2.objectinspector.PrimitiveObjectInspector.PrimitiveCategory;
import org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorUtils;
-
-/** There are limited number of Primitive Types.
- * All Primitive Types are defined by TypeInfoFactory.isPrimitiveClass().
- *
- * Always use the TypeInfoFactory to create new TypeInfo objects, instead
- * of directly creating an instance of this class.
+/**
+ * There are limited number of Primitive Types. All Primitive Types are defined
+ * by TypeInfoFactory.isPrimitiveClass().
+ *
+ * Always use the TypeInfoFactory to create new TypeInfo objects, instead of
+ * directly creating an instance of this class.
*/
public class PrimitiveTypeInfo extends TypeInfo implements Serializable {
private static final long serialVersionUID = 1L;
-
+
String typeName;
-
- /** For java serialization use only.
+
+ /**
+ * For java serialization use only.
*/
- public PrimitiveTypeInfo() {}
+ public PrimitiveTypeInfo() {
+ }
- /** For TypeInfoFactory use only.
+ /**
+ * For TypeInfoFactory use only.
*/
PrimitiveTypeInfo(String typeName) {
this.typeName = typeName;
}
-
+
/**
* Returns the category of this TypeInfo.
*/
- @Override
+ @Override
public Category getCategory() {
return Category.PRIMITIVE;
}
@@ -58,39 +61,40 @@
public PrimitiveCategory getPrimitiveCategory() {
return PrimitiveObjectInspectorUtils.getTypeEntryFromTypeName(typeName).primitiveCategory;
}
-
+
public Class<?> getPrimitiveWritableClass() {
return PrimitiveObjectInspectorUtils.getTypeEntryFromTypeName(typeName).primitiveWritableClass;
}
-
+
public Class<?> getPrimitiveJavaClass() {
return PrimitiveObjectInspectorUtils.getTypeEntryFromTypeName(typeName).primitiveJavaClass;
}
-
-
+
// The following 2 methods are for java serialization use only.
public void setTypeName(String typeName) {
this.typeName = typeName;
}
+ @Override
public String getTypeName() {
return typeName;
}
/**
- * Compare if 2 TypeInfos are the same.
- * We use TypeInfoFactory to cache TypeInfos, so we only
- * need to compare the Object pointer.
+ * Compare if 2 TypeInfos are the same. We use TypeInfoFactory to cache
+ * TypeInfos, so we only need to compare the Object pointer.
*/
+ @Override
public boolean equals(Object other) {
return this == other;
}
-
+
/**
* Generate the hashCode for this TypeInfo.
*/
+ @Override
public int hashCode() {
return typeName.hashCode();
}
-
+
}
Modified: hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/StructTypeInfo.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/StructTypeInfo.java?rev=901625&r1=901624&r2=901625&view=diff
==============================================================================
--- hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/StructTypeInfo.java (original)
+++ hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/StructTypeInfo.java Thu Jan 21 09:52:44 2010
@@ -25,30 +25,35 @@
import org.apache.hadoop.hive.serde.Constants;
import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector.Category;
-/** StructTypeInfo represents the TypeInfo of a struct.
- * A struct contains one or more fields each of which has a unique name
- * and its own TypeInfo. Different fields can have the same or different
- * TypeInfo.
- *
- * Always use the TypeInfoFactory to create new TypeInfo objects, instead
- * of directly creating an instance of this class.
+/**
+ * StructTypeInfo represents the TypeInfo of a struct. A struct contains one or
+ * more fields each of which has a unique name and its own TypeInfo. Different
+ * fields can have the same or different TypeInfo.
+ *
+ * Always use the TypeInfoFactory to create new TypeInfo objects, instead of
+ * directly creating an instance of this class.
*/
-public class StructTypeInfo extends TypeInfo implements Serializable{
+public class StructTypeInfo extends TypeInfo implements Serializable {
private static final long serialVersionUID = 1L;
-
+
ArrayList<String> allStructFieldNames;
ArrayList<TypeInfo> allStructFieldTypeInfos;
-
- /** For java serialization use only.
+
+ /**
+ * For java serialization use only.
*/
- public StructTypeInfo() {}
+ public StructTypeInfo() {
+ }
+ @Override
public String getTypeName() {
StringBuilder sb = new StringBuilder();
sb.append(Constants.STRUCT_TYPE_NAME + "<");
- for(int i=0; i<allStructFieldNames.size(); i++) {
- if (i>0) sb.append(",");
+ for (int i = 0; i < allStructFieldNames.size(); i++) {
+ if (i > 0) {
+ sb.append(",");
+ }
sb.append(allStructFieldNames.get(i));
sb.append(":");
sb.append(allStructFieldTypeInfos.get(i).getTypeName());
@@ -56,21 +61,24 @@
sb.append(">");
return sb.toString();
}
-
- /** For java serialization use only.
+
+ /**
+ * For java serialization use only.
*/
public void setAllStructFieldNames(ArrayList<String> allStructFieldNames) {
this.allStructFieldNames = allStructFieldNames;
}
- /** For java serialization use only.
+ /**
+ * For java serialization use only.
*/
public void setAllStructFieldTypeInfos(
ArrayList<TypeInfo> allStructFieldTypeInfos) {
this.allStructFieldTypeInfos = allStructFieldTypeInfos;
}
-
- /** For TypeInfoFactory use only.
+
+ /**
+ * For TypeInfoFactory use only.
*/
StructTypeInfo(List<String> names, List<TypeInfo> typeInfos) {
allStructFieldNames = new ArrayList<String>();
@@ -79,33 +87,36 @@
allStructFieldTypeInfos.addAll(typeInfos);
}
+ @Override
public Category getCategory() {
return Category.STRUCT;
}
-
+
public ArrayList<String> getAllStructFieldNames() {
return allStructFieldNames;
}
-
+
public ArrayList<TypeInfo> getAllStructFieldTypeInfos() {
return allStructFieldTypeInfos;
}
-
+
public TypeInfo getStructFieldTypeInfo(String field) {
String fieldLowerCase = field.toLowerCase();
- for(int i=0; i<allStructFieldNames.size(); i++) {
+ for (int i = 0; i < allStructFieldNames.size(); i++) {
if (fieldLowerCase.equals(allStructFieldNames.get(i))) {
return allStructFieldTypeInfos.get(i);
}
}
- throw new RuntimeException("cannot find field " + field + "(lowercase form: "
- + fieldLowerCase + ") in " + allStructFieldNames);
+ throw new RuntimeException("cannot find field " + field
+ + "(lowercase form: " + fieldLowerCase + ") in " + allStructFieldNames);
// return null;
}
-
+
@Override
public boolean equals(Object other) {
- if (this == other) return true;
+ if (this == other) {
+ return true;
+ }
if (!(other instanceof StructTypeInfo)) {
return false;
}
@@ -114,9 +125,10 @@
&& o.getAllStructFieldNames().equals(getAllStructFieldNames())
&& o.getAllStructFieldTypeInfos().equals(getAllStructFieldTypeInfos());
}
-
+
+ @Override
public int hashCode() {
return allStructFieldNames.hashCode() ^ allStructFieldTypeInfos.hashCode();
}
-
+
}
Modified: hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/TypeInfo.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/TypeInfo.java?rev=901625&r1=901624&r2=901625&view=diff
==============================================================================
--- hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/TypeInfo.java (original)
+++ hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/TypeInfo.java Thu Jan 21 09:52:44 2010
@@ -19,46 +19,51 @@
package org.apache.hadoop.hive.serde2.typeinfo;
import java.io.Serializable;
+
import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector.Category;
/**
- * Stores information about a type.
- * Always use the TypeInfoFactory to create new TypeInfo objects.
+ * Stores information about a type. Always use the TypeInfoFactory to create new
+ * TypeInfo objects.
*
- * We support 4 categories of types:
- * 1. Primitive objects (String, Number, etc)
- * 2. List objects (a list of objects of a single type)
- * 3. Map objects (a map from objects of one type to objects of another type)
- * 4. Struct objects (a list of fields with names and their own types)
+ * We support 4 categories of types: 1. Primitive objects (String, Number, etc)
+ * 2. List objects (a list of objects of a single type) 3. Map objects (a map
+ * from objects of one type to objects of another type) 4. Struct objects (a
+ * list of fields with names and their own types)
*/
public abstract class TypeInfo implements Serializable {
- protected TypeInfo() {}
+ protected TypeInfo() {
+ }
/**
- * The Category of this TypeInfo.
- * Possible values are Primitive, List, Map and Struct, which corresponds
- * to the 4 sub-classes of TypeInfo.
+ * The Category of this TypeInfo. Possible values are Primitive, List, Map and
+ * Struct, which corresponds to the 4 sub-classes of TypeInfo.
*/
public abstract Category getCategory();
-
+
/**
* A String representation of the TypeInfo.
*/
public abstract String getTypeName();
-
+
+ @Override
public String toString() {
return getTypeName();
}
+ @Override
public boolean equals(Object o) {
- if (!(o instanceof TypeInfo))
- return false;
- TypeInfo dest = (TypeInfo)o;
- if (getCategory() != dest.getCategory())
- return false;
- if (getTypeName() != dest.getTypeName())
- return false;
- return true;
+ if (!(o instanceof TypeInfo)) {
+ return false;
+ }
+ TypeInfo dest = (TypeInfo) o;
+ if (getCategory() != dest.getCategory()) {
+ return false;
+ }
+ if (getTypeName() != dest.getTypeName()) {
+ return false;
+ }
+ return true;
}
}
Modified: hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/TypeInfoFactory.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/TypeInfoFactory.java?rev=901625&r1=901624&r2=901625&view=diff
==============================================================================
--- hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/TypeInfoFactory.java (original)
+++ hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/TypeInfoFactory.java Thu Jan 21 09:52:44 2010
@@ -21,31 +21,28 @@
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
-import java.util.Stack;
import org.apache.hadoop.hive.serde.Constants;
-import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspectorUtils;
import org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorUtils;
-import org.apache.hadoop.io.IntWritable;
-
-
/**
* TypeInfoFactory can be used to create the TypeInfo object for any types.
*
- * TypeInfo objects are all read-only so we can reuse them easily. TypeInfoFactory
- * has internal cache to make sure we don't create 2 TypeInfo objects that represents the
- * same type.
+ * TypeInfo objects are all read-only so we can reuse them easily.
+ * TypeInfoFactory has internal cache to make sure we don't create 2 TypeInfo
+ * objects that represents the same type.
*/
public class TypeInfoFactory {
static HashMap<String, TypeInfo> cachedPrimitiveTypeInfo = new HashMap<String, TypeInfo>();
+
public static TypeInfo getPrimitiveTypeInfo(String typeName) {
- if (null == PrimitiveObjectInspectorUtils.getTypeEntryFromTypeName(typeName)) {
+ if (null == PrimitiveObjectInspectorUtils
+ .getTypeEntryFromTypeName(typeName)) {
throw new RuntimeException("Cannot getPrimitiveTypeInfo for " + typeName);
}
TypeInfo result = cachedPrimitiveTypeInfo.get(typeName);
- if (result == null) {
+ if (result == null) {
result = new PrimitiveTypeInfo(typeName);
cachedPrimitiveTypeInfo.put(typeName, result);
}
@@ -63,36 +60,43 @@
public static final TypeInfo shortTypeInfo = getPrimitiveTypeInfo(Constants.SMALLINT_TYPE_NAME);
public static final TypeInfo unknownTypeInfo = getPrimitiveTypeInfo("unknown");
-
- public static TypeInfo getPrimitiveTypeInfoFromPrimitiveWritable(Class<?> clazz) {
- String typeName = PrimitiveObjectInspectorUtils.getTypeNameFromPrimitiveWritable(clazz);
+
+ public static TypeInfo getPrimitiveTypeInfoFromPrimitiveWritable(
+ Class<?> clazz) {
+ String typeName = PrimitiveObjectInspectorUtils
+ .getTypeNameFromPrimitiveWritable(clazz);
if (typeName == null) {
- throw new RuntimeException("Internal error: Cannot get typeName for " + clazz);
+ throw new RuntimeException("Internal error: Cannot get typeName for "
+ + clazz);
}
return getPrimitiveTypeInfo(typeName);
}
public static TypeInfo getPrimitiveTypeInfoFromJavaPrimitive(Class<?> clazz) {
- return getPrimitiveTypeInfo(PrimitiveObjectInspectorUtils.getTypeNameFromPrimitiveJava(clazz));
+ return getPrimitiveTypeInfo(PrimitiveObjectInspectorUtils
+ .getTypeNameFromPrimitiveJava(clazz));
}
-
+
static HashMap<ArrayList<List<?>>, TypeInfo> cachedStructTypeInfo = new HashMap<ArrayList<List<?>>, TypeInfo>();
- public static TypeInfo getStructTypeInfo(List<String> names, List<TypeInfo> typeInfos) {
+
+ public static TypeInfo getStructTypeInfo(List<String> names,
+ List<TypeInfo> typeInfos) {
ArrayList<List<?>> signature = new ArrayList<List<?>>(2);
signature.add(names);
signature.add(typeInfos);
TypeInfo result = cachedStructTypeInfo.get(signature);
- if (result == null) {
+ if (result == null) {
result = new StructTypeInfo(names, typeInfos);
cachedStructTypeInfo.put(signature, result);
}
return result;
}
-
+
static HashMap<TypeInfo, TypeInfo> cachedListTypeInfo = new HashMap<TypeInfo, TypeInfo>();
+
public static TypeInfo getListTypeInfo(TypeInfo elementTypeInfo) {
TypeInfo result = cachedListTypeInfo.get(elementTypeInfo);
- if (result == null) {
+ if (result == null) {
result = new ListTypeInfo(elementTypeInfo);
cachedListTypeInfo.put(elementTypeInfo, result);
}
@@ -100,12 +104,14 @@
}
static HashMap<ArrayList<TypeInfo>, TypeInfo> cachedMapTypeInfo = new HashMap<ArrayList<TypeInfo>, TypeInfo>();
- public static TypeInfo getMapTypeInfo(TypeInfo keyTypeInfo, TypeInfo valueTypeInfo) {
+
+ public static TypeInfo getMapTypeInfo(TypeInfo keyTypeInfo,
+ TypeInfo valueTypeInfo) {
ArrayList<TypeInfo> signature = new ArrayList<TypeInfo>(2);
signature.add(keyTypeInfo);
signature.add(valueTypeInfo);
TypeInfo result = cachedMapTypeInfo.get(signature);
- if (result == null) {
+ if (result == null) {
result = new MapTypeInfo(keyTypeInfo, valueTypeInfo);
cachedMapTypeInfo.put(signature, result);
}
Modified: hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/TypeInfoUtils.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/TypeInfoUtils.java?rev=901625&r1=901624&r2=901625&view=diff
==============================================================================
--- hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/TypeInfoUtils.java (original)
+++ hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/TypeInfoUtils.java Thu Jan 21 09:52:44 2010
@@ -25,111 +25,121 @@
import org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorUtils.PrimitiveTypeEntry;
public class TypeInfoUtils {
-
+
/**
- * Return the extended TypeInfo from a Java type.
- * By extended TypeInfo, we allow unknownType for java.lang.Object.
- * @param t The Java type.
- * @param m The method, only used for generating error messages.
+ * Return the extended TypeInfo from a Java type. By extended TypeInfo, we
+ * allow unknownType for java.lang.Object.
+ *
+ * @param t
+ * The Java type.
+ * @param m
+ * The method, only used for generating error messages.
*/
private static TypeInfo getExtendedTypeInfoFromJavaType(Type t, Method m) {
if (t == Object.class) {
- return TypeInfoFactory.unknownTypeInfo;
+ return TypeInfoFactory.unknownTypeInfo;
}
-
+
if (t instanceof ParameterizedType) {
- ParameterizedType pt = (ParameterizedType)t;
+ ParameterizedType pt = (ParameterizedType) t;
// List?
- if (List.class == (Class<?>)pt.getRawType()
- || ArrayList.class == (Class<?>)pt.getRawType()) {
- return TypeInfoFactory.getListTypeInfo(
- getExtendedTypeInfoFromJavaType(pt.getActualTypeArguments()[0], m));
+ if (List.class == (Class<?>) pt.getRawType()
+ || ArrayList.class == (Class<?>) pt.getRawType()) {
+ return TypeInfoFactory.getListTypeInfo(getExtendedTypeInfoFromJavaType(
+ pt.getActualTypeArguments()[0], m));
}
// Map?
- if (Map.class == (Class<?>)pt.getRawType()
- || HashMap.class == (Class<?>)pt.getRawType()) {
- return TypeInfoFactory.getMapTypeInfo(
- getExtendedTypeInfoFromJavaType(pt.getActualTypeArguments()[0], m),
+ if (Map.class == (Class<?>) pt.getRawType()
+ || HashMap.class == (Class<?>) pt.getRawType()) {
+ return TypeInfoFactory.getMapTypeInfo(getExtendedTypeInfoFromJavaType(
+ pt.getActualTypeArguments()[0], m),
getExtendedTypeInfoFromJavaType(pt.getActualTypeArguments()[1], m));
}
- // Otherwise convert t to RawType so we will fall into the following if block.
+ // Otherwise convert t to RawType so we will fall into the following if
+ // block.
t = pt.getRawType();
}
-
+
// Must be a class.
if (!(t instanceof Class)) {
- throw new RuntimeException("Hive does not understand type " + t + " from " + m);
+ throw new RuntimeException("Hive does not understand type " + t
+ + " from " + m);
}
- Class<?> c = (Class<?>)t;
-
+ Class<?> c = (Class<?>) t;
+
// Java Primitive Type?
if (PrimitiveObjectInspectorUtils.isPrimitiveJavaType(c)) {
- return TypeInfoUtils.getTypeInfoFromObjectInspector(
- PrimitiveObjectInspectorFactory.getPrimitiveJavaObjectInspector(
- PrimitiveObjectInspectorUtils.getTypeEntryFromPrimitiveJavaType(c).primitiveCategory));
+ return TypeInfoUtils
+ .getTypeInfoFromObjectInspector(PrimitiveObjectInspectorFactory
+ .getPrimitiveJavaObjectInspector(PrimitiveObjectInspectorUtils
+ .getTypeEntryFromPrimitiveJavaType(c).primitiveCategory));
}
// Java Primitive Class?
if (PrimitiveObjectInspectorUtils.isPrimitiveJavaClass(c)) {
- return TypeInfoUtils.getTypeInfoFromObjectInspector(
- PrimitiveObjectInspectorFactory.getPrimitiveJavaObjectInspector(
- PrimitiveObjectInspectorUtils.getTypeEntryFromPrimitiveJavaClass(c).primitiveCategory));
+ return TypeInfoUtils
+ .getTypeInfoFromObjectInspector(PrimitiveObjectInspectorFactory
+ .getPrimitiveJavaObjectInspector(PrimitiveObjectInspectorUtils
+ .getTypeEntryFromPrimitiveJavaClass(c).primitiveCategory));
}
-
+
// Primitive Writable class?
if (PrimitiveObjectInspectorUtils.isPrimitiveWritableClass(c)) {
- return TypeInfoUtils.getTypeInfoFromObjectInspector(
- PrimitiveObjectInspectorFactory.getPrimitiveWritableObjectInspector(
- PrimitiveObjectInspectorUtils.getTypeEntryFromPrimitiveWritableClass(c).primitiveCategory));
+ return TypeInfoUtils
+ .getTypeInfoFromObjectInspector(PrimitiveObjectInspectorFactory
+ .getPrimitiveWritableObjectInspector(PrimitiveObjectInspectorUtils
+ .getTypeEntryFromPrimitiveWritableClass(c).primitiveCategory));
}
-
+
// Must be a struct
Field[] fields = ObjectInspectorUtils.getDeclaredNonStaticFields(c);
ArrayList<String> fieldNames = new ArrayList<String>(fields.length);
ArrayList<TypeInfo> fieldTypeInfos = new ArrayList<TypeInfo>(fields.length);
- for(int i=0; i<fields.length; i++) {
- fieldNames.add(fields[i].getName());
- fieldTypeInfos.add(getExtendedTypeInfoFromJavaType(fields[i].getGenericType(), m));
+ for (Field field : fields) {
+ fieldNames.add(field.getName());
+ fieldTypeInfos.add(getExtendedTypeInfoFromJavaType(
+ field.getGenericType(), m));
}
return TypeInfoFactory.getStructTypeInfo(fieldNames, fieldTypeInfos);
}
-
+
/**
- * Returns the array element type, if the Type is an array (Object[]),
- * or GenericArrayType (Map<String,String>[]). Otherwise return null.
+ * Returns the array element type, if the Type is an array (Object[]), or
+ * GenericArrayType (Map<String,String>[]). Otherwise return null.
*/
public static Type getArrayElementType(Type t) {
- if (t instanceof Class
- && ((Class<?>)t).isArray()) {
- Class<?> arrayClass = (Class<?>)t;
+ if (t instanceof Class && ((Class<?>) t).isArray()) {
+ Class<?> arrayClass = (Class<?>) t;
return arrayClass.getComponentType();
} else if (t instanceof GenericArrayType) {
- GenericArrayType arrayType = (GenericArrayType)t;
+ GenericArrayType arrayType = (GenericArrayType) t;
return arrayType.getGenericComponentType();
}
return null;
}
-
+
/**
* Get the parameter TypeInfo for a method.
- * @param size In case the last parameter of Method is an array, we will try to return a
- * List<TypeInfo> with the specified size by repeating the element of the array
- * at the end.
- * In case the size is smaller than the minimum possible number of arguments
- * for the method, null will be returned.
+ *
+ * @param size
+ * In case the last parameter of Method is an array, we will try to
+ * return a List<TypeInfo> with the specified size by repeating the
+ * element of the array at the end. In case the size is smaller than
+ * the minimum possible number of arguments for the method, null will
+ * be returned.
*/
public static List<TypeInfo> getParameterTypeInfos(Method m, int size) {
Type[] methodParameterTypes = m.getGenericParameterTypes();
-
+
// Whether the method takes variable-length arguments
- // Whether the method takes an array like Object[],
+ // Whether the method takes an array like Object[],
// or String[] etc in the last argument.
- Type lastParaElementType = TypeInfoUtils.getArrayElementType(
- methodParameterTypes.length == 0 ? null :
- methodParameterTypes[methodParameterTypes.length-1]);
+ Type lastParaElementType = TypeInfoUtils
+ .getArrayElementType(methodParameterTypes.length == 0 ? null
+ : methodParameterTypes[methodParameterTypes.length - 1]);
boolean isVariableLengthArgument = (lastParaElementType != null);
-
+
List<TypeInfo> typeInfos = null;
if (!isVariableLengthArgument) {
// Normal case, no variable-length arguments
@@ -137,8 +147,8 @@
return null;
}
typeInfos = new ArrayList<TypeInfo>(methodParameterTypes.length);
- for (int i = 0; i < methodParameterTypes.length; i++) {
- typeInfos.add(getExtendedTypeInfoFromJavaType(methodParameterTypes[i], m));
+ for (Type methodParameterType : methodParameterTypes) {
+ typeInfos.add(getExtendedTypeInfoFromJavaType(methodParameterType, m));
}
} else {
// Variable-length arguments
@@ -147,7 +157,8 @@
}
typeInfos = new ArrayList<TypeInfo>(size);
for (int i = 0; i < methodParameterTypes.length - 1; i++) {
- typeInfos.add(getExtendedTypeInfoFromJavaType(methodParameterTypes[i], m));
+ typeInfos.add(getExtendedTypeInfoFromJavaType(methodParameterTypes[i],
+ m));
}
for (int i = methodParameterTypes.length - 1; i < size; i++) {
typeInfos.add(getExtendedTypeInfoFromJavaType(lastParaElementType, m));
@@ -155,46 +166,49 @@
}
return typeInfos;
}
+
/**
- * Parse a recursive TypeInfo list String.
- * For example, the following inputs are valid inputs:
- * "int,string,map<string,int>,list<map<int,list<string>>>,list<struct<a:int,b:string>>"
+ * Parse a recursive TypeInfo list String. For example, the following inputs
+ * are valid inputs:"int,string,map<string,int>,list<map<int,list<string>>>,list<struct<a:int,b:string>>"
* The separators between TypeInfos can be ",", ":", or ";".
*
- * In order to use this class:
- * TypeInfoParser parser = new TypeInfoParser("int,string");
- * ArrayList<TypeInfo> typeInfos = parser.parseTypeInfos();
+ * In order to use this class: TypeInfoParser parser = new
+ * TypeInfoParser("int,string"); ArrayList<TypeInfo> typeInfos =
+ * parser.parseTypeInfos();
*/
private static class TypeInfoParser {
-
+
private static class Token {
public int position;
public String text;
public boolean isType;
+
+ @Override
public String toString() {
return "" + position + ":" + text;
}
};
-
+
private static boolean isTypeChar(char c) {
return Character.isLetterOrDigit(c) || c == '_' || c == '.';
}
-
+
/**
- * Tokenize the typeInfoString.
- * The rule is simple: all consecutive alphadigits and '_', '.' are in one
- * token, and all other characters are one character per token.
+ * Tokenize the typeInfoString. The rule is simple: all consecutive
+ * alphadigits and '_', '.' are in one token, and all other characters are
+ * one character per token.
*
- * tokenize("map<int,string>") should return ["map","<","int",",","string",">"]
+ * tokenize("map<int,string>") should return
+ * ["map","<","int",",","string",">"]
*/
private static ArrayList<Token> tokenize(String typeInfoString) {
ArrayList<Token> tokens = new ArrayList<Token>(0);
int begin = 0;
int end = 1;
while (end <= typeInfoString.length()) {
- // last character ends a token?
- if (end == typeInfoString.length()
- || !isTypeChar(typeInfoString.charAt(end-1))
+ // last character ends a token?
+ if (end == typeInfoString.length()
+ || !isTypeChar(typeInfoString.charAt(end - 1))
|| !isTypeChar(typeInfoString.charAt(end))) {
Token t = new Token();
t.position = begin;
@@ -202,22 +216,22 @@
t.isType = isTypeChar(typeInfoString.charAt(begin));
tokens.add(t);
begin = end;
- }
- end ++;
+ }
+ end++;
}
return tokens;
}
-
+
public TypeInfoParser(String typeInfoString) {
this.typeInfoString = typeInfoString;
- this.typeInfoTokens = tokenize(typeInfoString);
+ typeInfoTokens = tokenize(typeInfoString);
}
-
- private String typeInfoString;
- private ArrayList<Token> typeInfoTokens;
+
+ private final String typeInfoString;
+ private final ArrayList<Token> typeInfoTokens;
private ArrayList<TypeInfo> typeInfos;
private int iToken;
-
+
public ArrayList<TypeInfo> parseTypeInfos() throws IllegalArgumentException {
typeInfos = new ArrayList<TypeInfo>();
iToken = 0;
@@ -225,61 +239,70 @@
typeInfos.add(parseType());
if (iToken < typeInfoTokens.size()) {
Token separator = typeInfoTokens.get(iToken);
- if (",".equals(separator.text) || ";".equals(separator.text) || ":".equals(separator.text)) {
- iToken ++;
+ if (",".equals(separator.text) || ";".equals(separator.text)
+ || ":".equals(separator.text)) {
+ iToken++;
} else {
- throw new IllegalArgumentException("Error: ',', ':', or ';' expected at position "
- + separator.position + " from '" + typeInfoString + "' " + typeInfoTokens );
+ throw new IllegalArgumentException(
+ "Error: ',', ':', or ';' expected at position "
+ + separator.position + " from '" + typeInfoString + "' "
+ + typeInfoTokens);
}
}
}
return typeInfos;
}
-
+
private Token expect(String item) {
return expect(item, null);
}
-
+
private Token expect(String item, String alternative) {
if (iToken >= typeInfoTokens.size()) {
- throw new IllegalArgumentException("Error: " + item + " expected at the end of '"
- + typeInfoString + "'" );
+ throw new IllegalArgumentException("Error: " + item
+ + " expected at the end of '" + typeInfoString + "'");
}
Token t = typeInfoTokens.get(iToken);
if (item.equals("type")) {
if (!Constants.LIST_TYPE_NAME.equals(t.text)
&& !Constants.MAP_TYPE_NAME.equals(t.text)
&& !Constants.STRUCT_TYPE_NAME.equals(t.text)
- && null == PrimitiveObjectInspectorUtils.getTypeEntryFromTypeName(t.text)
+ && null == PrimitiveObjectInspectorUtils
+ .getTypeEntryFromTypeName(t.text)
&& !t.text.equals(alternative)) {
- throw new IllegalArgumentException("Error: " + item + " expected at the position "
- + t.position + " of '" + typeInfoString + "' but '" + t.text + "' is found." );
+ throw new IllegalArgumentException("Error: " + item
+ + " expected at the position " + t.position + " of '"
+ + typeInfoString + "' but '" + t.text + "' is found.");
}
} else if (item.equals("name")) {
if (!t.isType && !t.text.equals(alternative)) {
- throw new IllegalArgumentException("Error: " + item + " expected at the position "
- + t.position + " of '" + typeInfoString + "' but '" + t.text + "' is found." );
+ throw new IllegalArgumentException("Error: " + item
+ + " expected at the position " + t.position + " of '"
+ + typeInfoString + "' but '" + t.text + "' is found.");
}
} else {
if (!item.equals(t.text) && !t.text.equals(alternative)) {
- throw new IllegalArgumentException("Error: " + item + " expected at the position "
- + t.position + " of '" + typeInfoString + "' but '" + t.text + "' is found." );
+ throw new IllegalArgumentException("Error: " + item
+ + " expected at the position " + t.position + " of '"
+ + typeInfoString + "' but '" + t.text + "' is found.");
}
}
- iToken ++;
+ iToken++;
return t;
}
-
+
private TypeInfo parseType() {
-
+
Token t = expect("type");
-
+
// Is this a primitive type?
- PrimitiveTypeEntry primitiveType = PrimitiveObjectInspectorUtils.getTypeEntryFromTypeName(t.text);
- if (primitiveType != null && !primitiveType.primitiveCategory.equals(PrimitiveCategory.UNKNOWN)) {
+ PrimitiveTypeEntry primitiveType = PrimitiveObjectInspectorUtils
+ .getTypeEntryFromTypeName(t.text);
+ if (primitiveType != null
+ && !primitiveType.primitiveCategory.equals(PrimitiveCategory.UNKNOWN)) {
return TypeInfoFactory.getPrimitiveTypeInfo(primitiveType.typeName);
}
-
+
// Is this a list type?
if (Constants.LIST_TYPE_NAME.equals(t.text)) {
expect("<");
@@ -287,7 +310,7 @@
expect(">");
return TypeInfoFactory.getListTypeInfo(listElementType);
}
-
+
// Is this a map type?
if (Constants.MAP_TYPE_NAME.equals(t.text)) {
expect("<");
@@ -297,7 +320,7 @@
expect(">");
return TypeInfoFactory.getMapTypeInfo(mapKeyType, mapValueType);
}
-
+
// Is this a struct type?
if (Constants.STRUCT_TYPE_NAME.equals(t.text)) {
ArrayList<String> fieldNames = new ArrayList<String>();
@@ -319,164 +342,190 @@
expect(":");
fieldTypeInfos.add(parseType());
} while (true);
-
+
return TypeInfoFactory.getStructTypeInfo(fieldNames, fieldTypeInfos);
}
-
- throw new RuntimeException("Internal error parsing position " + t.position + " of '"
- + typeInfoString + "'");
+
+ throw new RuntimeException("Internal error parsing position "
+ + t.position + " of '" + typeInfoString + "'");
}
-
+
}
static HashMap<TypeInfo, ObjectInspector> cachedStandardObjectInspector = new HashMap<TypeInfo, ObjectInspector>();
+
/**
- * Returns the standard object inspector that can be used to translate an object of that typeInfo
- * to a standard object type.
+ * Returns the standard object inspector that can be used to translate an
+ * object of that typeInfo to a standard object type.
*/
- public static ObjectInspector getStandardWritableObjectInspectorFromTypeInfo(TypeInfo typeInfo) {
+ public static ObjectInspector getStandardWritableObjectInspectorFromTypeInfo(
+ TypeInfo typeInfo) {
ObjectInspector result = cachedStandardObjectInspector.get(typeInfo);
if (result == null) {
- switch(typeInfo.getCategory()) {
- case PRIMITIVE: {
- result = PrimitiveObjectInspectorFactory.getPrimitiveWritableObjectInspector(
- ((PrimitiveTypeInfo)typeInfo).getPrimitiveCategory());
- break;
- }
- case LIST: {
- ObjectInspector elementObjectInspector = getStandardWritableObjectInspectorFromTypeInfo(
- ((ListTypeInfo)typeInfo).getListElementTypeInfo());
- result = ObjectInspectorFactory.getStandardListObjectInspector(elementObjectInspector);
- break;
- }
- case MAP: {
- MapTypeInfo mapTypeInfo = (MapTypeInfo)typeInfo;
- ObjectInspector keyObjectInspector = getStandardWritableObjectInspectorFromTypeInfo(mapTypeInfo.getMapKeyTypeInfo());
- ObjectInspector valueObjectInspector = getStandardWritableObjectInspectorFromTypeInfo(mapTypeInfo.getMapValueTypeInfo());
- result = ObjectInspectorFactory.getStandardMapObjectInspector(keyObjectInspector, valueObjectInspector);
- break;
- }
- case STRUCT: {
- StructTypeInfo structTypeInfo = (StructTypeInfo)typeInfo;
- List<String> fieldNames = structTypeInfo.getAllStructFieldNames();
- List<TypeInfo> fieldTypeInfos = structTypeInfo.getAllStructFieldTypeInfos();
- List<ObjectInspector> fieldObjectInspectors = new ArrayList<ObjectInspector>(fieldTypeInfos.size());
- for(int i=0; i<fieldTypeInfos.size(); i++) {
- fieldObjectInspectors.add(getStandardWritableObjectInspectorFromTypeInfo(fieldTypeInfos.get(i)));
- }
- result = ObjectInspectorFactory.getStandardStructObjectInspector(fieldNames, fieldObjectInspectors);
- break;
- }
- default: {
- result = null;
+ switch (typeInfo.getCategory()) {
+ case PRIMITIVE: {
+ result = PrimitiveObjectInspectorFactory
+ .getPrimitiveWritableObjectInspector(((PrimitiveTypeInfo) typeInfo)
+ .getPrimitiveCategory());
+ break;
+ }
+ case LIST: {
+ ObjectInspector elementObjectInspector = getStandardWritableObjectInspectorFromTypeInfo(((ListTypeInfo) typeInfo)
+ .getListElementTypeInfo());
+ result = ObjectInspectorFactory
+ .getStandardListObjectInspector(elementObjectInspector);
+ break;
+ }
+ case MAP: {
+ MapTypeInfo mapTypeInfo = (MapTypeInfo) typeInfo;
+ ObjectInspector keyObjectInspector = getStandardWritableObjectInspectorFromTypeInfo(mapTypeInfo
+ .getMapKeyTypeInfo());
+ ObjectInspector valueObjectInspector = getStandardWritableObjectInspectorFromTypeInfo(mapTypeInfo
+ .getMapValueTypeInfo());
+ result = ObjectInspectorFactory.getStandardMapObjectInspector(
+ keyObjectInspector, valueObjectInspector);
+ break;
+ }
+ case STRUCT: {
+ StructTypeInfo structTypeInfo = (StructTypeInfo) typeInfo;
+ List<String> fieldNames = structTypeInfo.getAllStructFieldNames();
+ List<TypeInfo> fieldTypeInfos = structTypeInfo
+ .getAllStructFieldTypeInfos();
+ List<ObjectInspector> fieldObjectInspectors = new ArrayList<ObjectInspector>(
+ fieldTypeInfos.size());
+ for (int i = 0; i < fieldTypeInfos.size(); i++) {
+ fieldObjectInspectors
+ .add(getStandardWritableObjectInspectorFromTypeInfo(fieldTypeInfos
+ .get(i)));
}
+ result = ObjectInspectorFactory.getStandardStructObjectInspector(
+ fieldNames, fieldObjectInspectors);
+ break;
+ }
+ default: {
+ result = null;
+ }
}
cachedStandardObjectInspector.put(typeInfo, result);
}
return result;
}
-
-
static HashMap<TypeInfo, ObjectInspector> cachedStandardJavaObjectInspector = new HashMap<TypeInfo, ObjectInspector>();
+
/**
- * Returns the standard object inspector that can be used to translate an object of that typeInfo
- * to a standard object type.
+ * Returns the standard object inspector that can be used to translate an
+ * object of that typeInfo to a standard object type.
*/
- public static ObjectInspector getStandardJavaObjectInspectorFromTypeInfo(TypeInfo typeInfo) {
+ public static ObjectInspector getStandardJavaObjectInspectorFromTypeInfo(
+ TypeInfo typeInfo) {
ObjectInspector result = cachedStandardJavaObjectInspector.get(typeInfo);
if (result == null) {
- switch(typeInfo.getCategory()) {
- case PRIMITIVE: {
- // NOTE: we use JavaPrimitiveObjectInspector instead of StandardPrimitiveObjectInspector
- result = PrimitiveObjectInspectorFactory.getPrimitiveJavaObjectInspector(
- PrimitiveObjectInspectorUtils.getTypeEntryFromTypeName(typeInfo.getTypeName()).primitiveCategory);
- break;
- }
- case LIST: {
- ObjectInspector elementObjectInspector = getStandardJavaObjectInspectorFromTypeInfo(
- ((ListTypeInfo)typeInfo).getListElementTypeInfo());
- result = ObjectInspectorFactory.getStandardListObjectInspector(elementObjectInspector);
- break;
- }
- case MAP: {
- MapTypeInfo mapTypeInfo = (MapTypeInfo)typeInfo;
- ObjectInspector keyObjectInspector = getStandardJavaObjectInspectorFromTypeInfo(mapTypeInfo.getMapKeyTypeInfo());
- ObjectInspector valueObjectInspector = getStandardJavaObjectInspectorFromTypeInfo(mapTypeInfo.getMapValueTypeInfo());
- result = ObjectInspectorFactory.getStandardMapObjectInspector(keyObjectInspector, valueObjectInspector);
- break;
- }
- case STRUCT: {
- StructTypeInfo strucTypeInfo = (StructTypeInfo)typeInfo;
- List<String> fieldNames = strucTypeInfo.getAllStructFieldNames();
- List<TypeInfo> fieldTypeInfos = strucTypeInfo.getAllStructFieldTypeInfos();
- List<ObjectInspector> fieldObjectInspectors = new ArrayList<ObjectInspector>(fieldTypeInfos.size());
- for(int i=0; i<fieldTypeInfos.size(); i++) {
- fieldObjectInspectors.add(getStandardJavaObjectInspectorFromTypeInfo(fieldTypeInfos.get(i)));
- }
- result = ObjectInspectorFactory.getStandardStructObjectInspector(fieldNames, fieldObjectInspectors);
- break;
- }
- default: {
- result = null;
- }
- }
- cachedStandardJavaObjectInspector.put(typeInfo, result);
- }
- return result;
- }
-
- /**
- * Get the TypeInfo object from the ObjectInspector object by recursively going into the
- * ObjectInspector structure.
- */
- public static TypeInfo getTypeInfoFromObjectInspector(ObjectInspector oi) {
-// OPTIMIZATION for later.
-// if (oi instanceof TypeInfoBasedObjectInspector) {
-// TypeInfoBasedObjectInspector typeInfoBasedObjectInspector = (ObjectInspector)oi;
-// return typeInfoBasedObjectInspector.getTypeInfo();
-// }
-
- // Recursively going into ObjectInspector structure
- TypeInfo result = null;
- switch (oi.getCategory()) {
+ switch (typeInfo.getCategory()) {
case PRIMITIVE: {
- PrimitiveObjectInspector poi =(PrimitiveObjectInspector)oi;
- result = TypeInfoFactory.getPrimitiveTypeInfo(poi.getTypeName());
+ // NOTE: we use JavaPrimitiveObjectInspector instead of
+ // StandardPrimitiveObjectInspector
+ result = PrimitiveObjectInspectorFactory
+ .getPrimitiveJavaObjectInspector(PrimitiveObjectInspectorUtils
+ .getTypeEntryFromTypeName(typeInfo.getTypeName()).primitiveCategory);
break;
}
case LIST: {
- ListObjectInspector loi = (ListObjectInspector)oi;
- result = TypeInfoFactory.getListTypeInfo(
- getTypeInfoFromObjectInspector(loi.getListElementObjectInspector()));
+ ObjectInspector elementObjectInspector = getStandardJavaObjectInspectorFromTypeInfo(((ListTypeInfo) typeInfo)
+ .getListElementTypeInfo());
+ result = ObjectInspectorFactory
+ .getStandardListObjectInspector(elementObjectInspector);
break;
}
case MAP: {
- MapObjectInspector moi = (MapObjectInspector)oi;
- result = TypeInfoFactory.getMapTypeInfo(
- getTypeInfoFromObjectInspector(moi.getMapKeyObjectInspector()),
- getTypeInfoFromObjectInspector(moi.getMapValueObjectInspector()));
+ MapTypeInfo mapTypeInfo = (MapTypeInfo) typeInfo;
+ ObjectInspector keyObjectInspector = getStandardJavaObjectInspectorFromTypeInfo(mapTypeInfo
+ .getMapKeyTypeInfo());
+ ObjectInspector valueObjectInspector = getStandardJavaObjectInspectorFromTypeInfo(mapTypeInfo
+ .getMapValueTypeInfo());
+ result = ObjectInspectorFactory.getStandardMapObjectInspector(
+ keyObjectInspector, valueObjectInspector);
break;
}
case STRUCT: {
- StructObjectInspector soi = (StructObjectInspector)oi;
- List<? extends StructField> fields = soi.getAllStructFieldRefs();
- List<String> fieldNames = new ArrayList<String>(fields.size());
- List<TypeInfo> fieldTypeInfos = new ArrayList<TypeInfo>(fields.size());
- for(StructField f : fields) {
- fieldNames.add(f.getFieldName());
- fieldTypeInfos.add(getTypeInfoFromObjectInspector(f.getFieldObjectInspector()));
+ StructTypeInfo strucTypeInfo = (StructTypeInfo) typeInfo;
+ List<String> fieldNames = strucTypeInfo.getAllStructFieldNames();
+ List<TypeInfo> fieldTypeInfos = strucTypeInfo
+ .getAllStructFieldTypeInfos();
+ List<ObjectInspector> fieldObjectInspectors = new ArrayList<ObjectInspector>(
+ fieldTypeInfos.size());
+ for (int i = 0; i < fieldTypeInfos.size(); i++) {
+ fieldObjectInspectors
+ .add(getStandardJavaObjectInspectorFromTypeInfo(fieldTypeInfos
+ .get(i)));
}
- result = TypeInfoFactory.getStructTypeInfo(fieldNames, fieldTypeInfos);
+ result = ObjectInspectorFactory.getStandardStructObjectInspector(
+ fieldNames, fieldObjectInspectors);
break;
}
default: {
- throw new RuntimeException("Unknown ObjectInspector category!");
+ result = null;
+ }
+ }
+ cachedStandardJavaObjectInspector.put(typeInfo, result);
+ }
+ return result;
+ }
+
+ /**
+ * Get the TypeInfo object from the ObjectInspector object by recursively
+ * going into the ObjectInspector structure.
+ */
+ public static TypeInfo getTypeInfoFromObjectInspector(ObjectInspector oi) {
+ // OPTIMIZATION for later.
+ // if (oi instanceof TypeInfoBasedObjectInspector) {
+ // TypeInfoBasedObjectInspector typeInfoBasedObjectInspector =
+ // (ObjectInspector)oi;
+ // return typeInfoBasedObjectInspector.getTypeInfo();
+ // }
+
+ // Recursively going into ObjectInspector structure
+ TypeInfo result = null;
+ switch (oi.getCategory()) {
+ case PRIMITIVE: {
+ PrimitiveObjectInspector poi = (PrimitiveObjectInspector) oi;
+ result = TypeInfoFactory.getPrimitiveTypeInfo(poi.getTypeName());
+ break;
+ }
+ case LIST: {
+ ListObjectInspector loi = (ListObjectInspector) oi;
+ result = TypeInfoFactory
+ .getListTypeInfo(getTypeInfoFromObjectInspector(loi
+ .getListElementObjectInspector()));
+ break;
+ }
+ case MAP: {
+ MapObjectInspector moi = (MapObjectInspector) oi;
+ result = TypeInfoFactory.getMapTypeInfo(
+ getTypeInfoFromObjectInspector(moi.getMapKeyObjectInspector()),
+ getTypeInfoFromObjectInspector(moi.getMapValueObjectInspector()));
+ break;
+ }
+ case STRUCT: {
+ StructObjectInspector soi = (StructObjectInspector) oi;
+ List<? extends StructField> fields = soi.getAllStructFieldRefs();
+ List<String> fieldNames = new ArrayList<String>(fields.size());
+ List<TypeInfo> fieldTypeInfos = new ArrayList<TypeInfo>(fields.size());
+ for (StructField f : fields) {
+ fieldNames.add(f.getFieldName());
+ fieldTypeInfos.add(getTypeInfoFromObjectInspector(f
+ .getFieldObjectInspector()));
}
+ result = TypeInfoFactory.getStructTypeInfo(fieldNames, fieldTypeInfos);
+ break;
+ }
+ default: {
+ throw new RuntimeException("Unknown ObjectInspector category!");
+ }
}
return result;
}
-
+
public static ArrayList<TypeInfo> getTypeInfosFromTypeString(String typeString) {
TypeInfoParser parser = new TypeInfoParser(typeString);
return parser.parseTypeInfos();
Modified: hadoop/hive/trunk/serde/src/test/org/apache/hadoop/hive/serde2/TestTCTLSeparatedProtocol.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/serde/src/test/org/apache/hadoop/hive/serde2/TestTCTLSeparatedProtocol.java?rev=901625&r1=901624&r2=901625&view=diff
==============================================================================
--- hadoop/hive/trunk/serde/src/test/org/apache/hadoop/hive/serde2/TestTCTLSeparatedProtocol.java (original)
+++ hadoop/hive/trunk/serde/src/test/org/apache/hadoop/hive/serde2/TestTCTLSeparatedProtocol.java Thu Jan 21 09:52:44 2010
@@ -18,7 +18,6 @@
package org.apache.hadoop.hive.serde2;
-
import java.util.Properties;
import junit.framework.TestCase;
@@ -26,7 +25,6 @@
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hive.serde.Constants;
import org.apache.hadoop.hive.serde2.thrift.TCTLSeparatedProtocol;
-
import org.apache.thrift.protocol.TField;
import org.apache.thrift.protocol.TList;
import org.apache.thrift.protocol.TMap;
@@ -44,14 +42,13 @@
String bar = "World!";
String key = "22";
- String value = "TheValue";
+ String value = "TheValue";
String key2 = "24";
- String value2 = "TheValueAgain";
-
- byte columnSeparator [] = { 1 };
- byte elementSeparator [] = { 2 };
- byte kvSeparator [] = { 3 };
+ String value2 = "TheValueAgain";
+ byte columnSeparator[] = { 1 };
+ byte elementSeparator[] = { 2 };
+ byte kvSeparator[] = { 3 };
trans.write(foo.getBytes(), 0, foo.getBytes().length);
trans.write(columnSeparator, 0, 1);
@@ -61,19 +58,17 @@
trans.write(bar.getBytes(), 0, bar.getBytes().length);
trans.write(columnSeparator, 0, 1);
- trans.write(key.getBytes(), 0, key.getBytes().length);
+ trans.write(key.getBytes(), 0, key.getBytes().length);
trans.write(kvSeparator, 0, 1);
trans.write(value.getBytes(), 0, value.getBytes().length);
trans.write(elementSeparator, 0, 1);
- trans.write(key2.getBytes(), 0, key2.getBytes().length);
+ trans.write(key2.getBytes(), 0, key2.getBytes().length);
trans.write(kvSeparator, 0, 1);
trans.write(value2.getBytes(), 0, value2.getBytes().length);
-
trans.flush();
-
// use 3 as the row buffer size to force lots of re-buffering.
TCTLSeparatedProtocol prot = new TCTLSeparatedProtocol(trans, 1024);
prot.initialize(new Configuration(), new Properties());
@@ -113,7 +108,6 @@
prot.readStructEnd();
}
-
public void testWrites() throws Exception {
TMemoryBuffer trans = new TMemoryBuffer(1024);
TCTLSeparatedProtocol prot = new TCTLSeparatedProtocol(trans, 1024);
@@ -152,15 +146,14 @@
prot.writeListEnd();
prot.writeFieldEnd();
-
prot.writeFieldBegin(new TField());
prot.writeString("bye!");
prot.writeFieldEnd();
prot.writeStructEnd();
trans.flush();
- byte b[] = new byte[3*1024];
- int len = trans.read(b,0,b.length);
+ byte b[] = new byte[3 * 1024];
+ int len = trans.read(b, 0, b.length);
String test = new String(b, 0, len);
String testRef = "100348.55234.22hello world!key1val1key2val2key3val3elem1elem2bye!";
@@ -175,7 +168,7 @@
prot = new TCTLSeparatedProtocol(trans, 10);
prot.initialize(new Configuration(), new Properties());
-
+
// 100 is the start
prot.readStructBegin();
prot.readFieldBegin();
@@ -265,11 +258,10 @@
trans.flush();
byte b[] = new byte[4096];
- int len = trans.read(b,0,b.length);
-
+ int len = trans.read(b, 0, b.length);
trans = new TMemoryBuffer(4096);
- trans.write(b,0,len);
+ trans.write(b, 0, len);
prot = new TCTLSeparatedProtocol(trans, 1024);
prot.initialize(new Configuration(), schema);
@@ -278,11 +270,10 @@
final String firstRead = prot.readString();
prot.readFieldEnd();
- testStr = testStr.replace("\"","");
+ testStr = testStr.replace("\"", "");
assertEquals(testStr, firstRead);
-
// the 2 element list
prot.readFieldBegin();
TList l = prot.readListBegin();
@@ -305,10 +296,10 @@
prot.readStructEnd();
}
-
/**
- * Tests a sample apache log format. This is actually better done in general with a more TRegexLike protocol, but for this
- * case, TCTLSeparatedProtocol can do it.
+ * Tests a sample apache log format. This is actually better done in general
+ * with a more TRegexLike protocol, but for this case, TCTLSeparatedProtocol
+ * can do it.
*/
public void test1ApacheLogFormat() throws Exception {
final String sample = "127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] \"GET /apache_pb.gif HTTP/1.0\" 200 2326";
@@ -320,7 +311,8 @@
TCTLSeparatedProtocol prot = new TCTLSeparatedProtocol(trans, 4096);
Properties schema = new Properties();
- // this is a hacky way of doing the quotes since it will match any 2 of these, so
+ // this is a hacky way of doing the quotes since it will match any 2 of
+ // these, so
// "[ hello this is something to split [" would be considered to be quoted.
schema.setProperty(Constants.QUOTE_CHAR, "(\"|\\[|\\])");
@@ -337,42 +329,42 @@
assertEquals("127.0.0.1", ip);
- // identd
+ // identd
prot.readFieldBegin();
final String identd = prot.readString();
prot.readFieldEnd();
assertNull(identd);
- // user
+ // user
prot.readFieldBegin();
final String user = prot.readString();
prot.readFieldEnd();
- assertEquals("frank",user);
+ assertEquals("frank", user);
- // finishTime
+ // finishTime
prot.readFieldBegin();
final String finishTime = prot.readString();
prot.readFieldEnd();
- assertEquals("10/Oct/2000:13:55:36 -0700",finishTime);
+ assertEquals("10/Oct/2000:13:55:36 -0700", finishTime);
- // requestLine
+ // requestLine
prot.readFieldBegin();
final String requestLine = prot.readString();
prot.readFieldEnd();
- assertEquals("GET /apache_pb.gif HTTP/1.0",requestLine);
+ assertEquals("GET /apache_pb.gif HTTP/1.0", requestLine);
- // returncode
+ // returncode
prot.readFieldBegin();
final int returnCode = prot.readI32();
prot.readFieldEnd();
assertEquals(200, returnCode);
- // return size
+ // return size
prot.readFieldBegin();
final int returnSize = prot.readI32();
prot.readFieldEnd();
@@ -382,8 +374,6 @@
prot.readStructEnd();
}
-
-
public void testNulls() throws Exception {
TMemoryBuffer trans = new TMemoryBuffer(1024);
TCTLSeparatedProtocol prot = new TCTLSeparatedProtocol(trans, 10);
@@ -420,9 +410,9 @@
prot.writeStructEnd();
- byte b[] = new byte[3*1024];
- int len = trans.read(b,0,b.length);
- String written = new String(b,0,len);
+ byte b[] = new byte[3 * 1024];
+ int len = trans.read(b, 0, b.length);
+ String written = new String(b, 0, len);
String testRef = "\\N\\N100\\N\\N\\Nkey2\\N\\Nval3";
@@ -433,7 +423,7 @@
prot = new TCTLSeparatedProtocol(trans, 3);
prot.initialize(new Configuration(), new Properties());
-
+
prot.readStructBegin();
prot.readFieldBegin();
@@ -445,7 +435,7 @@
prot.readFieldBegin();
ret = prot.readString();
prot.readFieldEnd();
-
+
assertNull(ret);
prot.readFieldBegin();
@@ -454,13 +444,12 @@
assertTrue(ret1 == 100);
-
prot.readFieldBegin();
ret1 = prot.readI32();
prot.readFieldEnd();
prot.readFieldBegin();
- TMap map = prot.readMapBegin();
+ TMap map = prot.readMapBegin();
assertTrue(map.size == 3);
@@ -472,7 +461,7 @@
assertNull(prot.readString());
assertTrue(prot.readString().equals("val3"));
-
+
prot.readMapEnd();
prot.readFieldEnd();
Modified: hadoop/hive/trunk/serde/src/test/org/apache/hadoop/hive/serde2/binarysortable/MyTestClass.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/serde/src/test/org/apache/hadoop/hive/serde2/binarysortable/MyTestClass.java?rev=901625&r1=901624&r2=901625&view=diff
==============================================================================
--- hadoop/hive/trunk/serde/src/test/org/apache/hadoop/hive/serde2/binarysortable/MyTestClass.java (original)
+++ hadoop/hive/trunk/serde/src/test/org/apache/hadoop/hive/serde2/binarysortable/MyTestClass.java Thu Jan 21 09:52:44 2010
@@ -29,21 +29,20 @@
String myString;
MyTestInnerStruct myStruct;
List<Integer> myList;
-
- public MyTestClass() {
+
+ public MyTestClass() {
}
-
- public MyTestClass(Byte b, Short s, Integer i, Long l,
- Float f, Double d, String st, MyTestInnerStruct is,
- List<Integer> li) {
- this.myByte = b;
- this.myShort = s;
- this.myInt = i;
- this.myLong = l;
- this.myFloat = f;
- this.myDouble = d;
- this.myString = st;
- this.myStruct = is;
- this.myList = li;
+
+ public MyTestClass(Byte b, Short s, Integer i, Long l, Float f, Double d,
+ String st, MyTestInnerStruct is, List<Integer> li) {
+ myByte = b;
+ myShort = s;
+ myInt = i;
+ myLong = l;
+ myFloat = f;
+ myDouble = d;
+ myString = st;
+ myStruct = is;
+ myList = li;
}
}
Modified: hadoop/hive/trunk/serde/src/test/org/apache/hadoop/hive/serde2/binarysortable/MyTestInnerStruct.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/serde/src/test/org/apache/hadoop/hive/serde2/binarysortable/MyTestInnerStruct.java?rev=901625&r1=901624&r2=901625&view=diff
==============================================================================
--- hadoop/hive/trunk/serde/src/test/org/apache/hadoop/hive/serde2/binarysortable/MyTestInnerStruct.java (original)
+++ hadoop/hive/trunk/serde/src/test/org/apache/hadoop/hive/serde2/binarysortable/MyTestInnerStruct.java Thu Jan 21 09:52:44 2010
@@ -21,14 +21,13 @@
Integer int1;
Integer int2;
-
+
public MyTestInnerStruct() {
}
-
+
public MyTestInnerStruct(Integer int1, Integer int2) {
this.int1 = int1;
this.int2 = int2;
}
}
-
Modified: hadoop/hive/trunk/serde/src/test/org/apache/hadoop/hive/serde2/binarysortable/TestBinarySortableSerDe.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/serde/src/test/org/apache/hadoop/hive/serde2/binarysortable/TestBinarySortableSerDe.java?rev=901625&r1=901624&r2=901625&view=diff
==============================================================================
--- hadoop/hive/trunk/serde/src/test/org/apache/hadoop/hive/serde2/binarysortable/TestBinarySortableSerDe.java (original)
+++ hadoop/hive/trunk/serde/src/test/org/apache/hadoop/hive/serde2/binarysortable/TestBinarySortableSerDe.java Thu Jan 21 09:52:44 2010
@@ -23,6 +23,8 @@
import java.util.Properties;
import java.util.Random;
+import junit.framework.TestCase;
+
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hive.serde.Constants;
import org.apache.hadoop.hive.serde2.SerDe;
@@ -32,32 +34,30 @@
import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspectorUtils;
import org.apache.hadoop.hive.serde2.objectinspector.StructObjectInspector;
import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspectorFactory.ObjectInspectorOptions;
-
-import junit.framework.TestCase;
import org.apache.hadoop.io.BytesWritable;
-
public class TestBinarySortableSerDe extends TestCase {
- public static HashMap<String,String> makeHashMap(String... params) {
- HashMap<String,String> r = new HashMap<String,String>();
- for(int i=0; i<params.length; i+=2) {
- r.put(params[i], params[i+1]);
+ public static HashMap<String, String> makeHashMap(String... params) {
+ HashMap<String, String> r = new HashMap<String, String>();
+ for (int i = 0; i < params.length; i += 2) {
+ r.put(params[i], params[i + 1]);
}
return r;
}
public static String hexString(BytesWritable bytes) {
StringBuilder sb = new StringBuilder();
- for (int i=0; i<bytes.getSize(); i++) {
+ for (int i = 0; i < bytes.getSize(); i++) {
byte b = bytes.get()[i];
- int v = (b<0 ? 256 + b : b);
+ int v = (b < 0 ? 256 + b : b);
sb.append(String.format("x%02x", v));
}
return sb.toString();
}
- private SerDe getSerDe(String fieldNames, String fieldTypes, String order) throws Throwable {
+ private SerDe getSerDe(String fieldNames, String fieldTypes, String order)
+ throws Throwable {
Properties schema = new Properties();
schema.setProperty(Constants.LIST_COLUMNS, fieldNames);
schema.setProperty(Constants.LIST_COLUMN_TYPES, fieldTypes);
@@ -67,109 +67,125 @@
serde.initialize(new Configuration(), schema);
return serde;
}
-
- private void testBinarySortableSerDe(Object[] rows,
- ObjectInspector rowOI, SerDe serde, boolean ascending) throws Throwable{
-
+
+ private void testBinarySortableSerDe(Object[] rows, ObjectInspector rowOI,
+ SerDe serde, boolean ascending) throws Throwable {
+
ObjectInspector serdeOI = serde.getObjectInspector();
// Try to serialize
BytesWritable bytes[] = new BytesWritable[rows.length];
- for (int i=0; i<rows.length; i++) {
- BytesWritable s = (BytesWritable)serde.serialize(rows[i], rowOI);
+ for (int i = 0; i < rows.length; i++) {
+ BytesWritable s = (BytesWritable) serde.serialize(rows[i], rowOI);
bytes[i] = new BytesWritable();
bytes[i].set(s);
- if (i>0) {
- int compareResult = bytes[i-1].compareTo(bytes[i]);
- if ( (compareResult<0 && !ascending) || (compareResult>0 && ascending) ) {
- System.out.println("Test failed in " + (ascending ? "ascending" : "descending")
- + " order with " + (i-1) + " and " + i);
- System.out.println("serialized data [" + (i-1) + "] = " + hexString(bytes[i-1]));
- System.out.println("serialized data [" + i + "] = " + hexString(bytes[i]));
- System.out.println("deserialized data [" + (i-1) + " = " +
- SerDeUtils.getJSONString(rows[i-1], rowOI));
- System.out.println("deserialized data [" + i + " = " +
- SerDeUtils.getJSONString(rows[i], rowOI));
- fail("Sort order of serialized " + (i-1) + " and " + i + " are reversed!");
+ if (i > 0) {
+ int compareResult = bytes[i - 1].compareTo(bytes[i]);
+ if ((compareResult < 0 && !ascending)
+ || (compareResult > 0 && ascending)) {
+ System.out.println("Test failed in "
+ + (ascending ? "ascending" : "descending") + " order with "
+ + (i - 1) + " and " + i);
+ System.out.println("serialized data [" + (i - 1) + "] = "
+ + hexString(bytes[i - 1]));
+ System.out.println("serialized data [" + i + "] = "
+ + hexString(bytes[i]));
+ System.out.println("deserialized data [" + (i - 1) + " = "
+ + SerDeUtils.getJSONString(rows[i - 1], rowOI));
+ System.out.println("deserialized data [" + i + " = "
+ + SerDeUtils.getJSONString(rows[i], rowOI));
+ fail("Sort order of serialized " + (i - 1) + " and " + i
+ + " are reversed!");
}
}
}
// Try to deserialize
Object[] deserialized = new Object[rows.length];
- for (int i=0; i<rows.length; i++) {
+ for (int i = 0; i < rows.length; i++) {
deserialized[i] = serde.deserialize(bytes[i]);
- if (0 != ObjectInspectorUtils.compare(rows[i], rowOI, deserialized[i], serdeOI)) {
- System.out.println("structs[" + i + "] = " + SerDeUtils.getJSONString(rows[i], rowOI));
- System.out.println("deserialized[" + i + "] = " + SerDeUtils.getJSONString(deserialized[i], serdeOI));
+ if (0 != ObjectInspectorUtils.compare(rows[i], rowOI, deserialized[i],
+ serdeOI)) {
+ System.out.println("structs[" + i + "] = "
+ + SerDeUtils.getJSONString(rows[i], rowOI));
+ System.out.println("deserialized[" + i + "] = "
+ + SerDeUtils.getJSONString(deserialized[i], serdeOI));
System.out.println("serialized[" + i + "] = " + hexString(bytes[i]));
assertEquals(rows[i], deserialized[i]);
}
}
}
-
+
private void sort(Object[] structs, ObjectInspector oi) {
- for (int i=0; i<structs.length; i++) for (int j=i+1; j<structs.length; j++)
- if (ObjectInspectorUtils.compare(structs[i], oi, structs[j], oi)>0) {
- Object t = structs[i];
- structs[i] = structs[j];
- structs[j] = t;
+ for (int i = 0; i < structs.length; i++) {
+ for (int j = i + 1; j < structs.length; j++) {
+ if (ObjectInspectorUtils.compare(structs[i], oi, structs[j], oi) > 0) {
+ Object t = structs[i];
+ structs[i] = structs[j];
+ structs[j] = t;
+ }
}
- }
+ }
+ }
public static String getRandString(Random r) {
int length = r.nextInt(10);
StringBuilder sb = new StringBuilder();
- for(int i=0; i<length; i++) {
- sb.append((char)(r.nextInt(128)));
+ for (int i = 0; i < length; i++) {
+ sb.append((char) (r.nextInt(128)));
}
return sb.toString();
}
-
+
public static List<Integer> getRandIntegerArray(Random r) {
int length = r.nextInt(10);
ArrayList<Integer> result = new ArrayList<Integer>(length);
- for(int i=0; i<length; i++) {
- result.add((int)r.nextInt(128));
+ for (int i = 0; i < length; i++) {
+ result.add(r.nextInt(128));
}
return result;
}
-
+
public void testBinarySortableSerDe() throws Throwable {
try {
System.out.println("Beginning Test testBinarySortableSerDe:");
-
+
int num = 1000;
Random r = new Random(1234);
MyTestClass rows[] = new MyTestClass[num];
-
- for (int i=0; i<num; i++) {
+
+ for (int i = 0; i < num; i++) {
int randField = r.nextInt(10);
MyTestClass t = new MyTestClass();
- t.myByte = randField > 0 ? null : Byte.valueOf((byte)r.nextInt());
- t.myShort = randField > 1 ? null : Short.valueOf((short)r.nextInt());
+ t.myByte = randField > 0 ? null : Byte.valueOf((byte) r.nextInt());
+ t.myShort = randField > 1 ? null : Short.valueOf((short) r.nextInt());
t.myInt = randField > 2 ? null : Integer.valueOf(r.nextInt());
t.myLong = randField > 3 ? null : Long.valueOf(r.nextLong());
- t.myFloat = randField > 4 ? null : Float.valueOf(r.nextFloat() * 10 - 5);
- t.myDouble = randField > 5 ? null : Double.valueOf(r.nextDouble() * 10 - 5);
+ t.myFloat = randField > 4 ? null : Float
+ .valueOf(r.nextFloat() * 10 - 5);
+ t.myDouble = randField > 5 ? null : Double
+ .valueOf(r.nextDouble() * 10 - 5);
t.myString = randField > 6 ? null : getRandString(r);
- t.myStruct = randField > 7 ? null : new MyTestInnerStruct(r.nextInt(5)-2, r.nextInt(5)-2);
- t.myList = randField > 8 ? null: getRandIntegerArray(r);
+ t.myStruct = randField > 7 ? null : new MyTestInnerStruct(
+ r.nextInt(5) - 2, r.nextInt(5) - 2);
+ t.myList = randField > 8 ? null : getRandIntegerArray(r);
rows[i] = t;
}
- StructObjectInspector rowOI = (StructObjectInspector)ObjectInspectorFactory
- .getReflectionObjectInspector(MyTestClass.class,
- ObjectInspectorOptions.JAVA);
+ StructObjectInspector rowOI = (StructObjectInspector) ObjectInspectorFactory
+ .getReflectionObjectInspector(MyTestClass.class,
+ ObjectInspectorOptions.JAVA);
sort(rows, rowOI);
-
+
String fieldNames = ObjectInspectorUtils.getFieldNames(rowOI);
String fieldTypes = ObjectInspectorUtils.getFieldTypes(rowOI);
-
- testBinarySortableSerDe(rows, rowOI, getSerDe(fieldNames, fieldTypes, "++++++++++"), true);
- testBinarySortableSerDe(rows, rowOI, getSerDe(fieldNames, fieldTypes, "----------"), false);
-
+
+ testBinarySortableSerDe(rows, rowOI, getSerDe(fieldNames, fieldTypes,
+ "++++++++++"), true);
+ testBinarySortableSerDe(rows, rowOI, getSerDe(fieldNames, fieldTypes,
+ "----------"), false);
+
System.out.println("Test testTBinarySortableProtocol passed!");
} catch (Throwable e) {
e.printStackTrace();
@@ -177,6 +193,4 @@
}
}
-
-
}