aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorReynold Xin <rxin@databricks.com>2016-12-14 21:08:45 -0800
committerReynold Xin <rxin@databricks.com>2016-12-14 21:08:45 -0800
commit5d510c693aca8c3fd3364b4453160bc8585ffc8e (patch)
tree50b3bdbcb4911434663e72160795e70428661621
parentd6f11a12a146a863553c5a5e2023d79d4375ef3f (diff)
downloadspark-5d510c693aca8c3fd3364b4453160bc8585ffc8e.tar.gz
spark-5d510c693aca8c3fd3364b4453160bc8585ffc8e.tar.bz2
spark-5d510c693aca8c3fd3364b4453160bc8585ffc8e.zip
[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 <rxin@databricks.com> Closes #16288 from rxin/SPARK-18869.
-rw-r--r--sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/plans/QueryPlan.scala9
-rw-r--r--sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/trees/TreeNode.scala10
2 files changed, 9 insertions, 10 deletions
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 e67f2be6d2..b108017c4c 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]
/**
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 670fa2bc8d..8cc16d662b 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
@@ -498,7 +498,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
@@ -507,6 +507,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