@@ -21,7 +21,9 @@ import java.math.BigInteger
2121import java .sql .{Date , Timestamp }
2222
2323import org .apache .spark .SparkFunSuite
24+ import org .apache .spark .sql .catalyst .expressions .{BoundReference , Literal , NewInstance }
2425import org .apache .spark .sql .types ._
26+ import org .apache .spark .unsafe .types .UTF8String
2527
2628case class PrimitiveData (
2729 intField : Int ,
@@ -229,4 +231,16 @@ class ScalaReflectionSuite extends SparkFunSuite {
229231 assert(anyTypes.forall(! _.isPrimitive))
230232 assert(anyTypes === Seq (classOf [java.lang.Object ], classOf [java.lang.Object ]))
231233 }
234+
235+ test(" SPARK-15062: Get correct serializer for List[_]" ) {
236+ val list = List (1 , 2 , 3 )
237+ val serializer = extractorsFor[List [Int ]](BoundReference (
238+ 0 , ObjectType (list.getClass), nullable = false ))
239+ assert(serializer.children.size == 2 )
240+ assert(serializer.children.head.isInstanceOf [Literal ])
241+ assert(serializer.children.head.asInstanceOf [Literal ].value === UTF8String .fromString(" value" ))
242+ assert(serializer.children.last.isInstanceOf [NewInstance ])
243+ assert(serializer.children.last.asInstanceOf [NewInstance ]
244+ .cls.isInstanceOf [Class [org.apache.spark.sql.catalyst.util.GenericArrayData ]])
245+ }
232246}
0 commit comments