Skip to content

Commit c972208

Browse files
mbelladebeikov
authored andcommitted
HHH-18272 Check for SqmAliasedNodeRef when collecting group/order by
1 parent 5e4c354 commit c972208

File tree

1 file changed

+21
-10
lines changed
  • hibernate-core/src/main/java/org/hibernate/query/sqm/internal

1 file changed

+21
-10
lines changed

hibernate-core/src/main/java/org/hibernate/query/sqm/internal/SqmUtil.java

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@
8080
import org.hibernate.type.internal.ConvertedBasicTypeImpl;
8181
import org.hibernate.type.spi.TypeConfiguration;
8282

83+
import static java.util.stream.Collectors.toList;
8384
import static org.hibernate.internal.util.NullnessUtil.castNonNull;
8485
import static org.hibernate.query.sqm.tree.jpa.ParameterCollector.collectParameters;
8586

@@ -214,12 +215,7 @@ public static List<NavigablePath> getGroupByNavigablePaths(SqmQuerySpec<?> query
214215
return Collections.emptyList();
215216
}
216217

217-
final List<NavigablePath> navigablePaths = new ArrayList<>( expressions.size() );
218-
final SqmPathVisitor pathVisitor = new SqmPathVisitor( path -> navigablePaths.add( path.getNavigablePath() ) );
219-
for ( SqmExpression<?> expression : expressions ) {
220-
expression.accept( pathVisitor );
221-
}
222-
return navigablePaths;
218+
return collectNavigablePaths( expressions );
223219
}
224220

225221
public static List<NavigablePath> getOrderByNavigablePaths(SqmQuerySpec<?> querySpec) {
@@ -228,11 +224,26 @@ public static List<NavigablePath> getOrderByNavigablePaths(SqmQuerySpec<?> query
228224
return Collections.emptyList();
229225
}
230226

231-
final List<SqmSortSpecification> sortSpecifications = order.getSortSpecifications();
232-
final List<NavigablePath> navigablePaths = new ArrayList<>( sortSpecifications.size() );
227+
final List<SqmExpression<?>> expressions = order.getSortSpecifications()
228+
.stream()
229+
.map( SqmSortSpecification::getSortExpression )
230+
.collect( toList() );
231+
return collectNavigablePaths( expressions );
232+
}
233+
234+
private static List<NavigablePath> collectNavigablePaths(final List<SqmExpression<?>> expressions) {
235+
final List<NavigablePath> navigablePaths = new ArrayList<>( expressions.size() );
233236
final SqmPathVisitor pathVisitor = new SqmPathVisitor( path -> navigablePaths.add( path.getNavigablePath() ) );
234-
for ( SqmSortSpecification sortSpec : sortSpecifications ) {
235-
sortSpec.getSortExpression().accept( pathVisitor );
237+
for ( final SqmExpression<?> expression : expressions ) {
238+
if ( expression instanceof SqmAliasedNodeRef ) {
239+
final NavigablePath navigablePath = ( (SqmAliasedNodeRef) expression ).getNavigablePath();
240+
if ( navigablePath != null ) {
241+
navigablePaths.add( navigablePath );
242+
}
243+
}
244+
else {
245+
expression.accept( pathVisitor );
246+
}
236247
}
237248
return navigablePaths;
238249
}

0 commit comments

Comments
 (0)