MaxGekk commented on code in PR #42524:
URL: https://github.com/apache/spark/pull/42524#discussion_r1350588319


##########
sql/core/src/main/scala/org/apache/spark/sql/execution/command/ddl.scala:
##########
@@ -415,13 +417,21 @@ case class AlterTableChangeColumnCommand(
     Seq.empty[Row]
   }
 
-  // Find the origin column from schema by column name, throw an 
AnalysisException if the column
-  // reference is invalid.
+  // Find the origin column from schema by column name
   private def findColumnByName(
-      schema: StructType, name: String, resolver: Resolver): StructField = {
+      schema: StructType, name: String, resolver: Resolver): 
Option[StructField] = {
     schema.fields.collectFirst {
       case field if resolver(field.name, name) => field
-    }.getOrElse(throw QueryCompilationErrors.cannotFindColumnError(name, 
schema.fieldNames))
+    }
+  }
+
+  private def verifyNonPartitionColumn(
+      table: CatalogTable, columnName: String, resolver: Resolver): Unit = {
+    findColumnByName(table.partitionSchema, columnName, resolver) match {
+      case Some(_) =>
+        throw 
QueryCompilationErrors.cannotAlterPartitionColumn(table.qualifiedName, 
columnName)
+      case None =>
+    }

Review Comment:
   Could you make it shorter:
   ```suggestion
       if (findColumnByName(table.dataSchema, columnName, resolver).isDefined) {
         throw 
QueryCompilationErrors.cannotAlterPartitionColumn(table.qualifiedName, 
columnName)
       }
   ```



##########
sql/core/src/main/scala/org/apache/spark/sql/execution/command/ddl.scala:
##########
@@ -415,13 +417,21 @@ case class AlterTableChangeColumnCommand(
     Seq.empty[Row]
   }
 
-  // Find the origin column from schema by column name, throw an 
AnalysisException if the column
-  // reference is invalid.
+  // Find the origin column from schema by column name
   private def findColumnByName(
-      schema: StructType, name: String, resolver: Resolver): StructField = {
+      schema: StructType, name: String, resolver: Resolver): 
Option[StructField] = {
     schema.fields.collectFirst {
       case field if resolver(field.name, name) => field
-    }.getOrElse(throw QueryCompilationErrors.cannotFindColumnError(name, 
schema.fieldNames))
+    }
+  }
+
+  private def verifyNonPartitionColumn(

Review Comment:
   If it is used only once, let's inline it.



##########
common/utils/src/main/resources/error/error-classes.json:
##########
@@ -97,6 +97,13 @@
       "The method <methodName> can not be called on streaming 
Dataset/DataFrame."
     ]
   },
+  "CANNOT_ALTER_PARTITION_COLUMN" : {
+    "message" : [
+      "ALTER TABLE (ALTER|CHANGE) COLUMN is not supported for partition 
columns.",
+      "<columnName> is a partition column in table <tableName>."

Review Comment:
   Let's follow other message in `error-classes.json`:
   ```suggestion
         "ALTER TABLE (ALTER|CHANGE) COLUMN is not supported for partition 
columns, but found the partition column <columnName> in the table <tableName>."
   ```



##########
common/utils/src/main/resources/error/error-classes.json:
##########
@@ -97,6 +97,13 @@
       "The method <methodName> can not be called on streaming 
Dataset/DataFrame."
     ]
   },
+  "CANNOT_ALTER_PARTITION_COLUMN" : {
+    "message" : [
+      "ALTER TABLE (ALTER|CHANGE) COLUMN is not supported for partition 
columns.",
+      "<columnName> is a partition column in table <tableName>."

Review Comment:
   nit:
   ```suggestion
         "<columnName> is a partition column in the table <tableName>."
   ```



-- 
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