Skip to content

Commit 331af59

Browse files
committed
add guard and remove ultimateStruct method
1 parent 2f16213 commit 331af59

File tree

1 file changed

+4
-10
lines changed

1 file changed

+4
-10
lines changed

sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/optimizer/ComplexTypes.scala

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -40,13 +40,13 @@ object SimplifyExtractValueOps extends Rule[LogicalPlan] {
4040
// Remove redundant field extraction.
4141
case GetStructField(createNamedStruct: CreateNamedStruct, ordinal, _) =>
4242
createNamedStruct.valExprs(ordinal)
43-
case GetStructField(updateFields: UpdateFields, ordinal, _) =>
44-
val structExpr = updateFields.structExpr
45-
updateFields.newExprs(ordinal) match {
43+
case GetStructField(u: UpdateFields, ordinal, _) if !u.structExpr.isInstanceOf[UpdateFields] =>
44+
val structExpr = u.structExpr
45+
u.newExprs(ordinal) match {
4646
// if the struct itself is null, then any value extracted from it (expr) will be null
4747
// so we don't need to wrap expr in If(IsNull(struct), Literal(null, expr.dataType), expr)
4848
case expr: GetStructField if expr.child.semanticEquals(structExpr) => expr
49-
case expr => If(IsNull(ultimateStruct(structExpr)), Literal(null, expr.dataType), expr)
49+
case expr => If(IsNull(structExpr), Literal(null, expr.dataType), expr)
5050
}
5151
// Remove redundant array indexing.
5252
case GetArrayStructFields(CreateArray(elems, useStringTypeWhenEmpty), field, ordinal, _, _) =>
@@ -69,10 +69,4 @@ object SimplifyExtractValueOps extends Rule[LogicalPlan] {
6969
case GetMapValue(CreateMap(elems, _), key) => CaseKeyWhen(key, elems)
7070
}
7171
}
72-
73-
@scala.annotation.tailrec
74-
private def ultimateStruct(expr: Expression): Expression = expr match {
75-
case e: UpdateFields => ultimateStruct(e.structExpr)
76-
case e => e
77-
}
7872
}

0 commit comments

Comments
 (0)