Skip to content

Commit 48236e3

Browse files
beikovsebersole
authored andcommitted
HHH-16198 - Fix splitting of SqlAstCreationState
1 parent 7b58a33 commit 48236e3

File tree

1 file changed

+14
-20
lines changed

1 file changed

+14
-20
lines changed

hibernate-core/src/main/java/org/hibernate/query/sqm/sql/BaseSqmToSqlAstConverter.java

Lines changed: 14 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)