Skip to content

Commit

Permalink
Fixed HHH-10577
Browse files Browse the repository at this point in the history
(cherry picked from commit 18e8be0)
  • Loading branch information
beikov authored and gbadner committed Feb 21, 2017
1 parent a4974a4 commit 2256b37
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 30 deletions.
Expand Up @@ -46,38 +46,36 @@ public void resolve(
boolean implicitJoin,
String classAlias,
AST parent) throws SemanticException {
if ( parent != null ) {
throw attemptedDereference();
}

final FromReferenceNode mapReference = getMapReference();
mapReference.resolve( true, true );

FromElement sourceFromElement = null;
if ( isAliasRef( mapReference ) ) {
final QueryableCollection collectionPersister = mapReference.getFromElement().getQueryableCollection();
if ( Map.class.isAssignableFrom( collectionPersister.getCollectionType().getReturnedClass() ) ) {
sourceFromElement = mapReference.getFromElement();
}
}
else {
if ( mapReference.getDataType().isCollectionType() ) {
final CollectionType collectionType = (CollectionType) mapReference.getDataType();
if ( Map.class.isAssignableFrom( collectionType.getReturnedClass() ) ) {
if ( mapFromElement == null ) {
final FromReferenceNode mapReference = getMapReference();
mapReference.resolve( true, true );

FromElement sourceFromElement = null;
if ( isAliasRef( mapReference ) ) {
final QueryableCollection collectionPersister = mapReference.getFromElement().getQueryableCollection();
if ( Map.class.isAssignableFrom( collectionPersister.getCollectionType().getReturnedClass() ) ) {
sourceFromElement = mapReference.getFromElement();
}
}
}
else {
if ( mapReference.getDataType().isCollectionType() ) {
final CollectionType collectionType = (CollectionType) mapReference.getDataType();
if ( Map.class.isAssignableFrom( collectionType.getReturnedClass() ) ) {
sourceFromElement = mapReference.getFromElement();
}
}
}

if ( sourceFromElement == null ) {
throw nonMap();
}
if ( sourceFromElement == null ) {
throw nonMap();
}

mapFromElement = sourceFromElement;
mapFromElement = sourceFromElement;
}

setFromElement( sourceFromElement );
setDataType( resolveType( sourceFromElement.getQueryableCollection() ) );
this.columns = resolveColumns( sourceFromElement.getQueryableCollection() );
setFromElement( mapFromElement );
setDataType( resolveType( mapFromElement.getQueryableCollection() ) );
this.columns = resolveColumns( mapFromElement.getQueryableCollection() );
initText( this.columns );
setFirstChild( null );
}
Expand All @@ -102,10 +100,6 @@ private void initText(String[] columns) {
protected abstract String[] resolveColumns(QueryableCollection collectionPersister);
protected abstract Type resolveType(QueryableCollection collectionPersister);

protected SemanticException attemptedDereference() {
return new SemanticException( expressionDescription() + " expression cannot be further de-referenced" );
}

protected SemanticException nonMap() {
return new SemanticException( expressionDescription() + " expression did not reference map property" );
}
Expand Down
Expand Up @@ -11,6 +11,7 @@
import java.util.List;
import java.util.Map;

import antlr.collections.AST;
import org.hibernate.HibernateException;
import org.hibernate.engine.spi.SessionFactoryImplementor;
import org.hibernate.hql.internal.NameGenerator;
Expand Down Expand Up @@ -58,6 +59,19 @@ public Class getAggregationResultType() {
return Map.Entry.class;
}


@Override
public void resolve(
boolean generateJoin,
boolean implicitJoin,
String classAlias,
AST parent) throws SemanticException {
if (parent != null) {
throw new SemanticException( expressionDescription() + " expression cannot be further de-referenced" );
}
super.resolve(generateJoin, implicitJoin, classAlias, parent);
}

@Override
@SuppressWarnings("unchecked")
protected Type resolveType(QueryableCollection collectionPersister) {
Expand Down

0 comments on commit 2256b37

Please sign in to comment.