You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@phoenix.apache.org by jm...@apache.org on 2015/07/07 02:06:21 UTC
[2/2] phoenix git commit: PHOENIX 1968: Should support saving arrays
PHOENIX 1968: Should support saving arrays
Conflicts:
phoenix-spark/src/it/scala/org/apache/phoenix/spark/PhoenixSparkIT.scala
Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo
Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/27838c48
Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/27838c48
Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/27838c48
Branch: refs/heads/4.4-HBase-1.1
Commit: 27838c48be2c5b98e5806f8f808f61a76d684277
Parents: 06c49c7
Author: ravimagham <ra...@apache.org>
Authored: Thu Jun 11 11:50:21 2015 -0700
Committer: Josh Mahonin <jm...@apache.org>
Committed: Mon Jul 6 20:02:32 2015 -0400
----------------------------------------------------------------------
.../phoenix/spark/PhoenixRecordWritable.scala | 25 ++++++++++++++++----
1 file changed, 20 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/phoenix/blob/27838c48/phoenix-spark/src/main/scala/org/apache/phoenix/spark/PhoenixRecordWritable.scala
----------------------------------------------------------------------
diff --git a/phoenix-spark/src/main/scala/org/apache/phoenix/spark/PhoenixRecordWritable.scala b/phoenix-spark/src/main/scala/org/apache/phoenix/spark/PhoenixRecordWritable.scala
index 67e0bd2..3977657 100644
--- a/phoenix-spark/src/main/scala/org/apache/phoenix/spark/PhoenixRecordWritable.scala
+++ b/phoenix-spark/src/main/scala/org/apache/phoenix/spark/PhoenixRecordWritable.scala
@@ -16,11 +16,12 @@ package org.apache.phoenix.spark
import java.sql.{PreparedStatement, ResultSet}
import org.apache.hadoop.mapreduce.lib.db.DBWritable
import org.apache.phoenix.mapreduce.util.ColumnInfoToStringEncoderDecoder
-import org.apache.phoenix.schema.types.{PDate, PhoenixArray}
+import org.apache.phoenix.schema.types.{PDataType, PDate, PhoenixArray}
import org.joda.time.DateTime
import scala.collection.{immutable, mutable}
import scala.collection.JavaConversions._
+
class PhoenixRecordWritable(var encodedColumns: String) extends DBWritable {
val upsertValues = mutable.ArrayBuffer[Any]()
val resultMap = mutable.Map[String, AnyRef]()
@@ -44,13 +45,27 @@ class PhoenixRecordWritable(var encodedColumns: String) extends DBWritable {
upsertValues.zip(columns).zipWithIndex.foreach {
case ((v, c), i) => {
if (v != null) {
+
// Both Java and Joda dates used to work in 4.2.3, but now they must be java.sql.Date
+ // Can override any other types here as needed
val (finalObj, finalType) = v match {
- case dt: DateTime => (new java.sql.Date(dt.getMillis), PDate.INSTANCE.getSqlType)
- case d: java.util.Date => (new java.sql.Date(d.getTime), PDate.INSTANCE.getSqlType)
- case _ => (v, c.getSqlType)
+ case dt: DateTime => (new java.sql.Date(dt.getMillis), PDate.INSTANCE)
+ case d: java.util.Date => (new java.sql.Date(d.getTime), PDate.INSTANCE)
+ case _ => (v, c.getPDataType)
+ }
+
+ // Save as array or object
+ finalObj match {
+ case obj: Array[AnyRef] => {
+ // Create a java.sql.Array, need to lookup the base sql type name
+ val sqlArray = statement.getConnection.createArrayOf(
+ PDataType.arrayBaseType(finalType).getSqlTypeName,
+ obj
+ )
+ statement.setArray(i + 1, sqlArray)
+ }
+ case _ => statement.setObject(i + 1, finalObj)
}
- statement.setObject(i + 1, finalObj, finalType)
} else {
statement.setNull(i + 1, c.getSqlType)
}