Skip to content

Commit

Permalink
[SPARK-4448] [SQL] unwrap for the ConstantObjectInspector
Browse files Browse the repository at this point in the history
Author: Cheng Hao <[email protected]>

Closes apache#3308 from chenghao-intel/unwrap_constant_oi and squashes the following commits:

156b500 [Cheng Hao] rebase the master
c5b20ab [Cheng Hao] unwrap for the ConstantObjectInspector
  • Loading branch information
chenghao-intel authored and marmbrus committed Nov 18, 2014
1 parent 42389b1 commit ef7c464
Showing 1 changed file with 32 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -86,13 +86,41 @@ private[hive] trait HiveInspectors {
* @param data the data in Hive type
* @param oi the ObjectInspector associated with the Hive Type
* @return convert the data into catalyst type
* TODO return the function of (data => Any) instead for performance consideration
*/
def unwrap(data: Any, oi: ObjectInspector): Any = oi match {
case _ if data == null => null
case hvoi: HiveVarcharObjectInspector =>
if (data == null) null else hvoi.getPrimitiveJavaObject(data).getValue
case hdoi: HiveDecimalObjectInspector =>
if (data == null) null else HiveShim.toCatalystDecimal(hdoi, data)
case poi: VoidObjectInspector => null
case poi: WritableConstantHiveVarcharObjectInspector =>
poi.getWritableConstantValue.getHiveVarchar.getValue
case poi: WritableConstantHiveDecimalObjectInspector =>
HiveShim.toCatalystDecimal(
PrimitiveObjectInspectorFactory.javaHiveDecimalObjectInspector,
poi.getWritableConstantValue.getHiveDecimal)
case poi: WritableConstantTimestampObjectInspector =>
poi.getWritableConstantValue.getTimestamp.clone()
case poi: WritableConstantIntObjectInspector =>
poi.getWritableConstantValue.get()
case poi: WritableConstantDoubleObjectInspector =>
poi.getWritableConstantValue.get()
case poi: WritableConstantBooleanObjectInspector =>
poi.getWritableConstantValue.get()
case poi: WritableConstantLongObjectInspector =>
poi.getWritableConstantValue.get()
case poi: WritableConstantFloatObjectInspector =>
poi.getWritableConstantValue.get()
case poi: WritableConstantShortObjectInspector =>
poi.getWritableConstantValue.get()
case poi: WritableConstantByteObjectInspector =>
poi.getWritableConstantValue.get()
case poi: WritableConstantBinaryObjectInspector =>
val writable = poi.getWritableConstantValue
val temp = new Array[Byte](writable.getLength)
System.arraycopy(writable.getBytes, 0, temp, 0, temp.length)
temp
case poi: WritableConstantDateObjectInspector => poi.getWritableConstantValue.get()
case hvoi: HiveVarcharObjectInspector => hvoi.getPrimitiveJavaObject(data).getValue
case hdoi: HiveDecimalObjectInspector => HiveShim.toCatalystDecimal(hdoi, data)
// org.apache.hadoop.hive.serde2.io.TimestampWritable.set will reset current time object
// if next timestamp is null, so Timestamp object is cloned
case ti: TimestampObjectInspector => ti.getPrimitiveJavaObject(data).clone()
Expand Down

0 comments on commit ef7c464

Please sign in to comment.