This is an automated email from the ASF dual-hosted git repository.

dongjoon pushed a commit to branch branch-4.1
in repository https://gitbox.apache.org/repos/asf/spark.git


The following commit(s) were added to refs/heads/branch-4.1 by this push:
     new 7012a923fd81 [SPARK-54578][SQL] Perform Code Cleanup on 
`AssignmentUtils`
7012a923fd81 is described below

commit 7012a923fd81c9cf5740670333241627a95de4fc
Author: yangjie01 <[email protected]>
AuthorDate: Thu Dec 4 08:50:25 2025 -0800

    [SPARK-54578][SQL] Perform Code Cleanup on `AssignmentUtils`
    
    ### What changes were proposed in this pull request?
    This PR performs a code cleanup on `AssignmentUtils`:
    
    1. Deleted the redundant private methods `getMissingSourcePaths` and 
`createNullCheckForFieldPath`, which were introduced in 
https://github.com/apache/spark/pull/53149 but became obsolete after 
https://github.com/apache/spark/pull/53229.
    
    2. Removed the redundant documentation for the invalid input parameter 
`missingSourcePaths` in the `alignUpdateAssignments` method.
    
    3. Removed the unused input parameter `updateStar` from the private method 
`applyAssignments`.
    
    4. Corrected a spelling error in the input parameter `coerceNestedTypes` of 
the private method `applyFieldAssignments`.
    
    ### Why are the changes needed?
    Code Cleanup.
    
    ### Does this PR introduce _any_ user-facing change?
    No
    
    ### How was this patch tested?
    - Pass Github Actions
    
    ### Was this patch authored or co-authored using generative AI tooling?
    No
    
    Closes #53302 from LuciferYang/SPARK-54578.
    
    Lead-authored-by: yangjie01 <[email protected]>
    Co-authored-by: YangJie <[email protected]>
    Signed-off-by: Dongjoon Hyun <[email protected]>
    (cherry picked from commit 8b5d900e0f7899dd17b91b6e5293eaca7947ee4e)
    Signed-off-by: Dongjoon Hyun <[email protected]>
---
 .../sql/catalyst/analysis/AssignmentUtils.scala    | 59 ++--------------------
 1 file changed, 5 insertions(+), 54 deletions(-)

diff --git 
a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/AssignmentUtils.scala
 
b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/AssignmentUtils.scala
index c9ed5b86dbde..6c7b0626e81e 100644
--- 
a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/AssignmentUtils.scala
+++ 
b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/AssignmentUtils.scala
@@ -21,7 +21,7 @@ import scala.collection.mutable
 
 import org.apache.spark.sql.catalyst.SQLConfHelper
 import 
org.apache.spark.sql.catalyst.analysis.TableOutputResolver.DefaultValueFillMode.{NONE,
 RECURSE}
-import org.apache.spark.sql.catalyst.expressions.{Attribute, 
CreateNamedStruct, Expression, GetStructField, IsNull, Literal}
+import org.apache.spark.sql.catalyst.expressions.{Attribute, 
CreateNamedStruct, Expression, GetStructField, Literal}
 import org.apache.spark.sql.catalyst.plans.logical.Assignment
 import org.apache.spark.sql.catalyst.types.DataTypeUtils
 import org.apache.spark.sql.catalyst.util.CharVarcharUtils
@@ -55,7 +55,6 @@ object AssignmentUtils extends SQLConfHelper with CastSupport 
{
    *                 (preserving existing fields).
    * @param coerceNestedTypes whether to coerce nested types to match the 
target type
    *                         for complex types
-   * @param missingSourcePaths paths that exist in target but not in source
    * @return aligned update assignments that match table attributes
    */
   def alignUpdateAssignments(
@@ -73,8 +72,7 @@ object AssignmentUtils extends SQLConfHelper with CastSupport 
{
         assignments,
         addError = err => errors += err,
         colPath = Seq(attr.name),
-        coerceNestedTypes,
-        fromStar)
+        coerceNestedTypes)
     }
 
     if (errors.nonEmpty) {
@@ -158,8 +156,7 @@ object AssignmentUtils extends SQLConfHelper with 
CastSupport {
       assignments: Seq[Assignment],
       addError: String => Unit,
       colPath: Seq[String],
-      coerceNestedTypes: Boolean = false,
-      updateStar: Boolean = false): Expression = {
+      coerceNestedTypes: Boolean = false): Expression = {
 
     val (exactAssignments, otherAssignments) = assignments.partition { 
assignment =>
       assignment.key.semanticEquals(colExpr)
@@ -197,7 +194,7 @@ object AssignmentUtils extends SQLConfHelper with 
CastSupport {
       assignments: Seq[Assignment],
       addError: String => Unit,
       colPath: Seq[String],
-      coerceNestedTyptes: Boolean): Expression = {
+      coerceNestedTypes: Boolean): Expression = {
 
     col.dataType match {
       case structType: StructType =>
@@ -207,7 +204,7 @@ object AssignmentUtils extends SQLConfHelper with 
CastSupport {
         }
         val updatedFieldExprs = fieldAttrs.zip(fieldExprs).map { case 
(fieldAttr, fieldExpr) =>
           applyAssignments(fieldAttr, fieldExpr, assignments, addError, 
colPath :+ fieldAttr.name,
-            coerceNestedTyptes)
+            coerceNestedTypes)
         }
         toNamedStruct(structType, updatedFieldExprs)
 
@@ -226,52 +223,6 @@ object AssignmentUtils extends SQLConfHelper with 
CastSupport {
     CreateNamedStruct(namedStructExprs)
   }
 
-  private def getMissingSourcePaths(targetType: StructType,
-                                 sourceType: DataType,
-                                 colPath: Seq[String],
-                                 addError: String => Unit): Seq[Seq[String]] = 
{
-    val nestedTargetPaths = DataTypeUtils.extractLeafFieldPaths(targetType, 
Seq.empty)
-    val nestedSourcePaths = sourceType match {
-      case sourceStructType: StructType =>
-        DataTypeUtils.extractLeafFieldPaths(sourceStructType, Seq.empty)
-      case _ =>
-        addError(s"Value for struct type: " +
-          s"${colPath.quoted} must be a struct but was 
${sourceType.simpleString}")
-        Seq()
-    }
-    nestedSourcePaths.diff(nestedTargetPaths)
-  }
-
-  /**
-   * Creates a null check for a field at the given path within a struct 
expression.
-   * Navigates through the struct hierarchy following the path and returns an 
IsNull check
-   * for the final field.
-   *
-   * @param rootExpr the root expression to navigate from
-   * @param path the field path to navigate (sequence of field names)
-   * @return an IsNull expression checking if the field at the path is null
-   */
-  private def createNullCheckForFieldPath(
-      rootExpr: Expression,
-      path: Seq[String]): Expression = {
-    var currentExpr: Expression = rootExpr
-    path.foreach { fieldName =>
-      currentExpr.dataType match {
-        case st: StructType =>
-          st.fields.find(f => conf.resolver(f.name, fieldName)) match {
-            case Some(field) =>
-              val fieldIndex = st.fieldIndex(field.name)
-              currentExpr = GetStructField(currentExpr, fieldIndex, 
Some(field.name))
-            case None =>
-              // Field not found, shouldn't happen
-          }
-        case _ =>
-          // Not a struct, shouldn't happen
-      }
-    }
-    IsNull(currentExpr)
-  }
-
   /**
    * Checks whether assignments are aligned and compatible with table columns.
    *


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

Reply via email to