Skip to content

Commit 96cba56

Browse files
committed
refactorings of FetchBuilders
attempt to migrate to "short functions" style (only partially successfully)
1 parent 9f9eeb7 commit 96cba56

File tree

39 files changed

+701
-817
lines changed

39 files changed

+701
-817
lines changed

hibernate-core/src/main/java/org/hibernate/generator/values/GeneratedValueBasicResultBuilder.java

Lines changed: 35 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -58,41 +58,46 @@ public BasicResult<?> buildResult(
5858
JdbcValuesMetadata jdbcResultsMetadata,
5959
int resultPosition,
6060
DomainResultCreationState domainResultCreationState) {
61-
final DomainResultCreationStateImpl creationStateImpl = impl( domainResultCreationState );
62-
63-
final TableGroup tableGroup = creationStateImpl.getFromClauseAccess().resolveTableGroup(
64-
navigablePath.getParent(),
65-
path -> this.tableGroup
66-
);
67-
final TableReference tableReference = tableGroup.resolveTableReference(
61+
return new BasicResult<>(
62+
sqlSelection( jdbcResultsMetadata, domainResultCreationState )
63+
.getValuesArrayPosition(),
64+
null,
65+
modelPart.getJdbcMapping(),
6866
navigablePath,
69-
modelPart,
70-
"t"
67+
false,
68+
false
7169
);
70+
}
71+
72+
private SqlSelection sqlSelection(
73+
JdbcValuesMetadata jdbcResultsMetadata, DomainResultCreationState domainResultCreationState) {
74+
final DomainResultCreationStateImpl creationStateImpl = impl( domainResultCreationState );
75+
return sqlSelection( jdbcResultsMetadata, creationStateImpl, tableReference( creationStateImpl ) );
76+
}
7277

73-
final int position = valuesArrayPosition != null ?
74-
valuesArrayPosition :
75-
columnIndex( jdbcResultsMetadata, modelPart );
76-
final SqlSelection sqlSelection = creationStateImpl.resolveSqlSelection(
78+
private TableReference tableReference(DomainResultCreationStateImpl creationStateImpl) {
79+
return creationStateImpl.getFromClauseAccess()
80+
.resolveTableGroup( navigablePath.getParent(), path -> this.tableGroup )
81+
.resolveTableReference( navigablePath, modelPart, "t" );
82+
}
83+
84+
private SqlSelection sqlSelection(
85+
JdbcValuesMetadata jdbcResultsMetadata,
86+
DomainResultCreationStateImpl creationStateImpl,
87+
TableReference tableReference) {
88+
return creationStateImpl.resolveSqlSelection(
7789
ResultsHelper.resolveSqlExpression(
7890
creationStateImpl,
7991
tableReference,
8092
modelPart,
81-
position
93+
valuesArrayPosition != null
94+
? valuesArrayPosition
95+
: columnIndex( jdbcResultsMetadata, modelPart )
8296
),
8397
modelPart.getJdbcMapping().getJdbcJavaType(),
8498
null,
8599
creationStateImpl.getSessionFactory().getTypeConfiguration()
86100
);
87-
88-
return new BasicResult<>(
89-
sqlSelection.getValuesArrayPosition(),
90-
null,
91-
modelPart.getJdbcMapping(),
92-
navigablePath,
93-
false,
94-
false
95-
);
96101
}
97102

98103
public BasicValuedModelPart getModelPart() {
@@ -101,15 +106,16 @@ public BasicValuedModelPart getModelPart() {
101106

102107
private static int columnIndex(JdbcValuesMetadata jdbcResultsMetadata, BasicValuedModelPart modelPart) {
103108
if ( jdbcResultsMetadata.getColumnCount() == 1 ) {
104-
assert modelPart.isEntityIdentifierMapping() || jdbcResultsMetadata.resolveColumnPosition(
105-
getActualGeneratedModelPart( modelPart ).getSelectionExpression()
106-
) == 1;
109+
assert modelPart.isEntityIdentifierMapping()
110+
|| getColumnPosition( jdbcResultsMetadata, modelPart ) == 1;
107111
return 0;
108112
}
109113
else {
110-
return jdbcPositionToValuesArrayPosition( jdbcResultsMetadata.resolveColumnPosition(
111-
getActualGeneratedModelPart( modelPart ).getSelectionExpression()
112-
) );
114+
return jdbcPositionToValuesArrayPosition( getColumnPosition( jdbcResultsMetadata, modelPart ) );
113115
}
114116
}
117+
118+
private static int getColumnPosition(JdbcValuesMetadata valuesMetadata, BasicValuedModelPart modelPart) {
119+
return valuesMetadata.resolveColumnPosition( getActualGeneratedModelPart( modelPart ).getSelectionExpression() );
120+
}
115121
}

hibernate-core/src/main/java/org/hibernate/query/results/internal/ResultsHelper.java

Lines changed: 9 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -37,13 +37,14 @@ public static DomainResultCreationStateImpl impl(DomainResultCreationState creat
3737
}
3838

3939
private static DomainResultCreationStateImpl unwrap(DomainResultCreationState creationState) {
40-
if ( creationState instanceof DomainResultCreationStateImpl ) {
41-
return ( (DomainResultCreationStateImpl) creationState );
40+
if ( creationState instanceof DomainResultCreationStateImpl domainResultCreationState ) {
41+
return domainResultCreationState;
42+
}
43+
else {
44+
throw new IllegalArgumentException(
45+
"Passed DomainResultCreationState not an instance of org.hibernate.query.results.internal.DomainResultCreationStateImpl"
46+
);
4247
}
43-
44-
throw new IllegalArgumentException(
45-
"Passed DomainResultCreationState not an instance of org.hibernate.query.results.internal.DomainResultCreationStateImpl"
46-
);
4748
}
4849

4950
public static Expression resolveSqlExpression(
@@ -86,65 +87,15 @@ public static Expression resolveSqlExpression(
8687
private ResultsHelper() {
8788
}
8889

89-
public static boolean isIdentifier(EntityIdentifierMapping identifierDescriptor, String... names) {
90-
final String identifierAttributeName = identifierDescriptor instanceof SingleAttributeIdentifierMapping
91-
? ( (SingleAttributeIdentifierMapping) identifierDescriptor ).getAttributeName()
92-
: EntityIdentifierMapping.ID_ROLE_NAME;
93-
94-
for ( int i = 0; i < names.length; i++ ) {
95-
final String name = names[ i ];
96-
if ( EntityIdentifierMapping.ID_ROLE_NAME.equals( name ) ) {
97-
return true;
98-
}
99-
100-
if ( identifierAttributeName.equals( name ) ) {
101-
return true;
102-
}
103-
}
104-
105-
return false;
106-
}
107-
108-
// public static ResultMemento implicitIdentifierResult(
109-
// EntityIdentifierMapping identifierMapping,
110-
// EntityIdentifierNavigablePath idPath,
111-
// ResultSetMappingResolutionContext resolutionContext) {
112-
// return new ImplicitModelPartResultMemento( idPath, identifierMapping );
113-
// }
114-
115-
public static DomainResult implicitIdentifierResult(
116-
EntityIdentifierMapping identifierMapping,
117-
EntityIdentifierNavigablePath idPath,
118-
DomainResultCreationState creationState) {
119-
final DomainResultCreationStateImpl creationStateImpl = impl( creationState );
120-
final TableGroup tableGroup = creationStateImpl.getFromClauseAccess().getTableGroup( idPath.getParent() );
121-
122-
return identifierMapping.createDomainResult(
123-
idPath,
124-
tableGroup,
125-
null,
126-
creationState
127-
);
128-
}
129-
13090
public static String attributeName(ModelPart identifierMapping) {
13191
if ( identifierMapping.isEntityIdentifierMapping() ) {
132-
return identifierMapping instanceof SingleAttributeIdentifierMapping
133-
? ( (SingleAttributeIdentifierMapping) identifierMapping ).getAttributeName()
92+
return identifierMapping instanceof SingleAttributeIdentifierMapping singleAttributeIdentifierMapping
93+
? singleAttributeIdentifierMapping.getAttributeName()
13494
: null;
13595
}
13696
else {
13797
return identifierMapping.getPartName();
13898
}
13999

140100
}
141-
142-
public static DomainResult convertIdFetchToResult(Fetch fetch, DomainResultCreationState creationState) {
143-
final EntityIdentifierMapping idMapping = (EntityIdentifierMapping) fetch.getFetchedMapping();
144-
if ( fetch instanceof BasicFetch ) {
145-
final BasicFetch<?> basicFetch = (BasicFetch<?>) fetch;
146-
147-
}
148-
return null;
149-
}
150101
}

hibernate-core/src/main/java/org/hibernate/query/results/internal/complete/CompleteFetchBuilderBasicPart.java

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,6 @@ public BasicFetch<?> buildFetch(
8282

8383
final String selectedAlias;
8484
final int jdbcPosition;
85-
8685
if ( selectionAlias != null ) {
8786
try {
8887
jdbcPosition = jdbcResultsMetadata.resolveColumnPosition( selectionAlias );
@@ -104,16 +103,12 @@ public BasicFetch<?> buildFetch(
104103
selectedAlias = jdbcResultsMetadata.resolveColumnName( jdbcPosition );
105104
}
106105

107-
final int valuesArrayPosition = jdbcPositionToValuesArrayPosition( jdbcPosition );
108-
109-
final JdbcMapping jdbcMapping;
110-
if ( referencedModelPart instanceof DiscriminatorMapping ) {
111-
jdbcMapping = ( (DiscriminatorMapping) referencedModelPart ).getUnderlyingJdbcMapping();
112-
}
113-
else {
114-
jdbcMapping = referencedModelPart.getJdbcMapping();
115-
}
106+
final JdbcMapping jdbcMapping =
107+
referencedModelPart instanceof DiscriminatorMapping discriminatorMapping
108+
? discriminatorMapping.getUnderlyingJdbcMapping()
109+
: referencedModelPart.getJdbcMapping();
116110

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

142137
final CompleteFetchBuilderBasicPart that = (CompleteFetchBuilderBasicPart) o;
143138
return navigablePath.equals( that.navigablePath )
144-
&& referencedModelPart.equals( that.referencedModelPart )
145-
&& Objects.equals( selectionAlias, that.selectionAlias );
139+
&& referencedModelPart.equals( that.referencedModelPart )
140+
&& Objects.equals( selectionAlias, that.selectionAlias );
146141
}
147142

148143
@Override

hibernate-core/src/main/java/org/hibernate/query/results/internal/complete/CompleteFetchBuilderEmbeddableValuedModelPart.java

Lines changed: 27 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,12 @@
88

99
import org.hibernate.engine.FetchTiming;
1010
import org.hibernate.metamodel.mapping.EmbeddableValuedModelPart;
11+
import org.hibernate.metamodel.mapping.SelectableMapping;
1112
import org.hibernate.query.results.internal.DomainResultCreationStateImpl;
1213
import org.hibernate.query.results.FetchBuilder;
1314
import org.hibernate.query.results.internal.ResultsHelper;
1415
import org.hibernate.spi.NavigablePath;
16+
import org.hibernate.sql.ast.spi.SqlSelection;
1517
import org.hibernate.sql.ast.tree.from.TableGroup;
1618
import org.hibernate.sql.ast.tree.from.TableReference;
1719
import org.hibernate.sql.results.graph.DomainResultCreationState;
@@ -73,31 +75,11 @@ public Fetch buildFetch(
7375
DomainResultCreationState domainResultCreationState) {
7476
assert fetchPath.equals( navigablePath );
7577
final DomainResultCreationStateImpl creationStateImpl = impl( domainResultCreationState );
76-
7778
final TableGroup tableGroup = creationStateImpl.getFromClauseAccess().getTableGroup( navigablePath.getParent() );
7879
modelPart.forEachSelectable(
79-
(selectionIndex, selectableMapping) -> {
80-
final TableReference tableReference = tableGroup.resolveTableReference(
81-
navigablePath,
82-
modelPart,
83-
selectableMapping.getContainingTableExpression()
84-
);
85-
final String columnAlias = columnAliases.get( selectionIndex );
86-
creationStateImpl.resolveSqlSelection(
87-
ResultsHelper.resolveSqlExpression(
88-
creationStateImpl,
89-
jdbcResultsMetadata,
90-
tableReference,
91-
selectableMapping,
92-
columnAlias
93-
),
94-
selectableMapping.getJdbcMapping().getJdbcJavaType(),
95-
null,
96-
creationStateImpl.getSessionFactory().getTypeConfiguration()
97-
);
98-
}
80+
(selectionIndex, selectableMapping) ->
81+
sqlSelection( jdbcResultsMetadata, selectionIndex, selectableMapping, creationStateImpl, tableGroup )
9982
);
100-
10183
return parent.generateFetchableFetch(
10284
modelPart,
10385
fetchPath,
@@ -108,6 +90,27 @@ public Fetch buildFetch(
10890
);
10991
}
11092

93+
private void sqlSelection(
94+
JdbcValuesMetadata jdbcResultsMetadata,
95+
int selectionIndex,
96+
SelectableMapping selectableMapping,
97+
DomainResultCreationStateImpl creationStateImpl,
98+
TableGroup tableGroup) {
99+
creationStateImpl.resolveSqlSelection(
100+
ResultsHelper.resolveSqlExpression(
101+
creationStateImpl,
102+
jdbcResultsMetadata,
103+
tableGroup.resolveTableReference( navigablePath, modelPart,
104+
selectableMapping.getContainingTableExpression() ),
105+
selectableMapping,
106+
columnAliases.get( selectionIndex )
107+
),
108+
selectableMapping.getJdbcMapping().getJdbcJavaType(),
109+
null,
110+
creationStateImpl.getSessionFactory().getTypeConfiguration()
111+
);
112+
}
113+
111114
@Override
112115
public boolean equals(Object o) {
113116
if ( this == o ) {
@@ -119,8 +122,8 @@ public boolean equals(Object o) {
119122

120123
final CompleteFetchBuilderEmbeddableValuedModelPart that = (CompleteFetchBuilderEmbeddableValuedModelPart) o;
121124
return navigablePath.equals( that.navigablePath )
122-
&& modelPart.equals( that.modelPart )
123-
&& columnAliases.equals( that.columnAliases );
125+
&& modelPart.equals( that.modelPart )
126+
&& columnAliases.equals( that.columnAliases );
124127
}
125128

126129
@Override

hibernate-core/src/main/java/org/hibernate/query/results/internal/complete/CompleteFetchBuilderEntityValuedModelPart.java

Lines changed: 27 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,13 @@
77
import java.util.List;
88

99
import org.hibernate.engine.FetchTiming;
10+
import org.hibernate.metamodel.mapping.SelectableMapping;
1011
import org.hibernate.metamodel.mapping.ValuedModelPart;
1112
import org.hibernate.query.results.internal.ResultsHelper;
1213
import org.hibernate.spi.NavigablePath;
1314
import org.hibernate.query.results.internal.DomainResultCreationStateImpl;
1415
import org.hibernate.query.results.FetchBuilder;
16+
import org.hibernate.sql.ast.spi.SqlSelection;
1517
import org.hibernate.sql.ast.tree.from.TableGroup;
1618
import org.hibernate.sql.ast.tree.from.TableReference;
1719
import org.hibernate.sql.results.graph.DomainResultCreationState;
@@ -74,31 +76,11 @@ public Fetch buildFetch(
7476
DomainResultCreationState domainResultCreationState) {
7577
assert fetchPath.equals( navigablePath );
7678
final DomainResultCreationStateImpl creationStateImpl = impl( domainResultCreationState );
77-
7879
final TableGroup tableGroup = creationStateImpl.getFromClauseAccess().getTableGroup( navigablePath.getParent() );
7980
modelPart.forEachSelectable(
80-
(selectionIndex, selectableMapping) -> {
81-
final TableReference tableReference = tableGroup.resolveTableReference(
82-
navigablePath,
83-
(ValuedModelPart) modelPart,
84-
selectableMapping.getContainingTableExpression()
85-
);
86-
final String columnAlias = columnAliases.get( selectionIndex );
87-
creationStateImpl.resolveSqlSelection(
88-
ResultsHelper.resolveSqlExpression(
89-
creationStateImpl,
90-
jdbcResultsMetadata,
91-
tableReference,
92-
selectableMapping,
93-
columnAlias
94-
),
95-
selectableMapping.getJdbcMapping().getJdbcJavaType(),
96-
null,
97-
creationStateImpl.getSessionFactory().getTypeConfiguration()
98-
);
99-
}
81+
(selectionIndex, selectableMapping) ->
82+
sqlSelection( jdbcResultsMetadata, selectionIndex, selectableMapping, creationStateImpl, tableGroup )
10083
);
101-
10284
return parent.generateFetchableFetch(
10385
modelPart,
10486
fetchPath,
@@ -109,6 +91,27 @@ public Fetch buildFetch(
10991
);
11092
}
11193

94+
private void sqlSelection(
95+
JdbcValuesMetadata jdbcResultsMetadata,
96+
int selectionIndex,
97+
SelectableMapping selectableMapping,
98+
DomainResultCreationStateImpl creationStateImpl,
99+
TableGroup tableGroup) {
100+
creationStateImpl.resolveSqlSelection(
101+
ResultsHelper.resolveSqlExpression(
102+
creationStateImpl,
103+
jdbcResultsMetadata,
104+
tableGroup.resolveTableReference( navigablePath, (ValuedModelPart) modelPart,
105+
selectableMapping.getContainingTableExpression() ),
106+
selectableMapping,
107+
columnAliases.get( selectionIndex )
108+
),
109+
selectableMapping.getJdbcMapping().getJdbcJavaType(),
110+
null,
111+
creationStateImpl.getSessionFactory().getTypeConfiguration()
112+
);
113+
}
114+
112115
@Override
113116
public boolean equals(Object o) {
114117
if ( this == o ) {
@@ -120,8 +123,8 @@ public boolean equals(Object o) {
120123

121124
final CompleteFetchBuilderEntityValuedModelPart that = (CompleteFetchBuilderEntityValuedModelPart) o;
122125
return navigablePath.equals( that.navigablePath )
123-
&& modelPart.equals( that.modelPart )
124-
&& columnAliases.equals( that.columnAliases );
126+
&& modelPart.equals( that.modelPart )
127+
&& columnAliases.equals( that.columnAliases );
125128
}
126129

127130
@Override

0 commit comments

Comments
 (0)