Skip to content

Commit

Permalink
Disable select item deduplication for query groups and deduplicate wi…
Browse files Browse the repository at this point in the history
…thin a fetch parent
  • Loading branch information
beikov committed Mar 26, 2022
1 parent b4a1b14 commit 23098ca
Show file tree
Hide file tree
Showing 58 changed files with 224 additions and 79 deletions.
Expand Up @@ -19,6 +19,7 @@
import org.hibernate.sql.ast.tree.predicate.Predicate;
import org.hibernate.sql.results.graph.DomainResult;
import org.hibernate.sql.results.graph.DomainResultCreationState;
import org.hibernate.sql.results.graph.FetchParent;

/**
* Descriptor for foreign-keys
Expand Down Expand Up @@ -81,26 +82,21 @@ default Side getSide(Nature nature) {
DomainResult<?> createKeyDomainResult(
NavigablePath navigablePath,
TableGroup tableGroup,
DomainResultCreationState creationState);
FetchParent fetchParent, DomainResultCreationState creationState);

/**
* Create a DomainResult for the target-side of the fk
*/
DomainResult<?> createTargetDomainResult(
NavigablePath navigablePath,
TableGroup tableGroup,
DomainResultCreationState creationState);

DomainResult<?> createCollectionFetchDomainResult(
NavigablePath collectionPath,
TableGroup tableGroup,
DomainResultCreationState creationState);
FetchParent fetchParent, DomainResultCreationState creationState);

DomainResult<?> createDomainResult(
NavigablePath navigablePath,
TableGroup tableGroup,
Nature side,
DomainResultCreationState creationState);
FetchParent fetchParent, DomainResultCreationState creationState);

Predicate generateJoinPredicate(
TableGroup targetSideTableGroup,
Expand Down
Expand Up @@ -130,7 +130,13 @@ public <T> DomainResult<T> createDomainResult(
TableGroup tableGroup,
String resultVariable,
DomainResultCreationState creationState) {
final SqlSelection sqlSelection = resolveSqlSelection( navigablePath, getUnderlyingJdbcMappingType(), tableGroup, creationState.getSqlAstCreationState() );
final SqlSelection sqlSelection = resolveSqlSelection(
navigablePath,
getUnderlyingJdbcMappingType(),
tableGroup,
null,
creationState.getSqlAstCreationState()
);

//noinspection unchecked
return new BasicResult(
Expand All @@ -146,11 +152,13 @@ private SqlSelection resolveSqlSelection(
NavigablePath navigablePath,
JdbcMapping jdbcMappingToUse,
TableGroup tableGroup,
FetchParent fetchParent,
SqlAstCreationState creationState) {
final SqlExpressionResolver expressionResolver = creationState.getSqlExpressionResolver();
return expressionResolver.resolveSqlSelection(
resolveSqlExpression( navigablePath, jdbcMappingToUse, tableGroup, creationState ),
jdbcMappingToUse.getJavaTypeDescriptor(),
fetchParent,
creationState.getCreationContext().getSessionFactory().getTypeConfiguration()
);
}
Expand All @@ -170,7 +178,13 @@ public BasicFetch generateFetch(

assert tableGroup != null;

final SqlSelection sqlSelection = resolveSqlSelection( fetchablePath, getUnderlyingJdbcMappingType(), tableGroup, creationState.getSqlAstCreationState() );
final SqlSelection sqlSelection = resolveSqlSelection(
fetchablePath,
getUnderlyingJdbcMappingType(),
tableGroup,
fetchParent,
creationState.getSqlAstCreationState()
);

return new BasicFetch<>(
sqlSelection.getValuesArrayPosition(),
Expand All @@ -188,7 +202,7 @@ public void applySqlSelections(
NavigablePath navigablePath,
TableGroup tableGroup,
DomainResultCreationState creationState) {
resolveSqlSelection( navigablePath, getUnderlyingJdbcMappingType(), tableGroup, creationState.getSqlAstCreationState() );
resolveSqlSelection( navigablePath, getUnderlyingJdbcMappingType(), tableGroup, null, creationState.getSqlAstCreationState() );
}

@Override
Expand All @@ -198,7 +212,7 @@ public void applySqlSelections(
DomainResultCreationState creationState,
BiConsumer<SqlSelection, JdbcMapping> selectionConsumer) {
selectionConsumer.accept(
resolveSqlSelection( navigablePath, getUnderlyingJdbcMappingType(), tableGroup, creationState.getSqlAstCreationState() ),
resolveSqlSelection( navigablePath, getUnderlyingJdbcMappingType(), tableGroup, null, creationState.getSqlAstCreationState() ),
getJdbcMapping()
);
}
Expand Down
Expand Up @@ -274,6 +274,7 @@ public Fetch generateFetch(
final SqlSelection sqlSelection = sqlExpressionResolver.resolveSqlSelection(
columnReference,
jdbcMapping().getMappedJavaType(),
fetchParent,
sessionFactory.getTypeConfiguration()
);

Expand Down
Expand Up @@ -199,6 +199,7 @@ public Fetch generateFetch(
final SqlSelection sqlSelection = sqlExpressionResolver.resolveSqlSelection(
columnReference,
getJavaType(),
fetchParent,
sessionFactory.getTypeConfiguration()
);

Expand Down
Expand Up @@ -254,7 +254,7 @@ public <T> DomainResult<T> createDomainResult(
TableGroup tableGroup,
String resultVariable,
DomainResultCreationState creationState) {
final SqlSelection sqlSelection = resolveSqlSelection( navigablePath, tableGroup, true, creationState );
final SqlSelection sqlSelection = resolveSqlSelection( navigablePath, tableGroup, true, null, creationState );

//noinspection unchecked
return new BasicResult(
Expand All @@ -270,6 +270,7 @@ private SqlSelection resolveSqlSelection(
NavigablePath navigablePath,
TableGroup tableGroup,
boolean allowFkOptimization,
FetchParent fetchParent,
DomainResultCreationState creationState) {
final SqlExpressionResolver expressionResolver = creationState.getSqlAstCreationState().getSqlExpressionResolver();
final TableReference tableReference = tableGroup.resolveTableReference(
Expand All @@ -291,6 +292,7 @@ private SqlSelection resolveSqlSelection(
)
),
valueConverter == null ? getMappedType().getMappedJavaType() : valueConverter.getRelationalJavaType(),
fetchParent,
creationState.getSqlAstCreationState().getCreationContext().getSessionFactory().getTypeConfiguration()
);
}
Expand All @@ -300,7 +302,7 @@ public void applySqlSelections(
NavigablePath navigablePath,
TableGroup tableGroup,
DomainResultCreationState creationState) {
resolveSqlSelection( navigablePath, tableGroup, true, creationState );
resolveSqlSelection( navigablePath, tableGroup, true, null, creationState );
}

@Override
Expand All @@ -309,7 +311,7 @@ public void applySqlSelections(
TableGroup tableGroup,
DomainResultCreationState creationState,
BiConsumer<SqlSelection, JdbcMapping> selectionConsumer) {
selectionConsumer.accept( resolveSqlSelection( navigablePath, tableGroup, true, creationState ), getJdbcMapping() );
selectionConsumer.accept( resolveSqlSelection( navigablePath, tableGroup, true, null, creationState ), getJdbcMapping() );
}

@Override
Expand All @@ -336,7 +338,7 @@ public Fetch generateFetch(

assert tableGroup != null;

final SqlSelection sqlSelection = resolveSqlSelection( fetchablePath, tableGroup, true, creationState );
final SqlSelection sqlSelection = resolveSqlSelection( fetchablePath, tableGroup, true, fetchParent, creationState );
valuesArrayPosition = sqlSelection.getValuesArrayPosition();
}

Expand Down
Expand Up @@ -215,7 +215,7 @@ public <T> DomainResult<T> createDomainResult(
TableGroup tableGroup,
String resultVariable,
DomainResultCreationState creationState) {
final SqlSelection sqlSelection = resolveSqlSelection( navigablePath, tableGroup, true, creationState );
final SqlSelection sqlSelection = resolveSqlSelection( navigablePath, tableGroup, true, null, creationState );

return new BasicResult(
sqlSelection.getValuesArrayPosition(),
Expand All @@ -230,7 +230,7 @@ public void applySqlSelections(
NavigablePath navigablePath,
TableGroup tableGroup,
DomainResultCreationState creationState) {
resolveSqlSelection( navigablePath, tableGroup, true, creationState );
resolveSqlSelection( navigablePath, tableGroup, true, null, creationState );
}

@Override
Expand All @@ -240,7 +240,7 @@ public void applySqlSelections(
DomainResultCreationState creationState,
BiConsumer<SqlSelection, JdbcMapping> selectionConsumer) {
selectionConsumer.accept(
resolveSqlSelection( navigablePath, tableGroup, true, creationState ),
resolveSqlSelection( navigablePath, tableGroup, true, null, creationState ),
getJdbcMapping()
);
}
Expand All @@ -249,6 +249,7 @@ private SqlSelection resolveSqlSelection(
NavigablePath navigablePath,
TableGroup tableGroup,
boolean allowFkOptimization,
FetchParent fetchParent,
DomainResultCreationState creationState) {
final SqlExpressionResolver expressionResolver = creationState.getSqlAstCreationState()
.getSqlExpressionResolver();
Expand Down Expand Up @@ -285,6 +286,7 @@ private SqlSelection resolveSqlSelection(
return expressionResolver.resolveSqlSelection(
expression,
idType.getExpressibleJavaType(),
fetchParent,
sessionFactory.getTypeConfiguration()
);
}
Expand Down Expand Up @@ -383,7 +385,7 @@ public Fetch generateFetch(

assert tableGroup != null;

final SqlSelection sqlSelection = resolveSqlSelection( fetchablePath, tableGroup, false, creationState );
final SqlSelection sqlSelection = resolveSqlSelection( fetchablePath, tableGroup, false, fetchParent, creationState );
return new BasicFetch<>(
sqlSelection.getValuesArrayPosition(),
fetchParent,
Expand Down
Expand Up @@ -151,7 +151,7 @@ public <T> DomainResult<T> createDomainResult(
TableGroup tableGroup,
String resultVariable,
DomainResultCreationState creationState) {
final SqlSelection sqlSelection = resolveSqlSelection( navigablePath, tableGroup, true, creationState );
final SqlSelection sqlSelection = resolveSqlSelection( navigablePath, tableGroup, true, null, creationState );

//noinspection unchecked
return new BasicResult(
Expand All @@ -167,6 +167,7 @@ private SqlSelection resolveSqlSelection(
NavigablePath navigablePath,
TableGroup tableGroup,
boolean allowFkOptimization,
FetchParent fetchParent,
DomainResultCreationState creationState) {
final SqlExpressionResolver exprResolver = creationState.getSqlAstCreationState().getSqlExpressionResolver();
final TableGroup targetTableGroup;
Expand Down Expand Up @@ -197,14 +198,15 @@ private SqlSelection resolveSqlSelection(
)
),
getJavaType(),
fetchParent,
creationState.getSqlAstCreationState().getCreationContext().getSessionFactory().getTypeConfiguration()
);
}

@Override
public void applySqlSelections(
NavigablePath navigablePath, TableGroup tableGroup, DomainResultCreationState creationState) {
resolveSqlSelection( navigablePath, tableGroup, true, creationState );
resolveSqlSelection( navigablePath, tableGroup, true, null, creationState );
}

@Override
Expand All @@ -213,7 +215,7 @@ public void applySqlSelections(
TableGroup tableGroup,
DomainResultCreationState creationState,
BiConsumer<SqlSelection, JdbcMapping> selectionConsumer) {
selectionConsumer.accept( resolveSqlSelection( navigablePath, tableGroup, true, creationState ), getJdbcMapping() );
selectionConsumer.accept( resolveSqlSelection( navigablePath, tableGroup, true, null, creationState ), getJdbcMapping() );
}

@Override
Expand Down Expand Up @@ -263,7 +265,7 @@ public Fetch generateFetch(
final TableGroup tableGroup = creationState.getSqlAstCreationState()
.getFromClauseAccess()
.findTableGroup( parentNavigablePath );
final SqlSelection sqlSelection = resolveSqlSelection( fetchablePath, tableGroup, true, creationState );
final SqlSelection sqlSelection = resolveSqlSelection( fetchablePath, tableGroup, true, fetchParent, creationState );

return new BasicFetch<>(
sqlSelection.getValuesArrayPosition(),
Expand Down
Expand Up @@ -231,6 +231,7 @@ public Fetch generateFetch(
)
),
type.getJavaTypeDescriptor(),
fetchParent,
sessionFactory.getTypeConfiguration()
);

Expand Down Expand Up @@ -271,6 +272,7 @@ public DomainResult<?> createDomainResult(
)
),
type.getJavaTypeDescriptor(),
null,
sessionFactory.getTypeConfiguration()
);

Expand Down

0 comments on commit 23098ca

Please sign in to comment.