Skip to content

Commit ab78420

Browse files
Add a test.
1 parent 2ccb721 commit ab78420

File tree

2 files changed

+28
-1
lines changed

2 files changed

+28
-1
lines changed

sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/trees/TreeNode.scala

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -289,7 +289,8 @@ abstract class TreeNode[BaseType <: TreeNode[BaseType]] {
289289
} catch {
290290
case e: java.lang.IllegalArgumentException =>
291291
throw new TreeNodeException(
292-
this, s"Failed to copy node. Is otherCopyArgs specified correctly for $nodeName?")
292+
this, s"Failed to copy node. Is otherCopyArgs specified correctly for $nodeName? "
293+
+ s"Exception message: ${e.getMessage}.")
293294
}
294295
}
295296

sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/trees/TreeNodeSuite.scala

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import scala.collection.mutable.ArrayBuffer
2222
import org.scalatest.FunSuite
2323

2424
import org.apache.spark.sql.catalyst.expressions._
25+
import org.apache.spark.sql.catalyst.types.{StringType, NullType}
2526

2627
class TreeNodeSuite extends FunSuite {
2728
test("top node changed") {
@@ -75,4 +76,29 @@ class TreeNodeSuite extends FunSuite {
7576

7677
assert(expected === actual)
7778
}
79+
80+
test("transform works on nodes with Option children") {
81+
case class Dummy(optKey: Option[Expression]) extends Expression {
82+
def children = optKey.toSeq
83+
def references = Set.empty[Attribute]
84+
def nullable = true
85+
def dataType = NullType
86+
override lazy val resolved = true
87+
type EvaluatedType = Any
88+
def eval(input: Row) = null.asInstanceOf[Any]
89+
}
90+
val dummy1 = Dummy(Some(Literal("1", StringType)))
91+
val dummy2 = Dummy(None)
92+
val toZero: PartialFunction[Expression, Expression] = { case Literal(_, _) => Literal(0) }
93+
94+
var actual = dummy1 transformDown toZero
95+
assert(actual === Dummy(Some(Literal(0))))
96+
97+
actual = dummy1 transformUp toZero
98+
assert(actual === Dummy(Some(Literal(0))))
99+
100+
actual = dummy2 transform toZero
101+
assert(actual === Dummy(None))
102+
}
103+
78104
}

0 commit comments

Comments
 (0)