You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by na...@apache.org on 2009/08/14 09:48:09 UTC
svn commit: r804106 [24/24] - in /hadoop/hive/trunk: ./
contrib/src/java/org/apache/hadoop/hive/contrib/udaf/
contrib/src/java/org/apache/hadoop/hive/contrib/udaf/example/
contrib/src/java/org/apache/hadoop/hive/contrib/udf/
contrib/src/java/org/apache...
Modified: hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/PrimitiveObjectInspectorConverter.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/PrimitiveObjectInspectorConverter.java?rev=804106&r1=804105&r2=804106&view=diff
==============================================================================
--- hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/PrimitiveObjectInspectorConverter.java (original)
+++ hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/PrimitiveObjectInspectorConverter.java Fri Aug 14 07:48:02 2009
@@ -42,13 +42,12 @@
}
@Override
- public Object convert(Object o) {
- if (o == null) {
+ public Object convert(Object input) {
+ if (input == null) {
return null;
}
try {
- outputOI.set(r, PrimitiveObjectInspectorUtils.getBoolean(o, inputOI));
- return r;
+ return outputOI.set(r, PrimitiveObjectInspectorUtils.getBoolean(input, inputOI));
} catch (NumberFormatException e) {
return null;
}
@@ -70,13 +69,12 @@
}
@Override
- public Object convert(Object o) {
- if (o == null) {
+ public Object convert(Object input) {
+ if (input == null) {
return null;
}
try {
- outputOI.set(r, PrimitiveObjectInspectorUtils.getByte(o, inputOI));
- return r;
+ return outputOI.set(r, PrimitiveObjectInspectorUtils.getByte(input, inputOI));
} catch (NumberFormatException e) {
return null;
}
@@ -98,13 +96,12 @@
}
@Override
- public Object convert(Object o) {
- if (o == null) {
+ public Object convert(Object input) {
+ if (input == null) {
return null;
}
try {
- outputOI.set(r, PrimitiveObjectInspectorUtils.getShort(o, inputOI));
- return r;
+ return outputOI.set(r, PrimitiveObjectInspectorUtils.getShort(input, inputOI));
} catch (NumberFormatException e) {
return null;
}
@@ -126,13 +123,12 @@
}
@Override
- public Object convert(Object o) {
- if (o == null) {
+ public Object convert(Object input) {
+ if (input == null) {
return null;
}
try {
- outputOI.set(r, PrimitiveObjectInspectorUtils.getInt(o, inputOI));
- return r;
+ return outputOI.set(r, PrimitiveObjectInspectorUtils.getInt(input, inputOI));
} catch (NumberFormatException e) {
return null;
}
@@ -154,13 +150,12 @@
}
@Override
- public Object convert(Object o) {
- if (o == null) {
+ public Object convert(Object input) {
+ if (input == null) {
return null;
}
try {
- outputOI.set(r, PrimitiveObjectInspectorUtils.getLong(o, inputOI));
- return r;
+ return outputOI.set(r, PrimitiveObjectInspectorUtils.getLong(input, inputOI));
} catch (NumberFormatException e) {
return null;
}
@@ -182,13 +177,12 @@
}
@Override
- public Object convert(Object o) {
- if (o == null) {
+ public Object convert(Object input) {
+ if (input == null) {
return null;
}
try {
- outputOI.set(r, PrimitiveObjectInspectorUtils.getFloat(o, inputOI));
- return r;
+ return outputOI.set(r, PrimitiveObjectInspectorUtils.getFloat(input, inputOI));
} catch (NumberFormatException e) {
return null;
}
@@ -210,13 +204,12 @@
}
@Override
- public Object convert(Object o) {
- if (o == null) {
+ public Object convert(Object input) {
+ if (input == null) {
return null;
}
try {
- outputOI.set(r, PrimitiveObjectInspectorUtils.getDouble(o, inputOI));
- return r;
+ return outputOI.set(r, PrimitiveObjectInspectorUtils.getDouble(input, inputOI));
} catch (NumberFormatException e) {
return null;
}
@@ -235,11 +228,12 @@
static byte[] falseBytes = {'F', 'A', 'L', 'S', 'E'};
public TextConverter(PrimitiveObjectInspector inputOI) {
+ // The output ObjectInspector is writableStringObjectInspector.
this.inputOI = inputOI;
}
- public Text convert(Object o) {
- if (o == null) {
+ public Text convert(Object input) {
+ if (input == null) {
return null;
}
@@ -248,43 +242,43 @@
return null;
}
case BOOLEAN: {
- t.set(((BooleanObjectInspector)inputOI).get(o) ? trueBytes : falseBytes);
+ t.set(((BooleanObjectInspector)inputOI).get(input) ? trueBytes : falseBytes);
return t;
}
case BYTE: {
out.reset();
- LazyInteger.writeUTF8NoException(out, ((ByteObjectInspector)inputOI).get(o));
+ LazyInteger.writeUTF8NoException(out, ((ByteObjectInspector)inputOI).get(input));
t.set(out.getData(), 0, out.getCount());
return t;
}
case SHORT: {
out.reset();
- LazyInteger.writeUTF8NoException(out, ((ShortObjectInspector)inputOI).get(o));
+ LazyInteger.writeUTF8NoException(out, ((ShortObjectInspector)inputOI).get(input));
t.set(out.getData(), 0, out.getCount());
return t;
}
case INT: {
out.reset();
- LazyInteger.writeUTF8NoException(out, ((IntObjectInspector)inputOI).get(o));
+ LazyInteger.writeUTF8NoException(out, ((IntObjectInspector)inputOI).get(input));
t.set(out.getData(), 0, out.getCount());
return t;
}
case LONG:{
out.reset();
- LazyLong.writeUTF8NoException(out, ((LongObjectInspector)inputOI).get(o));
+ LazyLong.writeUTF8NoException(out, ((LongObjectInspector)inputOI).get(input));
t.set(out.getData(), 0, out.getCount());
return t;
}
case FLOAT: {
- t.set(String.valueOf(((FloatObjectInspector)inputOI).get(o)));
+ t.set(String.valueOf(((FloatObjectInspector)inputOI).get(input)));
return t;
}
case DOUBLE: {
- t.set(String.valueOf(((DoubleObjectInspector)inputOI).get(o)));
+ t.set(String.valueOf(((DoubleObjectInspector)inputOI).get(input)));
return t;
}
case STRING: {
- t.set(((StringObjectInspector)inputOI).getPrimitiveJavaObject(o));
+ t.set(((StringObjectInspector)inputOI).getPrimitiveJavaObject(input));
return t;
}
default: {
@@ -293,5 +287,23 @@
}
}
}
- }
+ }
+
+ /**
+ * A helper class to convert any primitive to String.
+ */
+ public static class StringConverter implements Converter {
+ PrimitiveObjectInspector inputOI;
+
+ public StringConverter(PrimitiveObjectInspector inputOI) {
+ // The output ObjectInspector is writableStringObjectInspector.
+ this.inputOI = inputOI;
+ }
+
+ @Override
+ public Object convert(Object input) {
+ return PrimitiveObjectInspectorUtils.getString(input, inputOI);
+ }
+ }
+
}
Modified: hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/PrimitiveObjectInspectorUtils.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/PrimitiveObjectInspectorUtils.java?rev=804106&r1=804105&r2=804106&view=diff
==============================================================================
--- hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/PrimitiveObjectInspectorUtils.java (original)
+++ hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/PrimitiveObjectInspectorUtils.java Fri Aug 14 07:48:02 2009
@@ -124,10 +124,8 @@
public static final PrimitiveTypeEntry byteTypeEntry = new PrimitiveTypeEntry(PrimitiveCategory.BYTE, Constants.TINYINT_TYPE_NAME, Byte.TYPE, Byte.class, ByteWritable.class);
public static final PrimitiveTypeEntry shortTypeEntry = new PrimitiveTypeEntry(PrimitiveCategory.SHORT, Constants.SMALLINT_TYPE_NAME, Short.TYPE, Short.class, ShortWritable.class);
- // Following 3 are complex types for special handling
+ // The following is a complex type for special handling
public static final PrimitiveTypeEntry unknownTypeEntry = new PrimitiveTypeEntry(PrimitiveCategory.UNKNOWN, "unknown", null, Object.class, null);
- public static final PrimitiveTypeEntry unknownMapTypeEntry = new PrimitiveTypeEntry(PrimitiveCategory.UNKNOWN, Constants.MAP_TYPE_NAME, null, Map.class, null);
- public static final PrimitiveTypeEntry unknownListTypeEntry = new PrimitiveTypeEntry(PrimitiveCategory.UNKNOWN, Constants.LIST_TYPE_NAME, null, List.class, null);
static {
registerType(stringTypeEntry);
@@ -140,8 +138,6 @@
registerType(byteTypeEntry);
registerType(shortTypeEntry);
registerType(unknownTypeEntry);
- registerType(unknownMapTypeEntry);
- registerType(unknownListTypeEntry);
}
/**
@@ -604,4 +600,62 @@
}
+ /**
+ * Get the String value out of a primitive object.
+ * Note that NullPointerException will be thrown if o is null.
+ * Note that NumberFormatException will be thrown if o is not a valid number.
+ */
+ public static String getString(Object o, PrimitiveObjectInspector oi) throws NumberFormatException {
+
+ if (o == null) {
+ return null;
+ }
+
+ String result = null;
+ switch (oi.getPrimitiveCategory()) {
+ case VOID: {
+ result = null;
+ break;
+ }
+ case BOOLEAN: {
+ result = String.valueOf((((BooleanObjectInspector)oi).get(o)));
+ break;
+ }
+ case BYTE: {
+ result = String.valueOf((((ByteObjectInspector)oi).get(o)));
+ break;
+ }
+ case SHORT: {
+ result = String.valueOf((((ShortObjectInspector)oi).get(o)));
+ break;
+ }
+ case INT: {
+ result = String.valueOf((((IntObjectInspector)oi).get(o)));
+ break;
+ }
+ case LONG: {
+ result = String.valueOf((((LongObjectInspector)oi).get(o)));
+ break;
+ }
+ case FLOAT: {
+ result = String.valueOf((((FloatObjectInspector)oi).get(o)));
+ break;
+ }
+ case DOUBLE: {
+ result = String.valueOf((((DoubleObjectInspector)oi).get(o)));
+ break;
+ }
+ case STRING: {
+ StringObjectInspector soi = (StringObjectInspector)oi;
+ result = soi.getPrimitiveJavaObject(o);
+ break;
+ }
+ default: {
+ throw new RuntimeException("Hive 2 Internal error: unknown type: "
+ + oi.getTypeName());
+ }
+ }
+ return result;
+ }
+
}
Modified: hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/SettableBooleanObjectInspector.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/SettableBooleanObjectInspector.java?rev=804106&r1=804105&r2=804106&view=diff
==============================================================================
--- hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/SettableBooleanObjectInspector.java (original)
+++ hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/SettableBooleanObjectInspector.java Fri Aug 14 07:48:02 2009
@@ -24,9 +24,12 @@
public interface SettableBooleanObjectInspector extends BooleanObjectInspector {
/**
- * Set the object with the value.
+ * Set the object with the value. Return the object that has the new value.
+ *
+ * In most cases the returned value should be the same as o, but in case
+ * o is unmodifiable, this will return a new object with new value.
*/
- public void set(Object o, boolean value);
+ public Object set(Object o, boolean value);
/**
* Create an object with the value.
Modified: hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/SettableByteObjectInspector.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/SettableByteObjectInspector.java?rev=804106&r1=804105&r2=804106&view=diff
==============================================================================
--- hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/SettableByteObjectInspector.java (original)
+++ hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/SettableByteObjectInspector.java Fri Aug 14 07:48:02 2009
@@ -24,9 +24,12 @@
public interface SettableByteObjectInspector extends ByteObjectInspector {
/**
- * Set the object with the value.
+ * Set the object with the value. Return the object that has the new value.
+ *
+ * In most cases the returned value should be the same as o, but in case
+ * o is unmodifiable, this will return a new object with new value.
*/
- public void set(Object o, byte value);
+ public Object set(Object o, byte value);
/**
* Create an object with the value.
Modified: hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/SettableDoubleObjectInspector.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/SettableDoubleObjectInspector.java?rev=804106&r1=804105&r2=804106&view=diff
==============================================================================
--- hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/SettableDoubleObjectInspector.java (original)
+++ hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/SettableDoubleObjectInspector.java Fri Aug 14 07:48:02 2009
@@ -24,9 +24,12 @@
public interface SettableDoubleObjectInspector extends DoubleObjectInspector {
/**
- * Set the object with the value.
+ * Set the object with the value. Return the object that has the new value.
+ *
+ * In most cases the returned value should be the same as o, but in case
+ * o is unmodifiable, this will return a new object with new value.
*/
- public void set(Object o, double value);
+ public Object set(Object o, double value);
/**
* Create an object with the value.
Modified: hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/SettableFloatObjectInspector.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/SettableFloatObjectInspector.java?rev=804106&r1=804105&r2=804106&view=diff
==============================================================================
--- hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/SettableFloatObjectInspector.java (original)
+++ hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/SettableFloatObjectInspector.java Fri Aug 14 07:48:02 2009
@@ -24,9 +24,12 @@
public interface SettableFloatObjectInspector extends FloatObjectInspector {
/**
- * Set the object with the value.
+ * Set the object with the value. Return the object that has the new value.
+ *
+ * In most cases the returned value should be the same as o, but in case
+ * o is unmodifiable, this will return a new object with new value.
*/
- public void set(Object o, float value);
+ public Object set(Object o, float value);
/**
* Create an object with the value.
Modified: hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/SettableIntObjectInspector.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/SettableIntObjectInspector.java?rev=804106&r1=804105&r2=804106&view=diff
==============================================================================
--- hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/SettableIntObjectInspector.java (original)
+++ hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/SettableIntObjectInspector.java Fri Aug 14 07:48:02 2009
@@ -24,9 +24,12 @@
public interface SettableIntObjectInspector extends IntObjectInspector {
/**
- * Set the object with the value.
+ * Set the object with the value. Return the object that has the new value.
+ *
+ * In most cases the returned value should be the same as o, but in case
+ * o is unmodifiable, this will return a new object with new value.
*/
- public void set(Object o, int value);
+ public Object set(Object o, int value);
/**
* Create an object with the value.
Modified: hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/SettableLongObjectInspector.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/SettableLongObjectInspector.java?rev=804106&r1=804105&r2=804106&view=diff
==============================================================================
--- hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/SettableLongObjectInspector.java (original)
+++ hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/SettableLongObjectInspector.java Fri Aug 14 07:48:02 2009
@@ -24,9 +24,12 @@
public interface SettableLongObjectInspector extends LongObjectInspector {
/**
- * Set the object with the value.
+ * Set the object with the value. Return the object that has the new value.
+ *
+ * In most cases the returned value should be the same as o, but in case
+ * o is unmodifiable, this will return a new object with new value.
*/
- public void set(Object o, long value);
+ public Object set(Object o, long value);
/**
* Create an object with the value.
Modified: hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/SettableShortObjectInspector.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/SettableShortObjectInspector.java?rev=804106&r1=804105&r2=804106&view=diff
==============================================================================
--- hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/SettableShortObjectInspector.java (original)
+++ hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/SettableShortObjectInspector.java Fri Aug 14 07:48:02 2009
@@ -24,9 +24,12 @@
public interface SettableShortObjectInspector extends ShortObjectInspector {
/**
- * Set the object with the value.
+ * Set the object with the value. Return the object that has the new value.
+ *
+ * In most cases the returned value should be the same as o, but in case
+ * o is unmodifiable, this will return a new object with new value.
*/
- public void set(Object o, short value);
+ public Object set(Object o, short value);
/**
* Create an object with the value.
Modified: hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/SettableStringObjectInspector.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/SettableStringObjectInspector.java?rev=804106&r1=804105&r2=804106&view=diff
==============================================================================
--- hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/SettableStringObjectInspector.java (original)
+++ hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/SettableStringObjectInspector.java Fri Aug 14 07:48:02 2009
@@ -26,14 +26,20 @@
public interface SettableStringObjectInspector extends StringObjectInspector {
/**
- * Set the object with the value.
+ * Set the object with the value. Return the object that has the new value.
+ *
+ * In most cases the returned value should be the same as o, but in case
+ * o is unmodifiable, this will return a new object with new value.
*/
- public void set(Object o, Text value);
+ public Object set(Object o, Text value);
/**
- * Set the object with the value.
+ * Set the object with the value. Return the object that has the new value.
+ *
+ * In most cases the returned value should be the same as o, but in case
+ * o is unmodifiable, this will return a new object with new value.
*/
- public void set(Object o, String value);
+ public Object set(Object o, String value);
/**
* Create an object with the value.
Modified: hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableBooleanObjectInspector.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableBooleanObjectInspector.java?rev=804106&r1=804105&r2=804106&view=diff
==============================================================================
--- hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableBooleanObjectInspector.java (original)
+++ hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableBooleanObjectInspector.java Fri Aug 14 07:48:02 2009
@@ -51,7 +51,8 @@
}
@Override
- public void set(Object o, boolean value) {
+ public Object set(Object o, boolean value) {
((BooleanWritable)o).set(value);
+ return o;
}
}
Modified: hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableByteObjectInspector.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableByteObjectInspector.java?rev=804106&r1=804105&r2=804106&view=diff
==============================================================================
--- hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableByteObjectInspector.java (original)
+++ hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableByteObjectInspector.java Fri Aug 14 07:48:02 2009
@@ -52,7 +52,8 @@
}
@Override
- public void set(Object o, byte value) {
+ public Object set(Object o, byte value) {
((ByteWritable)o).set(value);
+ return o;
}
}
Modified: hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableDoubleObjectInspector.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableDoubleObjectInspector.java?rev=804106&r1=804105&r2=804106&view=diff
==============================================================================
--- hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableDoubleObjectInspector.java (original)
+++ hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableDoubleObjectInspector.java Fri Aug 14 07:48:02 2009
@@ -52,8 +52,9 @@
}
@Override
- public void set(Object o, double value) {
+ public Object set(Object o, double value) {
((DoubleWritable)o).set(value);
+ return o;
}
}
Modified: hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableFloatObjectInspector.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableFloatObjectInspector.java?rev=804106&r1=804105&r2=804106&view=diff
==============================================================================
--- hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableFloatObjectInspector.java (original)
+++ hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableFloatObjectInspector.java Fri Aug 14 07:48:02 2009
@@ -51,7 +51,8 @@
}
@Override
- public void set(Object o, float value) {
+ public Object set(Object o, float value) {
((FloatWritable)o).set(value);
+ return o;
}
}
Modified: hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableIntObjectInspector.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableIntObjectInspector.java?rev=804106&r1=804105&r2=804106&view=diff
==============================================================================
--- hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableIntObjectInspector.java (original)
+++ hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableIntObjectInspector.java Fri Aug 14 07:48:02 2009
@@ -52,7 +52,8 @@
}
@Override
- public void set(Object o, int value) {
+ public Object set(Object o, int value) {
((IntWritable)o).set(value);
+ return o;
}
}
Modified: hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableLongObjectInspector.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableLongObjectInspector.java?rev=804106&r1=804105&r2=804106&view=diff
==============================================================================
--- hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableLongObjectInspector.java (original)
+++ hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableLongObjectInspector.java Fri Aug 14 07:48:02 2009
@@ -52,8 +52,9 @@
}
@Override
- public void set(Object o, long value) {
+ public Object set(Object o, long value) {
((LongWritable)o).set(value);
+ return o;
}
}
Modified: hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableShortObjectInspector.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableShortObjectInspector.java?rev=804106&r1=804105&r2=804106&view=diff
==============================================================================
--- hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableShortObjectInspector.java (original)
+++ hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableShortObjectInspector.java Fri Aug 14 07:48:02 2009
@@ -18,8 +18,6 @@
package org.apache.hadoop.hive.serde2.objectinspector.primitive;
import org.apache.hadoop.hive.serde2.io.ShortWritable;
-import org.apache.hadoop.io.LongWritable;
-
/**
* A WritableShortObjectInspector inspects a ShortWritable Object.
@@ -52,8 +50,9 @@
}
@Override
- public void set(Object o, short value) {
+ public Object set(Object o, short value) {
((ShortWritable)o).set(value);
+ return o;
}
}
Modified: hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableStringObjectInspector.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableStringObjectInspector.java?rev=804106&r1=804105&r2=804106&view=diff
==============================================================================
--- hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableStringObjectInspector.java (original)
+++ hadoop/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/primitive/WritableStringObjectInspector.java Fri Aug 14 07:48:02 2009
@@ -64,19 +64,21 @@
}
@Override
- public void set(Object o, Text value) {
+ public Object set(Object o, Text value) {
Text r = (Text)o;
if (value != null) {
r.set(value);
}
+ return o;
}
@Override
- public void set(Object o, String value) {
+ public Object set(Object o, String value) {
Text r = (Text)o;
if (value != null) {
r.set(value);
}
+ return o;
}
}
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=804106&r1=804105&r2=804106&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 Fri Aug 14 07:48:02 2009
@@ -63,8 +63,6 @@
public static final TypeInfo shortTypeInfo = getPrimitiveTypeInfo(Constants.SMALLINT_TYPE_NAME);
public static final TypeInfo unknownTypeInfo = getPrimitiveTypeInfo("unknown");
- public static final TypeInfo unknownMapTypeInfo = getPrimitiveTypeInfo(Constants.MAP_TYPE_NAME);
- public static final TypeInfo unknownListTypeInfo = getPrimitiveTypeInfo(Constants.LIST_TYPE_NAME);
public static TypeInfo getPrimitiveTypeInfoFromPrimitiveWritable(Class<?> clazz) {
String typeName = PrimitiveObjectInspectorUtils.getTypeNameFromPrimitiveWritable(clazz);
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=804106&r1=804105&r2=804106&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 Fri Aug 14 07:48:02 2009
@@ -1,6 +1,10 @@
package org.apache.hadoop.hive.serde2.typeinfo;
+import java.lang.reflect.Field;
+import java.lang.reflect.GenericArrayType;
import java.lang.reflect.Method;
+import java.lang.reflect.ParameterizedType;
+import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@@ -22,24 +26,131 @@
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.
+ */
+ private static TypeInfo getExtendedTypeInfoFromJavaType(Type t, Method m) {
+
+ if (t == Object.class) {
+ return TypeInfoFactory.unknownTypeInfo;
+ }
+
+ if (t instanceof ParameterizedType) {
+ ParameterizedType pt = (ParameterizedType)t;
+ // List?
+ 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),
+ getExtendedTypeInfoFromJavaType(pt.getActualTypeArguments()[1], m));
+ }
+ // 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);
+ }
+ Class<?> c = (Class<?>)t;
+
+ // Java Primitive Type?
+ if (PrimitiveObjectInspectorUtils.isPrimitiveJavaType(c)) {
+ 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));
+ }
+
+ // Primitive Writable class?
+ if (PrimitiveObjectInspectorUtils.isPrimitiveWritableClass(c)) {
+ 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));
+ }
+ return TypeInfoFactory.getStructTypeInfo(fieldNames, fieldTypeInfos);
+ }
- public static List<TypeInfo> getParameterTypeInfos(Method m) {
- Class<?>[] parameterTypes = m.getParameterTypes();
- List<TypeInfo> typeInfos = new ArrayList<TypeInfo>(parameterTypes.length);
- for (int i=0; i<parameterTypes.length; i++) {
- if (PrimitiveObjectInspectorUtils.isPrimitiveWritableClass(parameterTypes[i])) {
- typeInfos.add(TypeInfoFactory.getPrimitiveTypeInfoFromPrimitiveWritable(parameterTypes[i]));
- } else if (PrimitiveObjectInspectorUtils.isPrimitiveJavaClass(parameterTypes[i])
- || PrimitiveObjectInspectorUtils.isPrimitiveJavaType(parameterTypes[i])) {
- typeInfos.add(TypeInfoFactory.getPrimitiveTypeInfoFromJavaPrimitive(parameterTypes[i]));
- } else if (Map.class.isAssignableFrom(parameterTypes[i])) {
- typeInfos.add(TypeInfoFactory.unknownMapTypeInfo);
- } else if (List.class.isAssignableFrom(parameterTypes[i])) {
- typeInfos.add(TypeInfoFactory.unknownListTypeInfo);
- } else if (parameterTypes[i].equals(Object.class)){
- typeInfos.add(TypeInfoFactory.unknownTypeInfo);
- } else {
- throw new RuntimeException("Hive does not understand type " + parameterTypes[i] + " from " + m);
+ /**
+ * 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;
+ return arrayClass.getComponentType();
+ } else if (t instanceof GenericArrayType) {
+ 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.
+ */
+ 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[],
+ // or String[] etc in the last argument.
+ 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
+ if (size != methodParameterTypes.length) {
+ return null;
+ }
+ typeInfos = new ArrayList<TypeInfo>(methodParameterTypes.length);
+ for (int i = 0; i < methodParameterTypes.length; i++) {
+ typeInfos.add(getExtendedTypeInfoFromJavaType(methodParameterTypes[i], m));
+ }
+ } else {
+ // Variable-length arguments
+ if (size < methodParameterTypes.length - 1) {
+ return null;
+ }
+ typeInfos = new ArrayList<TypeInfo>(size);
+ for (int i = 0; i < methodParameterTypes.length - 1; i++) {
+ typeInfos.add(getExtendedTypeInfoFromJavaType(methodParameterTypes[i], m));
+ }
+ for (int i = methodParameterTypes.length - 1; i < size; i++) {
+ typeInfos.add(getExtendedTypeInfoFromJavaType(lastParaElementType, m));
}
}
return typeInfos;
Modified: hadoop/hive/trunk/serde/src/test/org/apache/hadoop/hive/serde2/objectinspector/TestStandardObjectInspectors.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/serde/src/test/org/apache/hadoop/hive/serde2/objectinspector/TestStandardObjectInspectors.java?rev=804106&r1=804105&r2=804106&view=diff
==============================================================================
--- hadoop/hive/trunk/serde/src/test/org/apache/hadoop/hive/serde2/objectinspector/TestStandardObjectInspectors.java (original)
+++ hadoop/hive/trunk/serde/src/test/org/apache/hadoop/hive/serde2/objectinspector/TestStandardObjectInspectors.java Fri Aug 14 07:48:02 2009
@@ -151,6 +151,20 @@
assertEquals(3, loi1.getListElement(list, 3));
assertNull(loi1.getListElement(list, -1));
assertNull(loi1.getListElement(list, 4));
+
+ // Settable
+ Object list4 = loi1.create(4);
+ loi1.set(list4, 0, 0);
+ loi1.set(list4, 1, 1);
+ loi1.set(list4, 2, 2);
+ loi1.set(list4, 3, 3);
+ assertEquals(list, list4);
+
+ loi1.resize(list4, 5);
+ loi1.set(list4, 4, 4);
+ loi1.resize(list4, 4);
+ assertEquals(list, list4);
+
} catch (Throwable e) {
e.printStackTrace();
throw e;
@@ -199,6 +213,16 @@
assertEquals(3, moi1.getMapValueElement(map, "three"));
assertNull(moi1.getMapValueElement(map, null));
assertNull(moi1.getMapValueElement(map, "null"));
+
+ // Settable
+ Object map3 = moi1.create();
+ moi1.put(map3, "one", 1);
+ moi1.put(map3, "two", 2);
+ moi1.put(map3, "three", 3);
+ assertEquals(map, map3);
+ moi1.clear(map3);
+ assertEquals(0, moi1.getMapSize(map3));
+
} catch (Throwable e) {
e.printStackTrace();
throw e;
@@ -260,6 +284,15 @@
assertEquals(1, soi1.getStructFieldData(struct, fields.get(0)));
assertEquals("two", soi1.getStructFieldData(struct, fields.get(1)));
assertEquals(true, soi1.getStructFieldData(struct, fields.get(2)));
+
+ // Settable
+ Object struct3 = soi1.create();
+ System.out.println(struct3);
+ soi1.setStructFieldData(struct3, fields.get(0), 1);
+ soi1.setStructFieldData(struct3, fields.get(1), "two");
+ soi1.setStructFieldData(struct3, fields.get(2), true);
+ assertEquals(struct, struct3);
+
} catch (Throwable e) {
e.printStackTrace();
throw e;