@@ -907,7 +907,6 @@ public void addVersionedAssignment(Consumer<Assignment> assignmentConsumer, SqmU
907907 @ Override
908908 public List <Assignment > visitSetClause (SqmSetClause setClause ) {
909909 final ArrayList <Assignment > assignments = new ArrayList <>( setClause .getAssignments ().size () );
910- final ArrayList <ColumnReference > targetColumnReferences = new ArrayList <>( 1 );
911910
912911 final SqmRoot <?> target = ( (SqmDmlStatement <?>) currentSqmStatement ).getTarget ();
913912 final String entityName = target .getEntityName ();
@@ -924,12 +923,14 @@ public List<Assignment> visitSetClause(SqmSetClause setClause) {
924923 );
925924
926925 for ( SqmAssignment <?> sqmAssignment : setClause .getAssignments () ) {
927- targetColumnReferences .clear ();
928-
929926 final SqmPathInterpretation <?> assignedPathInterpretation ;
930927 try {
931928 pushProcessingState (
932- createAssignmentProcessingState ( targetColumnReferences ),
929+ new SqlAstProcessingStateImpl (
930+ getCurrentProcessingState (),
931+ this ,
932+ getCurrentClauseStack ()::getCurrent
933+ ),
933934 getFromClauseIndex ()
934935 );
935936 currentClauseStack .push ( Clause .SET );
@@ -947,6 +948,15 @@ public List<Assignment> visitSetClause(SqmSetClause setClause) {
947948
948949 final SqmExpression <?> assignmentValue = sqmAssignment .getValue ();
949950 final SqmParameter <?> assignmentValueParameter = getSqmParameter ( assignmentValue );
951+ final Expression pathSqlExpression = assignedPathInterpretation .getSqlExpression ();
952+ final List <ColumnReference > targetColumnReferences ;
953+ if ( pathSqlExpression instanceof SqlTuple ) {
954+ //noinspection unchecked
955+ targetColumnReferences = (List <ColumnReference >) ( (SqlTuple ) pathSqlExpression ).getExpressions ();
956+ }
957+ else {
958+ targetColumnReferences = pathSqlExpression .getColumnReference ().getColumnReferences ();
959+ }
950960 if ( assignmentValueParameter != null ) {
951961 consumeSqmParameter (
952962 assignmentValueParameter ,
@@ -1013,22 +1023,6 @@ else if ( assignmentValue instanceof SqmLiteralNull<?> ) {
10131023 return assignments ;
10141024 }
10151025
1016- private SqlAstProcessingStateImpl createAssignmentProcessingState (ArrayList <ColumnReference > targetColumnReferences ) {
1017- return new SqlAstProcessingStateImpl ( getCurrentProcessingState (), this , getCurrentClauseStack ()::getCurrent ) {
1018- @ Override
1019- public Expression resolveSqlExpression (
1020- ColumnReferenceKey key ,
1021- Function <SqlAstProcessingState , Expression > creator ) {
1022- final Expression expression = getParentState ()
1023- .getSqlExpressionResolver ()
1024- .resolveSqlExpression ( key , creator );
1025- assert expression instanceof ColumnReference ;
1026- targetColumnReferences .add ( (ColumnReference ) expression );
1027- return expression ;
1028- }
1029- };
1030- }
1031-
10321026 private void addAssignment (
10331027 List <Assignment > assignments ,
10341028 AggregateColumnAssignmentHandler aggregateColumnAssignmentHandler ,
0 commit comments