Skip to content

Commit 29784d3

Browse files
committed
mninor code style changes around Operations stuff
1 parent 72687f4 commit 29784d3

File tree

6 files changed

+159
-233
lines changed

6 files changed

+159
-233
lines changed

hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/SoftDeleteMappingImpl.java

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -124,9 +124,12 @@ public SoftDeleteMappingImpl(
124124
}
125125
else {
126126
//noinspection unchecked
127-
final BasicValueConverter<Boolean, Object> converter = (BasicValueConverter<Boolean, Object>) resolution.getValueConverter();
127+
final BasicValueConverter<Boolean, ?> converter =
128+
(BasicValueConverter<Boolean, ?>)
129+
resolution.getValueConverter();
128130
//noinspection unchecked
129-
final JdbcLiteralFormatter<Object> literalFormatter = resolution.getJdbcMapping().getJdbcLiteralFormatter();
131+
final JdbcLiteralFormatter<Object> literalFormatter =
132+
resolution.getJdbcMapping().getJdbcLiteralFormatter();
130133

131134
if ( converter == null ) {
132135
// the database column is BIT or BOOLEAN : pass-thru
@@ -175,16 +178,10 @@ public Object getDeletionIndicator() {
175178
@Override
176179
public Assignment createSoftDeleteAssignment(TableReference tableReference) {
177180
final ColumnReference columnReference = new ColumnReference( tableReference, this );
178-
final Expression valueExpression;
179-
180-
if ( strategy == SoftDeleteType.TIMESTAMP ) {
181-
valueExpression = currentTimestampFunctionExpression;
182-
}
183-
else {
184-
//noinspection rawtypes,unchecked
185-
valueExpression = new JdbcLiteral( deletedLiteralValue, jdbcMapping );
186-
}
187-
181+
final Expression valueExpression =
182+
strategy == SoftDeleteType.TIMESTAMP
183+
? currentTimestampFunctionExpression
184+
: new JdbcLiteral<>( deletedLiteralValue, jdbcMapping );
188185
return new Assignment( columnReference, valueExpression );
189186
}
190187

hibernate-core/src/main/java/org/hibernate/sql/ast/tree/expression/JdbcLiteral.java

Lines changed: 24 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
import org.hibernate.query.sqm.sql.internal.DomainResultProducer;
1717
import org.hibernate.sql.ast.SqlAstWalker;
1818
import org.hibernate.sql.ast.spi.SqlAstCreationState;
19-
import org.hibernate.sql.ast.spi.SqlExpressionResolver;
2019
import org.hibernate.sql.ast.spi.SqlSelection;
2120
import org.hibernate.sql.exec.spi.ExecutionContext;
2221
import org.hibernate.sql.exec.spi.JdbcParameterBindings;
@@ -79,7 +78,7 @@ public void bindParameterValue(
7978
// MappingModelExpressible
8079

8180
@Override
82-
public MappingModelExpressible getExpressionType() {
81+
public MappingModelExpressible<?> getExpressionType() {
8382
return this;
8483
}
8584

@@ -114,14 +113,20 @@ public Object disassemble(Object value, SharedSessionContractImplementor session
114113

115114
@Override
116115
public void addToCacheKey(MutableCacheKeyBuilder cacheKey, Object value, SharedSessionContractImplementor session) {
117-
if ( value == null ) {
118-
return;
116+
if ( value != null ) {
117+
cacheKey.addValue( disassemble( value, jdbcMapping.getJdbcJavaType().getMutabilityPlan(), session ) );
118+
cacheKey.addHashCode( hashCode( value, jdbcMapping.getJavaTypeDescriptor() ) );
119119
}
120-
final Serializable disassemble = ( (MutabilityPlan<Object>) jdbcMapping.getJdbcJavaType().getMutabilityPlan() )
121-
.disassemble( value, session );
122-
final int hashCode = jdbcMapping.getJavaTypeDescriptor().extractHashCode( value );
123-
cacheKey.addValue( disassemble );
124-
cacheKey.addHashCode( hashCode );
120+
}
121+
122+
private static <T> int hashCode(Object value, JavaType<T> javaTypeDescriptor) {
123+
return javaTypeDescriptor.extractHashCode( (T) value );
124+
}
125+
126+
private static <T> Serializable disassemble(
127+
Object value, MutabilityPlan<T> mutabilityPlan,
128+
SharedSessionContractImplementor session) {
129+
return mutabilityPlan.disassemble( (T) value, session );
125130
}
126131

127132
@Override
@@ -155,28 +160,25 @@ public <X, Y> int forEachJdbcValue(
155160
@Override
156161
public DomainResult<T> createDomainResult(String resultVariable, DomainResultCreationState creationState) {
157162
final SqlAstCreationState sqlAstCreationState = creationState.getSqlAstCreationState();
158-
final SqlExpressionResolver sqlExpressionResolver = sqlAstCreationState.getSqlExpressionResolver();
159-
160-
final SqlSelection sqlSelection = sqlExpressionResolver.resolveSqlSelection(
161-
this,
162-
jdbcMapping.getJdbcJavaType(),
163-
null,
164-
sqlAstCreationState.getCreationContext().getMappingMetamodel().getTypeConfiguration()
165-
);
166-
163+
final SqlSelection sqlSelection =
164+
sqlAstCreationState.getSqlExpressionResolver()
165+
.resolveSqlSelection(
166+
this,
167+
jdbcMapping.getJdbcJavaType(),
168+
null,
169+
sqlAstCreationState.getCreationContext().getTypeConfiguration()
170+
);
167171
return new BasicResult<>( sqlSelection.getValuesArrayPosition(), resultVariable, jdbcMapping );
168172
}
169173

170174
@Override
171175
public void applySqlSelections(DomainResultCreationState creationState) {
172176
final SqlAstCreationState sqlAstCreationState = creationState.getSqlAstCreationState();
173-
final SqlExpressionResolver sqlExpressionResolver = sqlAstCreationState.getSqlExpressionResolver();
174-
175-
sqlExpressionResolver.resolveSqlSelection(
177+
sqlAstCreationState.getSqlExpressionResolver().resolveSqlSelection(
176178
this,
177179
jdbcMapping.getJdbcJavaType(),
178180
null,
179-
sqlAstCreationState.getCreationContext().getMappingMetamodel().getTypeConfiguration()
181+
sqlAstCreationState.getCreationContext().getTypeConfiguration()
180182
);
181183
}
182184

hibernate-core/src/main/java/org/hibernate/sql/exec/spi/AbstractJdbcOperationQuery.java

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,15 @@
44
*/
55
package org.hibernate.sql.exec.spi;
66

7-
import java.util.Collections;
87
import java.util.List;
98
import java.util.Map;
109
import java.util.Set;
1110

1211
import org.hibernate.query.spi.QueryOptions;
1312
import org.hibernate.sql.ast.tree.expression.JdbcParameter;
1413

14+
import static java.util.Collections.emptyMap;
15+
1516
/**
1617
* Executable JDBC command
1718
*
@@ -27,12 +28,7 @@ public AbstractJdbcOperationQuery(
2728
String sql,
2829
List<JdbcParameterBinder> parameterBinders,
2930
Set<String> affectedTableNames) {
30-
this(
31-
sql,
32-
parameterBinders,
33-
affectedTableNames,
34-
Collections.emptyMap()
35-
);
31+
this( sql, parameterBinders, affectedTableNames, emptyMap() );
3632
}
3733

3834
public AbstractJdbcOperationQuery(
@@ -77,7 +73,7 @@ public boolean isCompatibleWith(JdbcParameterBindings jdbcParameterBindings, Que
7773
if ( jdbcParameterBindings == null ) {
7874
return false;
7975
}
80-
for ( Map.Entry<JdbcParameter, JdbcParameterBinding> entry : appliedParameters.entrySet() ) {
76+
for ( var entry : appliedParameters.entrySet() ) {
8177
final JdbcParameterBinding binding = jdbcParameterBindings.getBinding( entry.getKey() );
8278
final JdbcParameterBinding appliedBinding = entry.getValue();
8379
//noinspection unchecked

hibernate-core/src/main/java/org/hibernate/sql/exec/spi/JdbcOperationQuerySelect.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ public JdbcOperationQuerySelect(
4444
JdbcLockStrategy.AUTO,
4545
null,
4646
null
47-
);
47+
);
4848
}
4949

5050
public JdbcOperationQuerySelect(
@@ -101,7 +101,7 @@ public boolean isCompatibleWith(JdbcParameterBindings jdbcParameterBindings, Que
101101
if ( jdbcParameterBindings == null ) {
102102
return false;
103103
}
104-
for ( Map.Entry<JdbcParameter, JdbcParameterBinding> entry : appliedParameters.entrySet() ) {
104+
for ( var entry : appliedParameters.entrySet() ) {
105105
final JdbcParameter parameter = entry.getKey();
106106
final JdbcParameterBinding appliedBinding = entry.getValue();
107107
// This is a special case where the rendered SQL depends on the presence of the parameter,

hibernate-core/src/main/java/org/hibernate/sql/model/jdbc/DeleteOrUpsertOperation.java

Lines changed: 33 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -6,32 +6,28 @@
66

77
import java.sql.PreparedStatement;
88
import java.sql.SQLException;
9-
import java.util.Collections;
10-
import java.util.List;
119
import java.util.Locale;
12-
import java.util.Set;
1310

1411
import org.hibernate.engine.jdbc.mutation.JdbcValueBindings;
1512
import org.hibernate.engine.jdbc.mutation.ParameterUsage;
1613
import org.hibernate.engine.jdbc.mutation.group.PreparedStatementDetails;
1714
import org.hibernate.engine.jdbc.mutation.internal.MutationQueryOptions;
1815
import org.hibernate.engine.jdbc.mutation.internal.PreparedStatementGroupSingleTable;
1916
import org.hibernate.engine.jdbc.mutation.spi.Binding;
20-
import org.hibernate.engine.jdbc.mutation.spi.BindingGroup;
17+
import org.hibernate.engine.jdbc.spi.JdbcServices;
2118
import org.hibernate.engine.spi.SharedSessionContractImplementor;
2219
import org.hibernate.persister.entity.mutation.EntityMutationTarget;
2320
import org.hibernate.persister.entity.mutation.EntityTableMapping;
2421
import org.hibernate.persister.entity.mutation.UpdateValuesAnalysis;
25-
import org.hibernate.sql.ast.SqlAstTranslator;
2622
import org.hibernate.sql.model.MutationTarget;
2723
import org.hibernate.sql.model.MutationType;
2824
import org.hibernate.sql.model.SelfExecutingUpdateOperation;
2925
import org.hibernate.sql.model.TableMapping;
3026
import org.hibernate.sql.model.ValuesAnalysis;
31-
import org.hibernate.sql.model.ast.ColumnValueParameter;
3227
import org.hibernate.sql.model.internal.OptionalTableUpdate;
3328
import org.hibernate.sql.model.internal.TableDeleteStandard;
3429

30+
import static java.util.Collections.emptyList;
3531
import static org.hibernate.sql.model.ModelMutationLogging.MODEL_MUTATION_LOGGER;
3632

3733
/**
@@ -92,12 +88,12 @@ public void performMutation(
9288
SharedSessionContractImplementor session) {
9389
final UpdateValuesAnalysis analysis = (UpdateValuesAnalysis) valuesAnalysis;
9490

95-
if ( !analysis.getTablesWithNonNullValues().contains( tableMapping ) ) {
96-
// all the new values are null - delete
97-
performDelete( jdbcValueBindings, session );
91+
if ( analysis.getTablesWithNonNullValues().contains( tableMapping ) ) {
92+
performUpsert( jdbcValueBindings, session );
9893
}
9994
else {
100-
performUpsert( jdbcValueBindings, session );
95+
// all the new values are null - delete
96+
performDelete( jdbcValueBindings, session );
10197
}
10298
}
10399

@@ -109,31 +105,21 @@ private void performDelete(JdbcValueBindings jdbcValueBindings, SharedSessionCon
109105
mutationTarget,
110106
"upsert delete",
111107
optionalTableUpdate.getKeyBindings(),
112-
Collections.emptyList(),
113-
Collections.emptyList()
108+
emptyList(),
109+
emptyList()
114110
);
115111

116-
final SqlAstTranslator<JdbcDeleteMutation> translator = session
117-
.getJdbcServices()
118-
.getJdbcEnvironment()
119-
.getSqlAstTranslatorFactory()
120-
.buildModelMutationTranslator( upsertDeleteAst, session.getFactory() );
121-
final JdbcDeleteMutation upsertDelete = translator.translate( null, MutationQueryOptions.INSTANCE );
122-
123-
final PreparedStatementGroupSingleTable statementGroup = new PreparedStatementGroupSingleTable( upsertDelete, session );
124-
final PreparedStatementDetails statementDetails = statementGroup.resolvePreparedStatementDetails( tableMapping.getTableName() );
125-
112+
final JdbcServices jdbcServices = session.getJdbcServices();
113+
final var upsertDelete =
114+
jdbcServices.getJdbcEnvironment().getSqlAstTranslatorFactory()
115+
.buildModelMutationTranslator( upsertDeleteAst, session.getFactory() )
116+
.translate( null, MutationQueryOptions.INSTANCE );
117+
final var statementGroup = new PreparedStatementGroupSingleTable( upsertDelete, session );
118+
final var statementDetails = statementGroup.resolvePreparedStatementDetails( tableMapping.getTableName() );
126119
try {
127120
final PreparedStatement upsertDeleteStatement = statementDetails.resolveStatement();
128-
session.getJdbcServices().getSqlStatementLogger().logStatement( statementDetails.getSqlString() );
129-
130-
bindDeleteKeyValues(
131-
jdbcValueBindings,
132-
optionalTableUpdate.getParameters(),
133-
statementDetails,
134-
session
135-
);
136-
121+
jdbcServices.getSqlStatementLogger().logStatement( statementDetails.getSqlString() );
122+
bindDeleteKeyValues( jdbcValueBindings, statementDetails, session );
137123
final int rowCount = session.getJdbcCoordinator().getResultSetReturn()
138124
.executeUpdate( upsertDeleteStatement, statementDetails.getSqlString() );
139125
MODEL_MUTATION_LOGGER.tracef( "`%s` rows upsert-deleted from `%s`", rowCount, tableMapping.getTableName() );
@@ -145,29 +131,22 @@ private void performDelete(JdbcValueBindings jdbcValueBindings, SharedSessionCon
145131

146132
private void bindDeleteKeyValues(
147133
JdbcValueBindings jdbcValueBindings,
148-
List<ColumnValueParameter> parameters,
149134
PreparedStatementDetails statementDetails,
150135
SharedSessionContractImplementor session) {
151136
final PreparedStatement statement = statementDetails.resolveStatement();
152-
153-
final BindingGroup bindingGroup = jdbcValueBindings.getBindingGroup( tableMapping.getTableName() );
154-
final Set<Binding> bindings = bindingGroup.getBindings();
155-
156137
int jdbcBindingPosition = 1;
157-
for ( Binding binding : bindings ) {
158-
if ( binding.getValueDescriptor().getUsage() != ParameterUsage.RESTRICT ) {
159-
continue;
138+
for ( Binding binding : jdbcValueBindings.getBindingGroup( tableMapping.getTableName() ).getBindings() ) {
139+
if ( binding.getValueDescriptor().getUsage() == ParameterUsage.RESTRICT ) {
140+
bindKeyValue(
141+
jdbcBindingPosition++,
142+
binding,
143+
binding.getValueDescriptor(),
144+
statement,
145+
statementDetails.getSqlString(),
146+
tableMapping,
147+
session
148+
);
160149
}
161-
162-
bindKeyValue(
163-
jdbcBindingPosition++,
164-
binding,
165-
binding.getValueDescriptor(),
166-
statement,
167-
statementDetails.getSqlString(),
168-
tableMapping,
169-
session
170-
);
171150
}
172151
}
173152

@@ -199,18 +178,15 @@ private static void bindKeyValue(
199178
private void performUpsert(JdbcValueBindings jdbcValueBindings, SharedSessionContractImplementor session) {
200179
MODEL_MUTATION_LOGGER.tracef( "#performUpsert(%s)", tableMapping.getTableName() );
201180

202-
final PreparedStatementGroupSingleTable statementGroup = new PreparedStatementGroupSingleTable( upsertOperation, session );
203-
final PreparedStatementDetails statementDetails = statementGroup.resolvePreparedStatementDetails( tableMapping.getTableName() );
204-
181+
final var statementGroup = new PreparedStatementGroupSingleTable( upsertOperation, session );
182+
final var statementDetails = statementGroup.resolvePreparedStatementDetails( tableMapping.getTableName() );
205183
try {
206184
final PreparedStatement updateStatement = statementDetails.resolveStatement();
207185
session.getJdbcServices().getSqlStatementLogger().logStatement( statementDetails.getSqlString() );
208-
209186
jdbcValueBindings.beforeStatement( statementDetails );
210-
211-
final int rowCount = session.getJdbcCoordinator().getResultSetReturn()
212-
.executeUpdate( updateStatement, statementDetails.getSqlString() );
213-
187+
final int rowCount =
188+
session.getJdbcCoordinator().getResultSetReturn()
189+
.executeUpdate( updateStatement, statementDetails.getSqlString() );
214190
MODEL_MUTATION_LOGGER.tracef( "`%s` rows upserted into `%s`", rowCount, tableMapping.getTableName() );
215191
}
216192
finally {

0 commit comments

Comments
 (0)