HHH-14475 Don't render subquery for collection functions

This commit is contained in:
Christian Beikov 2021-03-15 16:23:09 +01:00
parent 96980606fd
commit 12f1c7917e
1 changed files with 14 additions and 25 deletions

View File

@ -141,20 +141,25 @@ public class MethodNode extends AbstractSelectExpression implements FunctionNode
String propertyName = CollectionProperties.getNormalizedPropertyName( methodName );
if ( expr instanceof FromReferenceNode ) {
FromReferenceNode collectionNode = (FromReferenceNode) expr;
fromElement = collectionNode.getFromElement();
// If this is 'elements' then create a new FROM element.
if ( CollectionPropertyNames.COLLECTION_ELEMENTS.equals( propertyName ) ) {
handleElements( collectionNode, propertyName );
QueryableCollection queryableCollection = fromElement.getQueryableCollection();
String path = collectionNode.getPath() + "[]." + propertyName;
LOG.debugf( "Creating elements for %s", path );
if ( !fromElement.isCollectionOfValuesOrComponents() ) {
getWalker().addQuerySpaces( queryableCollection.getElementPersister().getQuerySpaces() );
}
setDataType( queryableCollection.getElementType() );
selectColumns = fromElement.toColumns( fromElement.getTableAlias(), propertyName, inSelect );
}
else {
// Not elements(x)
fromElement = collectionNode.getFromElement();
final CollectionPropertyReference cpr = fromElement.getCollectionPropertyReference( propertyName );
setDataType( cpr.getType() );
selectColumns = cpr.toColumns( fromElement.getTableAlias() );
// setDataType( fromElement.getPropertyType( propertyName, propertyName ) );
// selectColumns = fromElement.toColumns( fromElement.getTableAlias(), propertyName, inSelect );
setDataType( fromElement.getPropertyType( propertyName, propertyName ) );
selectColumns = fromElement.toColumns( fromElement.getTableAlias(), propertyName, inSelect );
}
if ( collectionNode instanceof DotNode ) {
@ -190,22 +195,6 @@ public class MethodNode extends AbstractSelectExpression implements FunctionNode
}
}
private void handleElements(FromReferenceNode collectionNode, String propertyName) {
FromElement collectionFromElement = collectionNode.getFromElement();
QueryableCollection queryableCollection = collectionFromElement.getQueryableCollection();
String path = collectionNode.getPath() + "[]." + propertyName;
LOG.debugf( "Creating elements for %s", path );
fromElement = collectionFromElement;
if ( !collectionFromElement.isCollectionOfValuesOrComponents() ) {
getWalker().addQuerySpaces( queryableCollection.getElementPersister().getQuerySpaces() );
}
setDataType( queryableCollection.getElementType() );
selectColumns = collectionFromElement.toColumns( fromElement.getTableAlias(), propertyName, inSelect );
}
@Override
public void setScalarColumnText(int i) throws SemanticException {
if ( selectColumns == null ) { // Dialect function