Github user gatorsmile commented on a diff in the pull request: https://github.com/apache/spark/pull/16660#discussion_r97427855 --- Diff: sql/core/src/test/scala/org/apache/spark/sql/UserDefinedTypeSuite.scala --- @@ -71,7 +73,104 @@ object UDT { } +// object and classes to test SPARK-19311 + +// Trait/Interface for base type +@SQLUserDefinedType(udt = classOf[ExampleBaseTypeUDT]) +sealed trait IExampleBaseType extends Serializable { + def field: Int +} + +// Trait/Interface for derived type +@SQLUserDefinedType(udt = classOf[ExampleSubTypeUDT]) +sealed trait IExampleSubType extends IExampleBaseType + +// a base class +class ExampleBaseClass(override val field: Int) extends IExampleBaseType { + override def toString: String = field.toString + +} + +// a derived class +class ExampleSubClass(override val field: Int) + extends ExampleBaseClass(field) with IExampleSubType + +// UDT for base class +private[spark] class ExampleBaseTypeUDT extends UserDefinedType[IExampleBaseType] { + + override def sqlType: StructType = { + StructType(Seq( + StructField("intfield", IntegerType, nullable = false))) + } + + override def serialize(obj: IExampleBaseType): InternalRow = { + val row = new GenericInternalRow(1) + row.setInt(0, obj.field) + row + } + + override def deserialize(datum: Any): IExampleBaseType = { + datum match { + case row: InternalRow => + require(row.numFields == 1, + s"VectorUDT.deserialize given row with length " + + s"${row.numFields} but requires length == 1") + val field = row.getInt(0) + new ExampleBaseClass(field) + } + } + + override def userClass: Class[IExampleBaseType] = classOf[IExampleBaseType] + + override def hashCode(): Int = classOf[ExampleBaseTypeUDT].getName.hashCode() + + override def equals(other: Any): Boolean = other.isInstanceOf[ExampleBaseTypeUDT] + + override def typeName: String = "exampleBaseType" + + private[spark] override def asNullable: ExampleBaseTypeUDT = this --- End diff -- Nit: to simplify the test cases, please remove `asNullable `, `typeName `, `equals` and `hashCode`
--- If your project is set up for it, you can reply to this email and have your reply appear on GitHub as well. If your project does not have this feature enabled and wishes so, or if the feature is enabled but not working, please contact infrastructure at infrastruct...@apache.org or file a JIRA ticket with INFRA. --- --------------------------------------------------------------------- To unsubscribe, e-mail: reviews-unsubscr...@spark.apache.org For additional commands, e-mail: reviews-h...@spark.apache.org