aboutsummaryrefslogtreecommitdiff
path: root/sql/hive
diff options
context:
space:
mode:
authorCheng Hao <hao.cheng@intel.com>2014-11-17 16:35:49 -0800
committerMichael Armbrust <michael@databricks.com>2014-11-17 16:35:49 -0800
commitef7c464effa1510b24bd8e665e4df6c4839b0c87 (patch)
tree42d7b07a7eeaa1df57fa4a206dd7a2a69fc29d2c /sql/hive
parent42389b1780311d90499b4ce2315ceabf5b6ab384 (diff)
downloadspark-ef7c464effa1510b24bd8e665e4df6c4839b0c87.tar.gz
spark-ef7c464effa1510b24bd8e665e4df6c4839b0c87.tar.bz2
spark-ef7c464effa1510b24bd8e665e4df6c4839b0c87.zip
[SPARK-4448] [SQL] unwrap for the ConstantObjectInspector
Author: Cheng Hao <hao.cheng@intel.com> Closes #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
Diffstat (limited to 'sql/hive')
-rw-r--r--sql/hive/src/main/scala/org/apache/spark/sql/hive/HiveInspectors.scala36
1 files changed, 32 insertions, 4 deletions
diff --git a/sql/hive/src/main/scala/org/apache/spark/sql/hive/HiveInspectors.scala b/sql/hive/src/main/scala/org/apache/spark/sql/hive/HiveInspectors.scala
index 7e76aff642..ada980acb1 100644
--- a/sql/hive/src/main/scala/org/apache/spark/sql/hive/HiveInspectors.scala
+++ b/sql/hive/src/main/scala/org/apache/spark/sql/hive/HiveInspectors.scala
@@ -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()