Skip to content

Commit

Permalink
HHH-16981 Improve JdbcOperation caching
Browse files Browse the repository at this point in the history
  • Loading branch information
beikov authored and Sanne committed Jul 25, 2023
1 parent bf9a828 commit 0c7c68f
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ public class CollectionLoaderSingleKey implements CollectionLoader {
private final int keyJdbcCount;

private final SelectStatement sqlAst;
private final JdbcOperationQuerySelect jdbcSelect;
private final JdbcParametersList jdbcParameters;

public CollectionLoaderSingleKey(
Expand All @@ -64,6 +65,11 @@ public CollectionLoaderSingleKey(
sessionFactory
);
this.jdbcParameters = jdbcParametersBuilder.build();
this.jdbcSelect = sessionFactory.getJdbcServices()
.getJdbcEnvironment()
.getSqlAstTranslatorFactory()
.buildSelectTranslator( sessionFactory, sqlAst )
.translate( JdbcParameterBindings.NO_BINDINGS, QueryOptions.NONE );
}

@Override
Expand All @@ -87,10 +93,7 @@ public JdbcParametersList getJdbcParameters() {
public PersistentCollection<?> load(Object key, SharedSessionContractImplementor session) {
final CollectionKey collectionKey = new CollectionKey( attributeMapping.getCollectionDescriptor(), key );

final SessionFactoryImplementor sessionFactory = session.getFactory();
final JdbcServices jdbcServices = sessionFactory.getJdbcServices();
final JdbcEnvironment jdbcEnvironment = jdbcServices.getJdbcEnvironment();
final SqlAstTranslatorFactory sqlAstTranslatorFactory = jdbcEnvironment.getSqlAstTranslatorFactory();
final JdbcServices jdbcServices = session.getFactory().getJdbcServices();

final JdbcParameterBindings jdbcParameterBindings = new JdbcParameterBindingsImpl( keyJdbcCount );
int offset = jdbcParameterBindings.registerParametersForEachJdbcValue(
Expand All @@ -101,10 +104,6 @@ public PersistentCollection<?> load(Object key, SharedSessionContractImplementor
);
assert offset == jdbcParameters.size();

final JdbcOperationQuerySelect jdbcSelect = sqlAstTranslatorFactory
.buildSelectTranslator( sessionFactory, sqlAst )
.translate( jdbcParameterBindings, QueryOptions.NONE );

final SubselectFetch.RegistrationHandler subSelectFetchableKeysHandler = SubselectFetch.createRegistrationHandler(
session.getPersistenceContext().getBatchFetchQueue(),
sqlAst,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@
import org.hibernate.metamodel.mapping.AttributeMapping;
import org.hibernate.metamodel.mapping.EntityMappingType;
import org.hibernate.query.spi.QueryOptions;
import org.hibernate.sql.ast.tree.expression.JdbcParameter;
import org.hibernate.sql.ast.tree.select.SelectStatement;
import org.hibernate.sql.exec.internal.JdbcParameterBindingsImpl;
import org.hibernate.sql.exec.spi.JdbcOperationQuerySelect;
Expand All @@ -46,6 +45,7 @@
@Incubating
public class GeneratedValuesProcessor {
private final SelectStatement selectStatement;
private final JdbcOperationQuerySelect jdbcSelect;
private final List<AttributeMapping> generatedValuesToSelect;
private final JdbcParametersList jdbcParameters;

Expand All @@ -62,6 +62,7 @@ public GeneratedValuesProcessor(
generatedValuesToSelect = getGeneratedAttributes( entityDescriptor, timing );
if ( generatedValuesToSelect.isEmpty() ) {
selectStatement = null;
jdbcSelect = null;
this.jdbcParameters = JdbcParametersList.empty();
}
else {
Expand All @@ -78,6 +79,9 @@ public GeneratedValuesProcessor(
builder::add,
sessionFactory
);
jdbcSelect = sessionFactory.getJdbcServices().getJdbcEnvironment().getSqlAstTranslatorFactory()
.buildSelectTranslator( sessionFactory, selectStatement )
.translate( JdbcParameterBindings.NO_BINDINGS, QueryOptions.NONE );
this.jdbcParameters = builder.build();
}
}
Expand Down Expand Up @@ -116,10 +120,6 @@ public void processGeneratedValues(Object entity, Object id, Object[] state, Sha

private List<Object[]> executeSelect(Object id, SharedSessionContractImplementor session) {
final JdbcParameterBindings jdbcParamBindings = getJdbcParameterBindings( id, session );
final JdbcOperationQuerySelect jdbcSelect =
sessionFactory.getJdbcServices().getJdbcEnvironment().getSqlAstTranslatorFactory()
.buildSelectTranslator( sessionFactory, selectStatement )
.translate( jdbcParamBindings, QueryOptions.NONE );
return session.getFactory().getJdbcServices().getJdbcSelectExecutor()
.list( jdbcSelect, jdbcParamBindings, new NoCallbackExecutionContext(session), (row) -> row, FILTER );
}
Expand Down

0 comments on commit 0c7c68f

Please sign in to comment.