Skip to content

Commit f401175

Browse files
committed
Code review
1 parent 5f4e8b3 commit f401175

File tree

1 file changed

+11
-20
lines changed

1 file changed

+11
-20
lines changed

sql/core/src/main/scala/org/apache/spark/sql/execution/ExplainUtils.scala

Lines changed: 11 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -53,11 +53,6 @@ object ExplainUtils {
5353
append: String => Unit,
5454
startOperatorID: Int): Int = {
5555

56-
// ReusedSubqueryExecs are skipped over
57-
if (plan.isInstanceOf[BaseSubqueryExec]) {
58-
return startOperatorID
59-
}
60-
6156
val operationIDs = new mutable.ArrayBuffer[(Int, QueryPlan[_])]()
6257
var currentOperatorID = startOperatorID
6358
try {
@@ -91,19 +86,12 @@ object ExplainUtils {
9186
plan: => QueryPlan[T],
9287
append: String => Unit): Unit = {
9388
try {
94-
val subqueries = ArrayBuffer.empty[(SparkPlan, Expression, SparkPlan)]
89+
val subqueries = ArrayBuffer.empty[(SparkPlan, Expression, BaseSubqueryExec)]
9590
var currentOperatorID = 0
9691
currentOperatorID = processPlanSkippingSubqueries(plan, append, currentOperatorID)
9792
getSubqueries(plan, subqueries)
9893
var i = 0
9994

100-
/**
101-
* 1. [[getSubqueries]] collects the child plan [[BaseSubqueryExec]]
102-
* 2. [[processPlan]] checks the collected child plan of [[BaseSubqueryExec]]. If child plan
103-
* is an instance of [[BaseSubqueryExec]] (happens in case of `ReusedSubqueryExec`), then
104-
* it skips calling [[processPlanSkippingSubqueries]] in order to avoid printing the same
105-
* subquery plan more than once.
106-
*/
10795
for (sub <- subqueries) {
10896
if (i == 0) {
10997
append("\n===== Subqueries =====\n\n")
@@ -113,11 +101,14 @@ object ExplainUtils {
113101
s"${getOpId(sub._1)} Hosting Expression = ${sub._2}\n")
114102

115103
// For each subquery expression in the parent plan, process its child plan to compute
116-
// the explain output.
117-
currentOperatorID = processPlanSkippingSubqueries(
118-
sub._3,
119-
append,
120-
currentOperatorID)
104+
// the explain output. In case of subquery reuse, we don't print subquery plan more
105+
// than once. So we skip [[ReusedSubqueryExec]] here.
106+
if (!sub._3.isInstanceOf[ReusedSubqueryExec]) {
107+
currentOperatorID = processPlanSkippingSubqueries(
108+
sub._3.child,
109+
append,
110+
currentOperatorID)
111+
}
121112
append("\n")
122113
}
123114
} finally {
@@ -199,14 +190,14 @@ object ExplainUtils {
199190
*/
200191
private def getSubqueries(
201192
plan: => QueryPlan[_],
202-
subqueries: ArrayBuffer[(SparkPlan, Expression, SparkPlan)]): Unit = {
193+
subqueries: ArrayBuffer[(SparkPlan, Expression, BaseSubqueryExec)]): Unit = {
203194
plan.foreach {
204195
case p: SparkPlan =>
205196
p.expressions.flatMap(_.collect {
206197
case e: PlanExpression[_] =>
207198
e.plan match {
208199
case s: BaseSubqueryExec =>
209-
subqueries += ((p, e, s.child))
200+
subqueries += ((p, e, s))
210201
getSubqueries(s, subqueries)
211202
}
212203
case other =>

0 commit comments

Comments
 (0)