diff options
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.scala | 23 |
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) |