Skip to content

Commit

Permalink
fixup! HHH-17406 Retrieve arbitrary on-execution generated values eff…
Browse files Browse the repository at this point in the history
…iciently
  • Loading branch information
mbladel committed Dec 22, 2023
1 parent ecececa commit 848bc4e
Show file tree
Hide file tree
Showing 5 changed files with 23 additions and 15 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import org.hibernate.sql.results.graph.basic.BasicResult;
import org.hibernate.sql.results.jdbc.spi.JdbcValuesMetadata;

import static org.hibernate.generator.values.internal.GeneratedValuesHelper.getActualGeneratedModelPart;
import static org.hibernate.query.results.ResultsHelper.impl;
import static org.hibernate.query.results.ResultsHelper.jdbcPositionToValuesArrayPosition;

Expand Down Expand Up @@ -104,7 +105,7 @@ public BasicValuedModelPart getModelPart() {
private static int columnIndex(JdbcValuesMetadata jdbcResultsMetadata, BasicValuedModelPart modelPart) {
try {
return jdbcPositionToValuesArrayPosition( jdbcResultsMetadata.resolveColumnPosition(
modelPart.getSelectionExpression()
getActualGeneratedModelPart( modelPart ).getSelectionExpression()
) );
}
catch (Exception e) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -91,18 +91,19 @@ public static GeneratedValues getGeneratedValues(
final GeneratedValuesMutationDelegate delegate = persister.getMutationDelegate(
timing == EventType.INSERT ? MutationType.INSERT : MutationType.UPDATE
);
final List<? extends ModelPart> generatedProperties = getActualGeneratedModelParts(
persister,
timing,
delegate.supportsArbitraryValues(),
delegate.supportsRowId()
);
final GeneratedValuesMappingProducer mappingProducer =
(GeneratedValuesMappingProducer) delegate.getGeneratedValuesMappingProducer();
final List<GeneratedValueBasicResultBuilder> resultBuilders = mappingProducer.getResultBuilders();
final List<ModelPart> generatedProperties = new ArrayList<>( resultBuilders.size() );
for ( GeneratedValueBasicResultBuilder resultBuilder : resultBuilders ) {
generatedProperties.add( resultBuilder.getModelPart() );
}

final GeneratedValuesImpl generatedValues = new GeneratedValuesImpl( generatedProperties );
final Object[] results = readGeneratedValues(
resultSet,
persister,
delegate.getGeneratedValuesMappingProducer(),
mappingProducer,
wrapperOptions.getSession()
);

Expand Down Expand Up @@ -265,10 +266,9 @@ public static GeneratedValuesMappingProducer createMappingProducer(
final ModelPart modelPart = generatedProperties.get( i );
final BasicValuedModelPart basicModelPart = modelPart.asBasicValuedModelPart();
if ( basicModelPart != null ) {
final BasicValuedModelPart actual = getActualGeneratedModelPart( basicModelPart );
final GeneratedValueBasicResultBuilder resultBuilder = new GeneratedValueBasicResultBuilder(
parentNavigablePath.append( actual.getSelectableName() ),
actual,
parentNavigablePath.append( basicModelPart.getSelectableName() ),
basicModelPart,
tableGroup,
useIndex ? i : null
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
import org.hibernate.sql.model.ast.builder.TableUpdateBuilderStandard;

import static java.sql.Statement.RETURN_GENERATED_KEYS;
import static org.hibernate.generator.values.internal.GeneratedValuesHelper.getActualGeneratedModelPart;
import static org.hibernate.generator.values.internal.GeneratedValuesHelper.getGeneratedValues;
import static org.hibernate.internal.util.StringHelper.unquote;

Expand Down Expand Up @@ -68,8 +69,8 @@ public GetGeneratedKeysDelegate(
final List<String> columnNamesList = new ArrayList<>( resultBuilders.size() );
final boolean unquote = dialect().unquoteGetGeneratedKeys();
for ( GeneratedValueBasicResultBuilder resultBuilder : resultBuilders ) {
final String columnName = resultBuilder.getModelPart().getSelectionExpression();
columnNamesList.add( unquote ? unquote( columnName, dialect() ) : columnName );
final String col = getActualGeneratedModelPart( resultBuilder.getModelPart() ).getSelectionExpression();
columnNamesList.add( unquote ? unquote( col, dialect() ) : col );
}
columnNames = columnNamesList.toArray( new String[0] );
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
import org.hibernate.sql.model.ast.builder.TableMutationBuilder;

import static java.sql.Statement.NO_GENERATED_KEYS;
import static org.hibernate.generator.values.internal.GeneratedValuesHelper.getActualGeneratedModelPart;
import static org.hibernate.generator.values.internal.GeneratedValuesHelper.getGeneratedValues;

/**
Expand Down Expand Up @@ -60,7 +61,10 @@ public InsertReturningDelegate(EntityPersister persister, EventType timing) {
final List<GeneratedValueBasicResultBuilder> resultBuilders = jdbcValuesMappingProducer.getResultBuilders();
this.generatedColumns = new ArrayList<>( resultBuilders.size() );
for ( GeneratedValueBasicResultBuilder resultBuilder : resultBuilders ) {
generatedColumns.add( new ColumnReference( tableReference, resultBuilder.getModelPart() ) );
generatedColumns.add( new ColumnReference(
tableReference,
getActualGeneratedModelPart( resultBuilder.getModelPart() )
) );
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@
import org.hibernate.sql.model.ast.builder.TableMutationBuilder;
import org.hibernate.type.Type;

import static org.hibernate.generator.values.internal.GeneratedValuesHelper.getActualGeneratedModelPart;

/**
* Uses a unique key of the inserted entity to locate the newly inserted row.
*
Expand Down Expand Up @@ -63,7 +65,7 @@ public UniqueKeySelectingDelegate(
final List<GeneratedValueBasicResultBuilder> resultBuilders = jdbcValuesMappingProducer.getResultBuilders();
final List<String> columnNames = new ArrayList<>( resultBuilders.size() );
for ( GeneratedValueBasicResultBuilder resultBuilder : resultBuilders ) {
columnNames.add( resultBuilder.getModelPart().getSelectionExpression() );
columnNames.add( getActualGeneratedModelPart( resultBuilder.getModelPart() ).getSelectionExpression() );
}
selectString = persister.getSelectByUniqueKeyString(
uniqueKeyPropertyNames,
Expand Down

0 comments on commit 848bc4e

Please sign in to comment.