ctring commented on code in PR #49559:
URL: https://github.com/apache/spark/pull/49559#discussion_r1924272176


##########
sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/CheckAnalysis.scala:
##########
@@ -1622,60 +1622,84 @@ trait CheckAnalysis extends PredicateHelper with 
LookupCatalog with QueryErrorsB
       case RenameColumn(table: ResolvedTable, col: ResolvedFieldName, newName) 
=>
         checkColumnNotExists("rename", col.path :+ newName, table.schema)
 
-      case a @ AlterColumn(table: ResolvedTable, col: ResolvedFieldName, _, _, 
_, _, _) =>
-        val fieldName = col.name.quoted
-        if (a.dataType.isDefined) {
-          val field = CharVarcharUtils.getRawType(col.field.metadata)
-            .map(dt => col.field.copy(dataType = dt))
-            .getOrElse(col.field)
-          val newDataType = a.dataType.get
-          newDataType match {
-            case _: StructType => alter.failAnalysis(
-              "CANNOT_UPDATE_FIELD.STRUCT_TYPE",
-              Map("table" -> toSQLId(table.name), "fieldName" -> 
toSQLId(fieldName)))
-            case _: MapType => alter.failAnalysis(
-              "CANNOT_UPDATE_FIELD.MAP_TYPE",
-              Map("table" -> toSQLId(table.name), "fieldName" -> 
toSQLId(fieldName)))
-            case _: ArrayType => alter.failAnalysis(
-              "CANNOT_UPDATE_FIELD.ARRAY_TYPE",
-              Map("table" -> toSQLId(table.name), "fieldName" -> 
toSQLId(fieldName)))
-            case u: UserDefinedType[_] => alter.failAnalysis(
-              "CANNOT_UPDATE_FIELD.USER_DEFINED_TYPE",
-              Map(
-                "table" -> toSQLId(table.name),
-                "fieldName" -> toSQLId(fieldName),
-                "udtSql" -> toSQLType(u)))
-            case _: CalendarIntervalType | _: AnsiIntervalType => 
alter.failAnalysis(
-              "CANNOT_UPDATE_FIELD.INTERVAL_TYPE",
-              Map("table" -> toSQLId(table.name), "fieldName" -> 
toSQLId(fieldName)))
-            case _ => // update is okay
-          }
-
-          // We don't need to handle nested types here which shall fail before.
-          def canAlterColumnType(from: DataType, to: DataType): Boolean = 
(from, to) match {
-            case (CharType(l1), CharType(l2)) => l1 == l2
-            case (CharType(l1), VarcharType(l2)) => l1 <= l2
-            case (VarcharType(l1), VarcharType(l2)) => l1 <= l2
-            case _ => Cast.canUpCast(from, to)
-          }
-          if (!canAlterColumnType(field.dataType, newDataType)) {
+      case AlterColumns(table: ResolvedTable, columns, specs) =>
+        val groupedColumns = columns.groupBy(_.name)
+        groupedColumns.collect {
+          case (name, occurrences) if occurrences.length > 1 =>
             alter.failAnalysis(
-              errorClass = "NOT_SUPPORTED_CHANGE_COLUMN",
+              errorClass = "NOT_SUPPORTED_CHANGE_SAME_COLUMN",
               messageParameters = Map(
                 "table" -> toSQLId(table.name),
-                "originName" -> toSQLId(fieldName),
-                "originType" -> toSQLType(field.dataType),
-                "newName" -> toSQLId(fieldName),
-                "newType" -> toSQLType(newDataType)))
-          }
+                "fieldName" -> toSQLId(name)))
         }
-        if (a.nullable.isDefined) {
-          if (!a.nullable.get && col.field.nullable) {
+        groupedColumns.keys.foreach { name =>
+          val child = groupedColumns.keys.find(child => child != name && 
child.startsWith(name))

Review Comment:
   `name` and `child` are `Seq` of the name parts so `startsWith` is matching 
the name part prefix.



-- 
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: reviews-unsubscr...@spark.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


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

Reply via email to