AngersZhuuuu commented on a change in pull request #33587:
URL: https://github.com/apache/spark/pull/33587#discussion_r682478603



##########
File path: 
sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/unresolved.scala
##########
@@ -333,6 +333,9 @@ abstract class Star extends LeafExpression with 
NamedExpression {
   override def qualifier: Seq[String] = throw new 
UnresolvedException("qualifier")
   override def toAttribute: Attribute = throw new 
UnresolvedException("toAttribute")
   override def newInstance(): NamedExpression = throw new 
UnresolvedException("newInstance")
+
+  override def withName(newName: String): NamedExpression =

Review comment:
       Done

##########
File path: 
sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/optimizer/Optimizer.scala
##########
@@ -518,7 +518,22 @@ object RemoveNoopOperators extends Rule[LogicalPlan] {
   def apply(plan: LogicalPlan): LogicalPlan = plan.transformUpWithPruning(
     _.containsAnyPattern(PROJECT, WINDOW), ruleId) {
     // Eliminate no-op Projects
-    case p @ Project(_, child) if child.sameOutput(p) => child
+    case p @ Project(output, child) if child.sameOutput(p) =>
+      child match {
+        case _: Project | _: Aggregate =>

Review comment:
       Done

##########
File path: 
sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/optimizer/Optimizer.scala
##########
@@ -518,7 +518,36 @@ object RemoveNoopOperators extends Rule[LogicalPlan] {
   def apply(plan: LogicalPlan): LogicalPlan = plan.transformUpWithPruning(
     _.containsAnyPattern(PROJECT, WINDOW), ruleId) {
     // Eliminate no-op Projects
-    case p @ Project(_, child) if child.sameOutput(p) => child
+    case p @ Project(projectList, child) if child.sameOutput(p) =>
+      val newChild = child match {
+        case p: Project =>
+          val newList = p.projectList.map {

Review comment:
       Done

##########
File path: 
sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/optimizer/Optimizer.scala
##########
@@ -515,10 +515,37 @@ object RemoveRedundantAliases extends Rule[LogicalPlan] {
  * Remove no-op operators from the query plan that do not make any 
modifications.
  */
 object RemoveNoopOperators extends Rule[LogicalPlan] {
+  def resolveOutputAttrName(

Review comment:
       > nit: `restoreOriginalOutputName`
   
   Done

##########
File path: 
sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/optimizer/Optimizer.scala
##########
@@ -515,10 +515,37 @@ object RemoveRedundantAliases extends Rule[LogicalPlan] {
  * Remove no-op operators from the query plan that do not make any 
modifications.
  */
 object RemoveNoopOperators extends Rule[LogicalPlan] {
+  def resolveOutputAttrName(
+      output: Seq[NamedExpression],
+      projectList: Seq[NamedExpression]): Seq[NamedExpression] = {
+    output.map {
+      case attr: Attribute =>
+        
attr.withName(projectList.find(_.semanticEquals(attr)).getOrElse(attr).name)

Review comment:
       In current approach don't need find

##########
File path: 
sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/optimizer/Optimizer.scala
##########
@@ -518,7 +518,25 @@ object RemoveNoopOperators extends Rule[LogicalPlan] {
   def apply(plan: LogicalPlan): LogicalPlan = plan.transformUpWithPruning(
     _.containsAnyPattern(PROJECT, WINDOW), ruleId) {
     // Eliminate no-op Projects
-    case p @ Project(_, child) if child.sameOutput(p) => child
+    case p @ Project(output, child) if child.sameOutput(p) =>
+      child match {
+        case relation: LeafNode
+          if !output.zip(relation.output).forall { case (a1, a2) => a1.name == 
a2.name } =>
+          p
+        case _ =>
+          val ret = child.transformExpressionsDown {
+            case named: NamedExpression =>

Review comment:
       Changed

##########
File path: 
sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/optimizer/Optimizer.scala
##########
@@ -515,10 +515,37 @@ object RemoveRedundantAliases extends Rule[LogicalPlan] {
  * Remove no-op operators from the query plan that do not make any 
modifications.
  */
 object RemoveNoopOperators extends Rule[LogicalPlan] {
+  def resolveOutputAttrName(
+      output: Seq[NamedExpression],
+      projectList: Seq[NamedExpression]): Seq[NamedExpression] = {
+    output.map {
+      case attr: Attribute =>
+        
attr.withName(projectList.find(_.semanticEquals(attr)).getOrElse(attr).name)

Review comment:
       Changed

##########
File path: 
sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/optimizer/Optimizer.scala
##########
@@ -515,10 +515,37 @@ object RemoveRedundantAliases extends Rule[LogicalPlan] {
  * Remove no-op operators from the query plan that do not make any 
modifications.
  */
 object RemoveNoopOperators extends Rule[LogicalPlan] {
+  def restoreOriginalOutputName(

Review comment:
       Done

##########
File path: 
sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/optimizer/Optimizer.scala
##########
@@ -515,10 +515,33 @@ object RemoveRedundantAliases extends Rule[LogicalPlan] {
  * Remove no-op operators from the query plan that do not make any 
modifications.
  */
 object RemoveNoopOperators extends Rule[LogicalPlan] {
+  def restoreOriginalOutputNames(
+      projectList: Seq[NamedExpression],
+      originalNames: Seq[String]): Seq[NamedExpression] = {
+    projectList.zip(originalNames).map {
+      case (attr: Attribute, name) => attr.withName(name)
+      case (alias: Alias, name) => alias.withName(name)

Review comment:
       Ok, done




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to