Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -58,41 +58,46 @@ public BasicResult<?> buildResult(
JdbcValuesMetadata jdbcResultsMetadata,
int resultPosition,
DomainResultCreationState domainResultCreationState) {
final DomainResultCreationStateImpl creationStateImpl = impl( domainResultCreationState );

final TableGroup tableGroup = creationStateImpl.getFromClauseAccess().resolveTableGroup(
navigablePath.getParent(),
path -> this.tableGroup
);
final TableReference tableReference = tableGroup.resolveTableReference(
return new BasicResult<>(
sqlSelection( jdbcResultsMetadata, domainResultCreationState )
.getValuesArrayPosition(),
null,
modelPart.getJdbcMapping(),
navigablePath,
modelPart,
"t"
false,
false
);
}

private SqlSelection sqlSelection(
JdbcValuesMetadata jdbcResultsMetadata, DomainResultCreationState domainResultCreationState) {
final DomainResultCreationStateImpl creationStateImpl = impl( domainResultCreationState );
return sqlSelection( jdbcResultsMetadata, creationStateImpl, tableReference( creationStateImpl ) );
}

final int position = valuesArrayPosition != null ?
valuesArrayPosition :
columnIndex( jdbcResultsMetadata, modelPart );
final SqlSelection sqlSelection = creationStateImpl.resolveSqlSelection(
private TableReference tableReference(DomainResultCreationStateImpl creationStateImpl) {
return creationStateImpl.getFromClauseAccess()
.resolveTableGroup( navigablePath.getParent(), path -> this.tableGroup )
.resolveTableReference( navigablePath, modelPart, "t" );
}

private SqlSelection sqlSelection(
JdbcValuesMetadata jdbcResultsMetadata,
DomainResultCreationStateImpl creationStateImpl,
TableReference tableReference) {
return creationStateImpl.resolveSqlSelection(
ResultsHelper.resolveSqlExpression(
creationStateImpl,
tableReference,
modelPart,
position
valuesArrayPosition != null
? valuesArrayPosition
: columnIndex( jdbcResultsMetadata, modelPart )
),
modelPart.getJdbcMapping().getJdbcJavaType(),
null,
creationStateImpl.getSessionFactory().getTypeConfiguration()
);

return new BasicResult<>(
sqlSelection.getValuesArrayPosition(),
null,
modelPart.getJdbcMapping(),
navigablePath,
false,
false
);
}

public BasicValuedModelPart getModelPart() {
Expand All @@ -101,15 +106,16 @@ public BasicValuedModelPart getModelPart() {

private static int columnIndex(JdbcValuesMetadata jdbcResultsMetadata, BasicValuedModelPart modelPart) {
if ( jdbcResultsMetadata.getColumnCount() == 1 ) {
assert modelPart.isEntityIdentifierMapping() || jdbcResultsMetadata.resolveColumnPosition(
getActualGeneratedModelPart( modelPart ).getSelectionExpression()
) == 1;
assert modelPart.isEntityIdentifierMapping()
|| getColumnPosition( jdbcResultsMetadata, modelPart ) == 1;
return 0;
}
else {
return jdbcPositionToValuesArrayPosition( jdbcResultsMetadata.resolveColumnPosition(
getActualGeneratedModelPart( modelPart ).getSelectionExpression()
) );
return jdbcPositionToValuesArrayPosition( getColumnPosition( jdbcResultsMetadata, modelPart ) );
}
}

private static int getColumnPosition(JdbcValuesMetadata valuesMetadata, BasicValuedModelPart modelPart) {
return valuesMetadata.resolveColumnPosition( getActualGeneratedModelPart( modelPart ).getSelectionExpression() );
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -37,13 +37,14 @@ public static DomainResultCreationStateImpl impl(DomainResultCreationState creat
}

private static DomainResultCreationStateImpl unwrap(DomainResultCreationState creationState) {
if ( creationState instanceof DomainResultCreationStateImpl ) {
return ( (DomainResultCreationStateImpl) creationState );
if ( creationState instanceof DomainResultCreationStateImpl domainResultCreationState ) {
return domainResultCreationState;
}
else {
throw new IllegalArgumentException(
"Passed DomainResultCreationState not an instance of org.hibernate.query.results.internal.DomainResultCreationStateImpl"
);
}

throw new IllegalArgumentException(
"Passed DomainResultCreationState not an instance of org.hibernate.query.results.internal.DomainResultCreationStateImpl"
);
}

public static Expression resolveSqlExpression(
Expand Down Expand Up @@ -86,65 +87,15 @@ public static Expression resolveSqlExpression(
private ResultsHelper() {
}

public static boolean isIdentifier(EntityIdentifierMapping identifierDescriptor, String... names) {
final String identifierAttributeName = identifierDescriptor instanceof SingleAttributeIdentifierMapping
? ( (SingleAttributeIdentifierMapping) identifierDescriptor ).getAttributeName()
: EntityIdentifierMapping.ID_ROLE_NAME;

for ( int i = 0; i < names.length; i++ ) {
final String name = names[ i ];
if ( EntityIdentifierMapping.ID_ROLE_NAME.equals( name ) ) {
return true;
}

if ( identifierAttributeName.equals( name ) ) {
return true;
}
}

return false;
}

// public static ResultMemento implicitIdentifierResult(
// EntityIdentifierMapping identifierMapping,
// EntityIdentifierNavigablePath idPath,
// ResultSetMappingResolutionContext resolutionContext) {
// return new ImplicitModelPartResultMemento( idPath, identifierMapping );
// }

public static DomainResult implicitIdentifierResult(
EntityIdentifierMapping identifierMapping,
EntityIdentifierNavigablePath idPath,
DomainResultCreationState creationState) {
final DomainResultCreationStateImpl creationStateImpl = impl( creationState );
final TableGroup tableGroup = creationStateImpl.getFromClauseAccess().getTableGroup( idPath.getParent() );

return identifierMapping.createDomainResult(
idPath,
tableGroup,
null,
creationState
);
}

public static String attributeName(ModelPart identifierMapping) {
if ( identifierMapping.isEntityIdentifierMapping() ) {
return identifierMapping instanceof SingleAttributeIdentifierMapping
? ( (SingleAttributeIdentifierMapping) identifierMapping ).getAttributeName()
return identifierMapping instanceof SingleAttributeIdentifierMapping singleAttributeIdentifierMapping
? singleAttributeIdentifierMapping.getAttributeName()
: null;
}
else {
return identifierMapping.getPartName();
}

}

public static DomainResult convertIdFetchToResult(Fetch fetch, DomainResultCreationState creationState) {
final EntityIdentifierMapping idMapping = (EntityIdentifierMapping) fetch.getFetchedMapping();
if ( fetch instanceof BasicFetch ) {
final BasicFetch<?> basicFetch = (BasicFetch<?>) fetch;

}
return null;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,6 @@ public BasicFetch<?> buildFetch(

final String selectedAlias;
final int jdbcPosition;

if ( selectionAlias != null ) {
try {
jdbcPosition = jdbcResultsMetadata.resolveColumnPosition( selectionAlias );
Expand All @@ -104,16 +103,12 @@ public BasicFetch<?> buildFetch(
selectedAlias = jdbcResultsMetadata.resolveColumnName( jdbcPosition );
}

final int valuesArrayPosition = jdbcPositionToValuesArrayPosition( jdbcPosition );

final JdbcMapping jdbcMapping;
if ( referencedModelPart instanceof DiscriminatorMapping ) {
jdbcMapping = ( (DiscriminatorMapping) referencedModelPart ).getUnderlyingJdbcMapping();
}
else {
jdbcMapping = referencedModelPart.getJdbcMapping();
}
final JdbcMapping jdbcMapping =
referencedModelPart instanceof DiscriminatorMapping discriminatorMapping
? discriminatorMapping.getUnderlyingJdbcMapping()
: referencedModelPart.getJdbcMapping();

final int valuesArrayPosition = jdbcPositionToValuesArrayPosition( jdbcPosition );
// we just care about the registration here. The ModelPart will find it later
creationStateImpl.resolveSqlExpression(
createColumnReferenceKey( tableReference, referencedModelPart.getSelectablePath(), jdbcMapping ),
Expand Down Expand Up @@ -141,8 +136,8 @@ public boolean equals(Object o) {

final CompleteFetchBuilderBasicPart that = (CompleteFetchBuilderBasicPart) o;
return navigablePath.equals( that.navigablePath )
&& referencedModelPart.equals( that.referencedModelPart )
&& Objects.equals( selectionAlias, that.selectionAlias );
&& referencedModelPart.equals( that.referencedModelPart )
&& Objects.equals( selectionAlias, that.selectionAlias );
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,12 @@

import org.hibernate.engine.FetchTiming;
import org.hibernate.metamodel.mapping.EmbeddableValuedModelPart;
import org.hibernate.metamodel.mapping.SelectableMapping;
import org.hibernate.query.results.internal.DomainResultCreationStateImpl;
import org.hibernate.query.results.FetchBuilder;
import org.hibernate.query.results.internal.ResultsHelper;
import org.hibernate.spi.NavigablePath;
import org.hibernate.sql.ast.spi.SqlSelection;
import org.hibernate.sql.ast.tree.from.TableGroup;
import org.hibernate.sql.ast.tree.from.TableReference;
import org.hibernate.sql.results.graph.DomainResultCreationState;
Expand Down Expand Up @@ -73,31 +75,11 @@ public Fetch buildFetch(
DomainResultCreationState domainResultCreationState) {
assert fetchPath.equals( navigablePath );
final DomainResultCreationStateImpl creationStateImpl = impl( domainResultCreationState );

final TableGroup tableGroup = creationStateImpl.getFromClauseAccess().getTableGroup( navigablePath.getParent() );
modelPart.forEachSelectable(
(selectionIndex, selectableMapping) -> {
final TableReference tableReference = tableGroup.resolveTableReference(
navigablePath,
modelPart,
selectableMapping.getContainingTableExpression()
);
final String columnAlias = columnAliases.get( selectionIndex );
creationStateImpl.resolveSqlSelection(
ResultsHelper.resolveSqlExpression(
creationStateImpl,
jdbcResultsMetadata,
tableReference,
selectableMapping,
columnAlias
),
selectableMapping.getJdbcMapping().getJdbcJavaType(),
null,
creationStateImpl.getSessionFactory().getTypeConfiguration()
);
}
(selectionIndex, selectableMapping) ->
sqlSelection( jdbcResultsMetadata, selectionIndex, selectableMapping, creationStateImpl, tableGroup )
);

return parent.generateFetchableFetch(
modelPart,
fetchPath,
Expand All @@ -108,6 +90,27 @@ public Fetch buildFetch(
);
}

private void sqlSelection(
JdbcValuesMetadata jdbcResultsMetadata,
int selectionIndex,
SelectableMapping selectableMapping,
DomainResultCreationStateImpl creationStateImpl,
TableGroup tableGroup) {
creationStateImpl.resolveSqlSelection(
ResultsHelper.resolveSqlExpression(
creationStateImpl,
jdbcResultsMetadata,
tableGroup.resolveTableReference( navigablePath, modelPart,
selectableMapping.getContainingTableExpression() ),
selectableMapping,
columnAliases.get( selectionIndex )
),
selectableMapping.getJdbcMapping().getJdbcJavaType(),
null,
creationStateImpl.getSessionFactory().getTypeConfiguration()
);
}

@Override
public boolean equals(Object o) {
if ( this == o ) {
Expand All @@ -119,8 +122,8 @@ public boolean equals(Object o) {

final CompleteFetchBuilderEmbeddableValuedModelPart that = (CompleteFetchBuilderEmbeddableValuedModelPart) o;
return navigablePath.equals( that.navigablePath )
&& modelPart.equals( that.modelPart )
&& columnAliases.equals( that.columnAliases );
&& modelPart.equals( that.modelPart )
&& columnAliases.equals( that.columnAliases );
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,13 @@
import java.util.List;

import org.hibernate.engine.FetchTiming;
import org.hibernate.metamodel.mapping.SelectableMapping;
import org.hibernate.metamodel.mapping.ValuedModelPart;
import org.hibernate.query.results.internal.ResultsHelper;
import org.hibernate.spi.NavigablePath;
import org.hibernate.query.results.internal.DomainResultCreationStateImpl;
import org.hibernate.query.results.FetchBuilder;
import org.hibernate.sql.ast.spi.SqlSelection;
import org.hibernate.sql.ast.tree.from.TableGroup;
import org.hibernate.sql.ast.tree.from.TableReference;
import org.hibernate.sql.results.graph.DomainResultCreationState;
Expand Down Expand Up @@ -74,31 +76,11 @@ public Fetch buildFetch(
DomainResultCreationState domainResultCreationState) {
assert fetchPath.equals( navigablePath );
final DomainResultCreationStateImpl creationStateImpl = impl( domainResultCreationState );

final TableGroup tableGroup = creationStateImpl.getFromClauseAccess().getTableGroup( navigablePath.getParent() );
modelPart.forEachSelectable(
(selectionIndex, selectableMapping) -> {
final TableReference tableReference = tableGroup.resolveTableReference(
navigablePath,
(ValuedModelPart) modelPart,
selectableMapping.getContainingTableExpression()
);
final String columnAlias = columnAliases.get( selectionIndex );
creationStateImpl.resolveSqlSelection(
ResultsHelper.resolveSqlExpression(
creationStateImpl,
jdbcResultsMetadata,
tableReference,
selectableMapping,
columnAlias
),
selectableMapping.getJdbcMapping().getJdbcJavaType(),
null,
creationStateImpl.getSessionFactory().getTypeConfiguration()
);
}
(selectionIndex, selectableMapping) ->
sqlSelection( jdbcResultsMetadata, selectionIndex, selectableMapping, creationStateImpl, tableGroup )
);

return parent.generateFetchableFetch(
modelPart,
fetchPath,
Expand All @@ -109,6 +91,27 @@ public Fetch buildFetch(
);
}

private void sqlSelection(
JdbcValuesMetadata jdbcResultsMetadata,
int selectionIndex,
SelectableMapping selectableMapping,
DomainResultCreationStateImpl creationStateImpl,
TableGroup tableGroup) {
creationStateImpl.resolveSqlSelection(
ResultsHelper.resolveSqlExpression(
creationStateImpl,
jdbcResultsMetadata,
tableGroup.resolveTableReference( navigablePath, (ValuedModelPart) modelPart,
selectableMapping.getContainingTableExpression() ),
selectableMapping,
columnAliases.get( selectionIndex )
),
selectableMapping.getJdbcMapping().getJdbcJavaType(),
null,
creationStateImpl.getSessionFactory().getTypeConfiguration()
);
}

@Override
public boolean equals(Object o) {
if ( this == o ) {
Expand All @@ -120,8 +123,8 @@ public boolean equals(Object o) {

final CompleteFetchBuilderEntityValuedModelPart that = (CompleteFetchBuilderEntityValuedModelPart) o;
return navigablePath.equals( that.navigablePath )
&& modelPart.equals( that.modelPart )
&& columnAliases.equals( that.columnAliases );
&& modelPart.equals( that.modelPart )
&& columnAliases.equals( that.columnAliases );
}

@Override
Expand Down
Loading
Loading