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