Github user rxin commented on a diff in the pull request:

    https://github.com/apache/spark/pull/14000#discussion_r69219668
  
    --- Diff: 
sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/trees/TreeNode.scala 
---
    @@ -342,33 +326,54 @@ abstract class TreeNode[BaseType <: 
TreeNode[BaseType]] extends Product {
               } else {
                 arg
               }
    -        case other => other
    -      }.view.force // `mapValues` is lazy and we need to force it to 
materialize
    -      case d: DataType => d // Avoid unpacking Structs
    -      case args: Traversable[_] => args.map {
    -        case arg: TreeNode[_] if containsChild(arg) =>
    +        case Some(arg: TreeNode[_]) if containsChild(arg) =>
               val newChild = nextOperation(arg.asInstanceOf[BaseType], rule)
               if (!(newChild fastEquals arg)) {
                 changed = true
    -            newChild
    +            Some(newChild)
               } else {
    -            arg
    +            Some(arg)
               }
    -        case tuple @ (arg1: TreeNode[_], arg2: TreeNode[_]) =>
    -          val newChild1 = nextOperation(arg1.asInstanceOf[BaseType], rule)
    -          val newChild2 = nextOperation(arg2.asInstanceOf[BaseType], rule)
    -          if (!(newChild1 fastEquals arg1) || !(newChild2 fastEquals 
arg2)) {
    -            changed = true
    -            (newChild1, newChild2)
    -          } else {
    -            tuple
    -          }
    -        case other => other
    +        case m: Map[_, _] => m.mapValues {
    +          case arg: TreeNode[_] if containsChild(arg) =>
    +            val newChild = nextOperation(arg.asInstanceOf[BaseType], rule)
    +            if (!(newChild fastEquals arg)) {
    +              changed = true
    +              newChild
    +            } else {
    +              arg
    +            }
    +          case other => other
    +        }.view.force // `mapValues` is lazy and we need to force it to 
materialize
    +        case d: DataType => d // Avoid unpacking Structs
    +        case args: Traversable[_] => args.map {
    +          case arg: TreeNode[_] if containsChild(arg) =>
    +            val newChild = nextOperation(arg.asInstanceOf[BaseType], rule)
    +            if (!(newChild fastEquals arg)) {
    +              changed = true
    +              newChild
    +            } else {
    +              arg
    +            }
    +          case tuple@(arg1: TreeNode[_], arg2: TreeNode[_]) =>
    +            val newChild1 = nextOperation(arg1.asInstanceOf[BaseType], 
rule)
    +            val newChild2 = nextOperation(arg2.asInstanceOf[BaseType], 
rule)
    +            if (!(newChild1 fastEquals arg1) || !(newChild2 fastEquals 
arg2)) {
    +              changed = true
    +              (newChild1, newChild2)
    +            } else {
    +              tuple
    +            }
    +          case other => other
    +        }
    +        case nonChild: AnyRef => nonChild
    +        case null => null
           }
    -      case nonChild: AnyRef => nonChild
    -      case null => null
    +      if (changed) makeCopy(newArgs) else this
    +    }
    --- End diff --
    
    a small style nit:
    ```
    } else {
      this
    }
    ```


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastruct...@apache.org or file a JIRA ticket
with INFRA.
---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscr...@spark.apache.org
For additional commands, e-mail: reviews-h...@spark.apache.org

Reply via email to