Github user gatorsmile commented on a diff in the pull request:

    https://github.com/apache/spark/pull/16660#discussion_r97428227
  
    --- 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
    +}
    +
    +// UDT for derived class
    +private[spark] class ExampleSubTypeUDT extends 
UserDefinedType[IExampleSubType] {
    +
    +  override def sqlType: StructType = {
    +    StructType(Seq(
    +      StructField("intfield", IntegerType, nullable = false)))
    +  }
    +
    +  override def serialize(obj: IExampleSubType): InternalRow = {
    +
    +    val row = new GenericInternalRow(1)
    +    row.setInt(0, obj.field)
    +    row
    +  }
    +
    +  override def deserialize(datum: Any): IExampleSubType = {
    +    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 ExampleSubClass(field)
    +    }
    +  }
    +
    +  override def userClass: Class[IExampleSubType] = classOf[IExampleSubType]
    +
    +  override def hashCode(): Int = 
classOf[ExampleSubTypeUDT].getName.hashCode()
    +
    +  override def equals(other: Any): Boolean = 
other.isInstanceOf[ExampleSubTypeUDT]
    +
    +  override def typeName: String = "exampleSubType"
    +
    +  private[spark] override def asNullable: ExampleSubTypeUDT = this
    --- End diff --
    
    Nit: to simplify the test cases, please remove asNullable, typeName, equals 
and hashCode too.


---
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

Reply via email to