Github user gatorsmile commented on a diff in the pull request: https://github.com/apache/spark/pull/19937#discussion_r155984429 --- Diff: sql/core/src/main/scala/org/apache/spark/sql/execution/joins/SortMergeJoinExec.scala --- @@ -513,26 +513,28 @@ case class SortMergeJoinExec( * the variables should be declared separately from accessing the columns, we can't use the * codegen of BoundReference here. */ - private def createLeftVars(ctx: CodegenContext, leftRow: String): Seq[ExprCode] = { + private def createLeftVars(ctx: CodegenContext, leftRow: String): (Seq[ExprCode], Seq[String]) = { ctx.INPUT_ROW = leftRow left.output.zipWithIndex.map { case (a, i) => val value = ctx.freshName("value") val valueCode = ctx.getValue(leftRow, a.dataType, i.toString) - // declare it as class member, so we can access the column before or in the loop. - ctx.addMutableState(ctx.javaType(a.dataType), value) if (a.nullable) { val isNull = ctx.freshName("isNull") - ctx.addMutableState(ctx.JAVA_BOOLEAN, isNull) val code = s""" |$isNull = $leftRow.isNullAt($i); |$value = $isNull ? ${ctx.defaultValue(a.dataType)} : ($valueCode); """.stripMargin - ExprCode(code, isNull, value) + (ExprCode(code, isNull, value), + s""" + |boolean $isNull = false; + |${ctx.javaType(a.dataType)} $value = ${ctx.defaultValue(a.dataType)}; + """.stripMargin) --- End diff -- Could you assign it first ```Scala val leftVarsDecl = ... (ExprCode(code, isNull, value), leftVarsDecl) ```
--- --------------------------------------------------------------------- To unsubscribe, e-mail: reviews-unsubscr...@spark.apache.org For additional commands, e-mail: reviews-h...@spark.apache.org