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

    https://github.com/apache/spark/pull/19813#discussion_r156288523
  
    --- Diff: 
sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/codegen/CodeGenerator.scala
 ---
    @@ -55,8 +55,45 @@ import org.apache.spark.util.{ParentClassLoader, Utils}
      *                 to null.
      * @param value A term for a (possibly primitive) value of the result of 
the evaluation. Not
      *              valid if `isNull` is set to `true`.
    + * @param inputRow A term that holds the input row name when generating 
this code.
    + * @param inputVars A list of [[ExprInputVar]] that holds input variables 
when generating this code.
      */
    -case class ExprCode(var code: String, var isNull: String, var value: 
String)
    +case class ExprCode(
    +    var code: String,
    +    var isNull: String,
    +    var value: String,
    +    var inputRow: String = null,
    +    var inputVars: Seq[ExprInputVar] = Seq.empty) {
    +
    +  // Returns true if this value is a literal.
    +  def isLiteral(): Boolean = {
    +    assert(value.nonEmpty, "ExprCode.value can't be empty string.")
    +
    +    if (value == "true" || value == "false" || value == "null") {
    +      true
    +    } else {
    +      // The valid characters for the first character of a Java variable 
is [a-zA-Z_$].
    +      value.head match {
    +        case v if v >= 'a' && v <= 'z' => false
    --- End diff --
    
    I only consider literals and normal java variables now. If we say array 
accessing `arr[1]` are all global variables (I suppose they are, as usually we 
don't/can't use `arr[1]` as variable name), I'm thinking maybe we should 
disallow passing any global variables.


---

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

Reply via email to