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: [email protected]
For additional commands, e-mail: [email protected]