Skip to content

Commit 47d406a

Browse files
Do toArray once and lazily outside of eval().
1 parent bb3d109 commit 47d406a

File tree

1 file changed

+4
-2
lines changed
  • sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions

1 file changed

+4
-2
lines changed

sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/predicates.scala

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -243,9 +243,10 @@ case class CaseWhen(branches: Seq[Expression]) extends Expression {
243243
if (!childrenResolved) false else allCondBooleans && dataTypesEqual
244244
}
245245

246+
private lazy val branchesArr = branches.toArray
247+
246248
/** Written in imperative fashion for performance considerations. Same for CaseKeyWhen. */
247249
override def eval(input: Row): Any = {
248-
val branchesArr = branches.toArray
249250
val len = branchesArr.length
250251
var i = 0
251252
// If all branches fail and an elseVal is not provided, the whole statement
@@ -306,9 +307,10 @@ case class CaseKeyWhen(key: Expression, branches: Seq[Expression]) extends Expre
306307
if (!childrenResolved) false else dataTypesEqual
307308
}
308309

310+
private lazy val branchesArr = branches.toArray
311+
309312
override def eval(input: Row): Any = {
310313
val evaledKey = key.eval(input)
311-
val branchesArr = branches.toArray
312314
val len = branchesArr.length
313315
var i = 0
314316
// If all branches fail and an elseVal is not provided, the whole statement

0 commit comments

Comments
 (0)