Kimahriman commented on code in PR #34558:
URL: https://github.com/apache/spark/pull/34558#discussion_r1198873238
##########
sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/higherOrderFunctions.scala:
##########
@@ -235,6 +256,53 @@ trait HigherOrderFunction extends Expression with
ExpectsInputTypes {
val canonicalizedChildren = cleaned.children.map(_.canonicalized)
withNewChildren(canonicalizedChildren)
}
+
+
+ protected def assignAtomic(atomicRef: String, value: String, isNull: String
= FalseLiteral,
+ nullable: Boolean = false) = {
+ if (nullable) {
+ s"""
+ if ($isNull) {
+ $atomicRef.set(null);
+ } else {
+ $atomicRef.set($value);
+ }
+ """
+ } else {
+ s"$atomicRef.set($value);"
+ }
+ }
+
+ protected def assignArrayElement(ctx: CodegenContext, arrayName: String,
elementCode: ExprCode,
+ elementVar: NamedLambdaVariable, index: String): String = {
+ val elementType = elementVar.dataType
+ val elementAtomic = ctx.addReferenceObj(elementVar.name, elementVar.value)
+ val extractElement = CodeGenerator.getValue(arrayName, elementType, index)
Review Comment:
The atomic references are for cases where you might have a `CodegenFallback`
expression inside your lambda function. I think the only way an
`expression.eval(input)` will work is if this atomic reference is set to the
lambda variable value as well. I could potentially try to detect if the
function has a `CodegenFallback` expression, but I wasn't sure if there were
other reasons some expression would fall back to interpreted inside the lambda
function that I couldn't detect.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]