@@ -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