@@ -21,6 +21,7 @@ import java.sql.Timestamp
2121
2222import org .scalatest .FunSuite
2323
24+ import org .apache .spark .sql .catalyst .expressions ._
2425import org .apache .spark .sql .test .TestSQLContext ._
2526
2627case class ReflectData (
@@ -56,6 +57,22 @@ case class OptionalReflectData(
5657
5758case class ReflectBinary (data : Array [Byte ])
5859
60+ case class Nested (i : Option [Int ], s : String )
61+
62+ case class Data (
63+ array : Seq [Int ],
64+ arrayContainsNull : Seq [Option [Int ]],
65+ map : Map [Int , Long ],
66+ mapContainsNul : Map [Int , Option [Long ]],
67+ nested : Nested )
68+
69+ case class ComplexReflectData (
70+ arrayField : Seq [Int ],
71+ arrayFieldContainsNull : Seq [Option [Int ]],
72+ mapField : Map [Int , Long ],
73+ mapFieldContainsNull : Map [Int , Option [Long ]],
74+ dataField : Data )
75+
5976class ScalaReflectionRelationSuite extends FunSuite {
6077 test(" query case class RDD" ) {
6178 val data = ReflectData (" a" , 1 , 1L , 1 .toFloat, 1 .toDouble, 1 .toShort, 1 .toByte, true ,
@@ -90,4 +107,33 @@ class ScalaReflectionRelationSuite extends FunSuite {
90107 val result = sql(" SELECT data FROM reflectBinary" ).collect().head(0 ).asInstanceOf [Array [Byte ]]
91108 assert(result.toSeq === Seq [Byte ](1 ))
92109 }
110+
111+ test(" query complex data" ) {
112+ val data = ComplexReflectData (
113+ Seq (1 , 2 , 3 ),
114+ Seq (Some (1 ), Some (2 ), None ),
115+ Map (1 -> 10L , 2 -> 20L ),
116+ Map (1 -> Some (10L ), 2 -> Some (20L ), 3 -> None ),
117+ Data (
118+ Seq (10 , 20 , 30 ),
119+ Seq (Some (10 ), Some (20 ), None ),
120+ Map (10 -> 100L , 20 -> 200L ),
121+ Map (10 -> Some (100L ), 20 -> Some (200L ), 30 -> None ),
122+ Nested (None , " abc" )))
123+ val rdd = sparkContext.parallelize(data :: Nil )
124+ rdd.registerTempTable(" reflectComplexData" )
125+
126+ assert(sql(" SELECT * FROM reflectComplexData" ).collect().head ===
127+ new GenericRow (Array [Any ](
128+ Seq (1 , 2 , 3 ),
129+ Seq (1 , 2 , null ),
130+ Map (1 -> 10L , 2 -> 20L ),
131+ Map (1 -> 10L , 2 -> 20L , 3 -> null ),
132+ new GenericRow (Array [Any ](
133+ Seq (10 , 20 , 30 ),
134+ Seq (10 , 20 , null ),
135+ Map (10 -> 100L , 20 -> 200L ),
136+ Map (10 -> 100L , 20 -> 200L , 30 -> null ),
137+ new GenericRow (Array [Any ](null , " abc" )))))))
138+ }
93139}
0 commit comments