@@ -122,6 +122,21 @@ trait ScalaReflection {
122
122
case t if t <:< typeOf[Option [_]] =>
123
123
val TypeRef (_, _, Seq (optType)) = t
124
124
Schema (schemaFor(optType).dataType, nullable = true )
125
+ // Need to decide if we actually need a special type here.
126
+ case t if t <:< typeOf[Array [Byte ]] => Schema (BinaryType , nullable = true )
127
+ case t if t <:< typeOf[Array [_]] =>
128
+ val TypeRef (_, _, Seq (elementType)) = t
129
+ val Schema (dataType, nullable) = schemaFor(elementType)
130
+ Schema (ArrayType (dataType, containsNull = nullable), nullable = true )
131
+ case t if t <:< typeOf[Seq [_]] =>
132
+ val TypeRef (_, _, Seq (elementType)) = t
133
+ val Schema (dataType, nullable) = schemaFor(elementType)
134
+ Schema (ArrayType (dataType, containsNull = nullable), nullable = true )
135
+ case t if t <:< typeOf[Map [_, _]] =>
136
+ val TypeRef (_, _, Seq (keyType, valueType)) = t
137
+ val Schema (valueDataType, valueNullable) = schemaFor(valueType)
138
+ Schema (MapType (schemaFor(keyType).dataType,
139
+ valueDataType, valueContainsNull = valueNullable), nullable = true )
125
140
case t if t <:< typeOf[Product ] =>
126
141
val formalTypeArgs = t.typeSymbol.asClass.typeParams
127
142
val TypeRef (_, _, actualTypeArgs) = t
@@ -144,21 +159,6 @@ trait ScalaReflection {
144
159
schemaFor(p.typeSignature.substituteTypes(formalTypeArgs, actualTypeArgs))
145
160
StructField (p.name.toString, dataType, nullable)
146
161
}), nullable = true )
147
- // Need to decide if we actually need a special type here.
148
- case t if t <:< typeOf[Array [Byte ]] => Schema (BinaryType , nullable = true )
149
- case t if t <:< typeOf[Array [_]] =>
150
- val TypeRef (_, _, Seq (elementType)) = t
151
- val Schema (dataType, nullable) = schemaFor(elementType)
152
- Schema (ArrayType (dataType, containsNull = nullable), nullable = true )
153
- case t if t <:< typeOf[Seq [_]] =>
154
- val TypeRef (_, _, Seq (elementType)) = t
155
- val Schema (dataType, nullable) = schemaFor(elementType)
156
- Schema (ArrayType (dataType, containsNull = nullable), nullable = true )
157
- case t if t <:< typeOf[Map [_, _]] =>
158
- val TypeRef (_, _, Seq (keyType, valueType)) = t
159
- val Schema (valueDataType, valueNullable) = schemaFor(valueType)
160
- Schema (MapType (schemaFor(keyType).dataType,
161
- valueDataType, valueContainsNull = valueNullable), nullable = true )
162
162
case t if t <:< typeOf[String ] => Schema (StringType , nullable = true )
163
163
case t if t <:< typeOf[Timestamp ] => Schema (TimestampType , nullable = true )
164
164
case t if t <:< typeOf[java.sql.Date ] => Schema (DateType , nullable = true )
0 commit comments