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

    https://github.com/apache/spark/pull/21348#discussion_r228563440
  
    --- Diff: 
sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/objects/objects.scala
 ---
    @@ -1799,3 +1805,65 @@ case class ValidateExternalType(child: Expression, 
expected: DataType)
         ev.copy(code = code, isNull = input.isNull)
       }
     }
    +
    +/**
    + * Determines if the given value is an instanceof a given class.
    + *
    + * @param value the value to check
    + * @param checkedType the class to check the value against
    + */
    +case class InstanceOf(
    +    value: Expression,
    +    checkedType: Class[_]) extends Expression with NonSQLExpression {
    +
    +  override def nullable: Boolean = false
    +  override def children: Seq[Expression] = value :: Nil
    +  override def dataType: DataType = BooleanType
    +
    +  override def eval(input: InternalRow): Any =
    +    throw new UnsupportedOperationException("Only code-generated 
evaluation is supported.")
    +
    +  override def doGenCode(ctx: CodegenContext, ev: ExprCode): ExprCode = {
    +
    +    val obj = value.genCode(ctx)
    +
    +    val code =
    +      s"""
    +        ${obj.code}
    +        final boolean ${ev.value} = ${obj.value} instanceof 
${checkedType.getName};
    +      """
    +
    +    ev.copy(code = code, isNull = FalseLiteral)
    +  }
    +}
    +
    +/**
    + * Casts the result of an expression to another type.
    + *
    + * @param value The value to cast
    + * @param resultType The type to which the value should be cast
    + */
    +case class ObjectCast(value: Expression, resultType: DataType)
    +  extends Expression with NonSQLExpression {
    +
    +  override def nullable: Boolean = value.nullable
    +  override def dataType: DataType = resultType
    +  override def children: Seq[Expression] = value :: Nil
    +
    +  override def eval(input: InternalRow): Any =
    +    throw new UnsupportedOperationException("Only code-generated 
evaluation is supported.")
    --- End diff --
    
    Any problem on implementing none code-generated evaluation?


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscr...@spark.apache.org
For additional commands, e-mail: reviews-h...@spark.apache.org

Reply via email to