Github user gengliangwang commented on a diff in the pull request:
https://github.com/apache/spark/pull/19475#discussion_r144184258
--- Diff:
sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/ExpressionSet.scala
---
@@ -74,9 +81,13 @@ class ExpressionSet protected(
}
override def -(elem: Expression): ExpressionSet = {
- val newBaseSet = baseSet.clone().filterNot(_ == elem.canonicalized)
- val newOriginals = originals.clone().filterNot(_.canonicalized ==
elem.canonicalized)
- new ExpressionSet(newBaseSet, newOriginals)
+ if (elem.deterministic) {
+ val newBaseSet = baseSet.clone().filterNot(_ == elem.canonicalized)
+ val newOriginals = originals.clone().filterNot(_.canonicalized ==
elem.canonicalized)
+ new ExpressionSet(newBaseSet, newOriginals)
+ } else {
+ new ExpressionSet(baseSet.clone(), originals.clone())
--- End diff --
There is no need to drop, since the non-deterministic `elem` is not in
`originals`.
---
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]