@@ -109,6 +109,7 @@ case class CollapseNestedExpressions(spark: SparkSession) extends Rule[SparkPlan
109
109
var name = getExpressionName(expr)
110
110
var children = Seq .empty[Expression ]
111
111
var dataType = null .asInstanceOf [DataType ]
112
+ var nestedFunctions = 0
112
113
113
114
def f (e : Expression , parent : Option [Expression ] = Option .empty[Expression ]): Unit = {
114
115
parent match {
@@ -123,6 +124,7 @@ case class CollapseNestedExpressions(spark: SparkSession) extends Rule[SparkPlan
123
124
case Some (_ : And ) | None =>
124
125
f(a.left, Option .apply(a))
125
126
f(a.right, Option .apply(a))
127
+ nestedFunctions += 1
126
128
case _ =>
127
129
children +:= optimize(a)
128
130
}
@@ -131,6 +133,7 @@ case class CollapseNestedExpressions(spark: SparkSession) extends Rule[SparkPlan
131
133
case Some (_ : Or ) | None =>
132
134
f(o.left, parent = Option .apply(o))
133
135
f(o.right, parent = Option .apply(o))
136
+ nestedFunctions += 1
134
137
case _ =>
135
138
children +:= optimize(o)
136
139
}
@@ -139,13 +142,14 @@ case class CollapseNestedExpressions(spark: SparkSession) extends Rule[SparkPlan
139
142
children +:= optimize(e)
140
143
} else {
141
144
children = Seq .empty[Expression ]
145
+ nestedFunctions = 0
142
146
val exprNewChildren = e.children.map(p => optimize(p))
143
147
resultExpr = e.withNewChildren(exprNewChildren)
144
148
}
145
149
}
146
150
}
147
151
f(expr)
148
- if (name.isDefined || collapsedExpressionExists(children)) {
152
+ if ((nestedFunctions > 1 && name.isDefined) || collapsedExpressionExists(children)) {
149
153
CHCollapsedExpression (dataType, children, name.getOrElse(" " ), expr.nullable)
150
154
} else {
151
155
resultExpr
0 commit comments