Repository: spark Updated Branches: refs/heads/branch-2.0 a32317845 -> 669815d44
[SPARK-18869][SQL] Add TreeNode.p that returns BaseType ## What changes were proposed in this pull request? After the bug fix in SPARK-18854, TreeNode.apply now returns TreeNode[_] rather than a more specific type. It would be easier for interactive debugging to introduce a function that returns the BaseType. ## How was this patch tested? N/A - this is a developer only feature used for interactive debugging. As long as it compiles, it should be good to go. I tested this in spark-shell. Author: Reynold Xin <[email protected]> Closes #16288 from rxin/SPARK-18869. (cherry picked from commit 5d510c693aca8c3fd3364b4453160bc8585ffc8e) Signed-off-by: Reynold Xin <[email protected]> Project: http://git-wip-us.apache.org/repos/asf/spark/repo Commit: http://git-wip-us.apache.org/repos/asf/spark/commit/669815d4 Tree: http://git-wip-us.apache.org/repos/asf/spark/tree/669815d4 Diff: http://git-wip-us.apache.org/repos/asf/spark/diff/669815d4 Branch: refs/heads/branch-2.0 Commit: 669815d44066603f25ca1eae11cfa940ac901aca Parents: a323178 Author: Reynold Xin <[email protected]> Authored: Wed Dec 14 21:08:45 2016 -0800 Committer: Reynold Xin <[email protected]> Committed: Wed Dec 14 21:08:59 2016 -0800 ---------------------------------------------------------------------- .../org/apache/spark/sql/catalyst/plans/QueryPlan.scala | 9 --------- .../org/apache/spark/sql/catalyst/trees/TreeNode.scala | 10 +++++++++- 2 files changed, 9 insertions(+), 10 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/spark/blob/669815d4/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/plans/QueryPlan.scala ---------------------------------------------------------------------- diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/plans/QueryPlan.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/plans/QueryPlan.scala index bcc7521..41c4e00 100644 --- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/plans/QueryPlan.scala +++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/plans/QueryPlan.scala @@ -24,15 +24,6 @@ import org.apache.spark.sql.types.{DataType, StructType} abstract class QueryPlan[PlanType <: QueryPlan[PlanType]] extends TreeNode[PlanType] { self: PlanType => - /** - * Override [[TreeNode.apply]] to so we can return a more narrow type. - * - * Note that this cannot return BaseType because logical plan's plan node might return - * physical plan for innerChildren, e.g. in-memory relation logical plan node has a reference - * to the physical plan node it is referencing. - */ - override def apply(number: Int): QueryPlan[_] = super.apply(number).asInstanceOf[QueryPlan[_]] - def output: Seq[Attribute] /** http://git-wip-us.apache.org/repos/asf/spark/blob/669815d4/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/trees/TreeNode.scala ---------------------------------------------------------------------- diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/trees/TreeNode.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/trees/TreeNode.scala index 78cc0fa..c511e6a 100644 --- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/trees/TreeNode.scala +++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/trees/TreeNode.scala @@ -492,7 +492,7 @@ abstract class TreeNode[BaseType <: TreeNode[BaseType]] extends Product { treeString.split("\n").zipWithIndex.map { case (line, i) => f"$i%02d $line" }.mkString("\n") /** - * Returns the tree node at the specified number. + * Returns the tree node at the specified number, used primarily for interactive debugging. * Numbers for each node can be found in the [[numberedTreeString]]. * * Note that this cannot return BaseType because logical plan's plan node might return @@ -501,6 +501,14 @@ abstract class TreeNode[BaseType <: TreeNode[BaseType]] extends Product { */ def apply(number: Int): TreeNode[_] = getNodeNumbered(new MutableInt(number)).orNull + /** + * Returns the tree node at the specified number, used primarily for interactive debugging. + * Numbers for each node can be found in the [[numberedTreeString]]. + * + * This is a variant of [[apply]] that returns the node as BaseType (if the type matches). + */ + def p(number: Int): BaseType = apply(number).asInstanceOf[BaseType] + private def getNodeNumbered(number: MutableInt): Option[TreeNode[_]] = { if (number.i < 0) { None --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
