HHH-18121 Replace dynamic instantiations for non-simple count queries
This commit is contained in:
parent
8f217c886f
commit
15cbebbbf9
|
@ -483,16 +483,7 @@ public class SqmSelectStatement<T> extends AbstractSqmSelectQuery<T> implements
|
||||||
return (SqmSelectStatement<Long>) copy;
|
return (SqmSelectStatement<Long>) copy;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
final JpaSelection<?> selection = queryPart.getFirstQuerySpec().getSelection();
|
aliasSelections( queryPart );
|
||||||
if ( selection.isCompoundSelection() ) {
|
|
||||||
char c = 'a';
|
|
||||||
for ( JpaSelection<?> item : selection.getSelectionItems() ) {
|
|
||||||
item.alias( Character.toString( ++c ) + '_' );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
selection.alias( "a_" );
|
|
||||||
}
|
|
||||||
final SqmSubQuery<?> subquery = new SqmSubQuery<>( copy, queryPart, null, nodeBuilder() );
|
final SqmSubQuery<?> subquery = new SqmSubQuery<>( copy, queryPart, null, nodeBuilder() );
|
||||||
final SqmSelectStatement<Long> query = nodeBuilder().createQuery( Long.class );
|
final SqmSelectStatement<Long> query = nodeBuilder().createQuery( Long.class );
|
||||||
query.from( subquery );
|
query.from( subquery );
|
||||||
|
@ -500,4 +491,30 @@ public class SqmSelectStatement<T> extends AbstractSqmSelectQuery<T> implements
|
||||||
return query;
|
return query;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private <S> void aliasSelections(SqmQueryPart<S> queryPart) {
|
||||||
|
if ( queryPart.isSimpleQueryPart() ) {
|
||||||
|
final SqmQuerySpec<S> querySpec = queryPart.getFirstQuerySpec();
|
||||||
|
final LinkedHashSet<JpaSelection<?>> newSelections = new LinkedHashSet<>();
|
||||||
|
aliasSelection( querySpec.getSelection(), newSelections );
|
||||||
|
//noinspection unchecked
|
||||||
|
querySpec.setSelection( (JpaSelection<S>) ( newSelections.size() == 1 ?
|
||||||
|
newSelections.iterator().next() :
|
||||||
|
nodeBuilder().tuple( newSelections.toArray( new JpaSelection<?>[0] ) ) ) );
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
( (SqmQueryGroup<?>) queryPart ).getQueryParts().forEach( this::aliasSelections );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void aliasSelection(JpaSelection<?> selection, LinkedHashSet<JpaSelection<?>> newSelections) {
|
||||||
|
if ( selection.isCompoundSelection() || selection instanceof SqmDynamicInstantiation<?> ) {
|
||||||
|
for ( JpaSelection<?> selectionItem : selection.getSelectionItems() ) {
|
||||||
|
aliasSelection( selectionItem, newSelections );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
newSelections.add( selection.alias( "c" + newSelections.size() ) );
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue