aboutsummaryrefslogtreecommitdiff
path: root/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/ScalaMacros.scala
diff options
context:
space:
mode:
Diffstat (limited to 'sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/ScalaMacros.scala')
-rw-r--r--sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/ScalaMacros.scala23
1 files changed, 19 insertions, 4 deletions
diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/ScalaMacros.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/ScalaMacros.scala
index 2e45b14801..88815e8ae4 100644
--- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/ScalaMacros.scala
+++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/ScalaMacros.scala
@@ -26,6 +26,8 @@ class MacrosHelper[C <: Context](val context: C) extends ScalaReflection {
import universe._
+ def getClassFromType(tpe: Type): Class[_] = Class.forName("foo")
+
def generate[T: context.WeakTypeTag]: context.Tree = {
val tag = implicitly[WeakTypeTag[T]]
val tpe = tag.tpe
@@ -42,17 +44,30 @@ class MacrosHelper[C <: Context](val context: C) extends ScalaReflection {
val serializer = serializerFor[T](nullSafeInput)(tag)
val deserializer = deserializerFor[T](tag)
- val schema = schemaFor[T](tag) match {
+ def schema = schemaFor[T](tag) match {
case Schema(s: StructType, _) => s
case Schema(dt, nullable) => new StructType().add("value", dt, nullable)
}
- q"""new _root_.org.apache.spark.sql.catalyst.encoders.ExpressionEncoder[T](
- ${reify(schema)},
+ val enc = new _root_.org.apache.spark.sql.catalyst.encoders.ExpressionEncoder[T](
+ schema,
+ flat,
+ serializer.flatten,
+ deserializer,
+ null
+ )
+ //reify(enc).tree
+
+ /*
+ val tree = q"""new _root_.org.apache.spark.sql.catalyst.encoders.ExpressionEncoder[T](
+ ${schema},
${reify(flat)},
${reify(serializer.flatten)},
${reify(deserializer)},
classTag[$tpe])"""
+ */
+ //println(show(tree))
+ //tree
}
}
@@ -62,7 +77,7 @@ import scala.language.experimental.macros
object ScalaMacros {
- final def newEncoder[T]: ExpressionEncoder[T] = macro newEncoderImpl[T]
+ implicit def newEncoder[T]: ExpressionEncoder[T] = macro newEncoderImpl[T]
def newEncoderImpl[T: c.WeakTypeTag](c: Context): c.Expr[ExpressionEncoder[T]] = {
val helper = new MacrosHelper[c.type](c)