Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
import org.hibernate.sql.ast.tree.select.SelectStatement;
import org.hibernate.sql.exec.internal.JdbcParameterBindingImpl;
import org.hibernate.sql.exec.internal.JdbcParameterBindingsImpl;
import org.hibernate.sql.exec.internal.JdbcParameterImpl;
import org.hibernate.sql.exec.internal.SqlTypedMappingJdbcParameter;
import org.hibernate.sql.exec.internal.lock.LockingHelper;
import org.hibernate.sql.exec.spi.JdbcParameterBindings;
import org.hibernate.sql.exec.spi.JdbcSelect;
Expand Down Expand Up @@ -216,8 +216,7 @@ private static void handleRestriction(
LoaderSqlAstCreationState sqlAstCreationState,
TableGroup rootTableGroup,
JdbcParameterBindings jdbcParameterBindings) {
final var jdbcMapping = jdbcValueMapping.getJdbcMapping();
final var jdbcParameter = new JdbcParameterImpl( jdbcMapping );
final var jdbcParameter = new SqlTypedMappingJdbcParameter( jdbcValueMapping );
rootQuerySpec.applyPredicate(
new ComparisonPredicate(
sqlAstCreationState.getSqlExpressionResolver().resolveSqlExpression(
Expand All @@ -229,8 +228,8 @@ private static void handleRestriction(
)
);

jdbcParameterBindings.addBinding( jdbcParameter,
new JdbcParameterBindingImpl( jdbcMapping, value ) );
final var jdbcMapping = jdbcValueMapping.getJdbcMapping();
jdbcParameterBindings.addBinding( jdbcParameter, new JdbcParameterBindingImpl( jdbcMapping, value ) );
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,17 @@

import org.hibernate.engine.jdbc.Size;
import org.hibernate.metamodel.mapping.JdbcMapping;
import org.hibernate.metamodel.mapping.SqlTypedMapping;

import org.checkerframework.checker.nullness.qual.Nullable;

/**
* A column in a IdTable. As these columns mirror the entity id columns, we know a few things about it inherently,
* such as being non-nullable
*
* @author Steve Ebersole
*/
public class TemporaryTableColumn {
public class TemporaryTableColumn implements SqlTypedMapping {
private final TemporaryTable containingTable;
private final String columnName;
private final JdbcMapping jdbcMapping;
Expand Down Expand Up @@ -57,6 +60,7 @@ public String getColumnName() {
return columnName;
}

@Override
public JdbcMapping getJdbcMapping() {
return jdbcMapping;
}
Expand All @@ -80,4 +84,34 @@ public boolean isNullable() {
public boolean isPrimaryKey() {
return primaryKey;
}

@Override
public @Nullable String getColumnDefinition() {
return sqlTypeName;
}

@Override
public @Nullable Long getLength() {
return size.getLength();
}

@Override
public @Nullable Integer getArrayLength() {
return size.getArrayLength();
}

@Override
public @Nullable Integer getPrecision() {
return size.getPrecision();
}

@Override
public @Nullable Integer getScale() {
return size.getScale();
}

@Override
public @Nullable Integer getTemporalPrecision() {
return getJdbcMapping().getJdbcType().isTemporal() ? size.getPrecision() : null;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@
import org.hibernate.sql.exec.internal.JdbcOperationQuerySelect;
import org.hibernate.sql.exec.internal.JdbcParameterBindingImpl;
import org.hibernate.sql.exec.internal.JdbcParameterBindingsImpl;
import org.hibernate.sql.exec.internal.JdbcParameterImpl;
import org.hibernate.sql.exec.internal.SqlTypedMappingJdbcParameter;
import org.hibernate.sql.exec.spi.Callback;
import org.hibernate.sql.exec.spi.JdbcParameterBinding;
import org.hibernate.sql.exec.spi.JdbcParameterBindings;
Expand Down Expand Up @@ -355,7 +355,7 @@ void applyRestriction(
predicateConsumer.accept( new NullnessPredicate( columnReference ) );
}
else {
final var jdbcParameter = new JdbcParameterImpl( jdbcValueMapping.getJdbcMapping() );
final var jdbcParameter = new SqlTypedMappingJdbcParameter( jdbcValueMapping );
final var predicate =
new ComparisonPredicate( columnReference, ComparisonOperator.EQUAL, jdbcParameter );
predicateConsumer.accept( predicate );
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,15 @@
import org.hibernate.loader.ast.spi.CollectionBatchLoader;
import org.hibernate.loader.ast.spi.SqlArrayMultiKeyLoader;
import org.hibernate.metamodel.mapping.ForeignKeyDescriptor;
import org.hibernate.metamodel.mapping.JdbcMapping;
import org.hibernate.metamodel.mapping.PluralAttributeMapping;
import org.hibernate.metamodel.mapping.SqlTypedMapping;
import org.hibernate.metamodel.mapping.internal.SqlTypedMappingImpl;
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.JdbcParameterBindingImpl;
import org.hibernate.sql.exec.internal.JdbcParameterBindingsImpl;
import org.hibernate.sql.exec.internal.JdbcParameterImpl;
import org.hibernate.sql.exec.internal.SqlTypedMappingJdbcParameter;
import org.hibernate.sql.exec.internal.JdbcOperationQuerySelect;
import org.hibernate.sql.exec.spi.JdbcParameterBindings;
import org.hibernate.sql.exec.spi.JdbcParametersList;
Expand All @@ -44,7 +45,7 @@ public class CollectionBatchLoaderArrayParam
extends AbstractCollectionBatchLoader
implements SqlArrayMultiKeyLoader {

private final JdbcMapping arrayJdbcMapping;
private final SqlTypedMapping arraySqlTypedMapping;
private final JdbcParameter jdbcParameter;
private final SelectStatement sqlSelect;
private final JdbcOperationQuerySelect jdbcSelectOperation;
Expand All @@ -64,16 +65,24 @@ public CollectionBatchLoaderArrayParam(
}

final var keyDescriptor = getLoadable().getKeyDescriptor();
final var jdbcMapping = keyDescriptor.getSingleJdbcMapping();
final var selectable = keyDescriptor.getSelectable( 0 );
final var jdbcMapping = selectable.getJdbcMapping();
final var jdbcJavaTypeClass = jdbcMapping.getJdbcJavaType().getJavaTypeClass();

arrayJdbcMapping = MultiKeyLoadHelper.resolveArrayJdbcMapping(
jdbcMapping,
jdbcJavaTypeClass,
getSessionFactory()
arraySqlTypedMapping = new SqlTypedMappingImpl(
selectable.getColumnDefinition(),
selectable.getLength(),
selectable.getPrecision(),
selectable.getScale(),
selectable.getTemporalPrecision(),
MultiKeyLoadHelper.resolveArrayJdbcMapping(
jdbcMapping,
jdbcJavaTypeClass,
getSessionFactory()
)
);

jdbcParameter = new JdbcParameterImpl( arrayJdbcMapping );
jdbcParameter = new SqlTypedMappingJdbcParameter( arraySqlTypedMapping );
sqlSelect = LoaderSelectBuilder.createSelectBySingleArrayParameter(
getLoadable(),
keyDescriptor.getKeyPart(),
Expand Down Expand Up @@ -169,7 +178,7 @@ void initializeKeys(Object key, Object[] keysToInitialize, SharedSessionContract
final var jdbcParameterBindings = new JdbcParameterBindingsImpl(1);
jdbcParameterBindings.addBinding(
jdbcParameter,
new JdbcParameterBindingImpl( arrayJdbcMapping, keysToInitialize )
new JdbcParameterBindingImpl( arraySqlTypedMapping.getJdbcMapping(), keysToInitialize )
);

session.getJdbcServices().getJdbcSelectExecutor().list(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
import org.hibernate.sql.ast.tree.select.SelectStatement;
import org.hibernate.sql.exec.internal.BaseExecutionContext;
import org.hibernate.sql.exec.internal.JdbcParameterBindingsImpl;
import org.hibernate.sql.exec.internal.JdbcParameterImpl;
import org.hibernate.sql.exec.internal.SqlTypedMappingJdbcParameter;
import org.hibernate.sql.exec.internal.JdbcOperationQuerySelect;
import org.hibernate.sql.exec.spi.JdbcParametersList;
import org.hibernate.sql.results.graph.DomainResult;
Expand Down Expand Up @@ -100,7 +100,7 @@ class DatabaseSnapshotExecutor {
final var tableReference =
rootTableGroup.resolveTableReference( idNavigablePath,
selection.getContainingTableExpression() );
final var jdbcParameter = new JdbcParameterImpl( selection.getJdbcMapping() );
final var jdbcParameter = new SqlTypedMappingJdbcParameter( selection );
jdbcParametersBuilder.add( jdbcParameter );
final var columnReference =
(ColumnReference)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,16 @@
import org.hibernate.engine.spi.SharedSessionContractImplementor;
import org.hibernate.internal.build.AllowReflection;
import org.hibernate.loader.ast.spi.SqlArrayMultiKeyLoader;
import org.hibernate.metamodel.mapping.BasicEntityIdentifierMapping;
import org.hibernate.metamodel.mapping.EntityIdentifierMapping;
import org.hibernate.metamodel.mapping.EntityMappingType;
import org.hibernate.metamodel.mapping.JdbcMapping;
import org.hibernate.metamodel.mapping.SelectableMapping;
import org.hibernate.metamodel.mapping.SqlTypedMapping;
import org.hibernate.metamodel.mapping.internal.SqlTypedMappingImpl;
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.JdbcParameterImpl;
import org.hibernate.sql.exec.internal.SqlTypedMappingJdbcParameter;
import org.hibernate.sql.exec.internal.JdbcOperationQuerySelect;

import static org.hibernate.loader.ast.internal.LoaderHelper.loadByArrayParameter;
Expand All @@ -39,7 +41,7 @@ public class EntityBatchLoaderArrayParam<T>
implements SqlArrayMultiKeyLoader {
private final int domainBatchSize;

private final JdbcMapping arrayJdbcMapping;
private final SqlTypedMapping arraySqlTypedMapping;
private final JdbcParameter jdbcParameter;
private final SelectStatement sqlAst;
private final JdbcOperationQuerySelect jdbcSelectOperation;
Expand Down Expand Up @@ -70,14 +72,23 @@ public EntityBatchLoaderArrayParam(
);
}

final var identifierMapping = (BasicEntityIdentifierMapping) getLoadable().getIdentifierMapping();
arrayJdbcMapping = MultiKeyLoadHelper.resolveArrayJdbcMapping(
identifierMapping.getJdbcMapping(),
identifierMapping.getJavaType().getJavaTypeClass(),
sessionFactory
final var identifierMapping = getLoadable().getIdentifierMapping();
final SelectableMapping selectable = identifierMapping.getSelectable( 0 );
final JdbcMapping jdbcMapping = selectable.getJdbcMapping();
arraySqlTypedMapping = new SqlTypedMappingImpl(
selectable.getColumnDefinition(),
selectable.getLength(),
selectable.getPrecision(),
selectable.getScale(),
selectable.getTemporalPrecision(),
MultiKeyLoadHelper.resolveArrayJdbcMapping(
jdbcMapping,
jdbcMapping.getJdbcJavaType().getJavaTypeClass(),
sessionFactory
)
);

jdbcParameter = new JdbcParameterImpl( arrayJdbcMapping );
jdbcParameter = new SqlTypedMappingJdbcParameter( arraySqlTypedMapping );
sqlAst = LoaderSelectBuilder.createSelectBySingleArrayParameter(
getLoadable(),
identifierMapping,
Expand Down Expand Up @@ -132,7 +143,7 @@ protected void initializeEntities(
sqlAst,
jdbcSelectOperation,
jdbcParameter,
arrayJdbcMapping,
arraySqlTypedMapping.getJdbcMapping(),
id,
entityInstance,
getLoadable().getRootEntityDescriptor(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@
import org.hibernate.sql.ast.tree.select.QueryPart;
import org.hibernate.sql.ast.tree.select.QuerySpec;
import org.hibernate.sql.ast.tree.select.SelectStatement;
import org.hibernate.sql.exec.internal.JdbcParameterImpl;
import org.hibernate.sql.exec.internal.SqlTypedMappingJdbcParameter;
import org.hibernate.sql.results.graph.BiDirectionalFetch;
import org.hibernate.sql.results.graph.DomainResult;
import org.hibernate.sql.results.graph.EntityGraphTraversalState;
Expand Down Expand Up @@ -598,7 +598,7 @@ private void applyRestriction(
(ColumnReference)
sqlExpressionResolver.resolveSqlExpression( tableReference, selection );
if ( numberOfKeysToLoad == 1 ) {
final var jdbcParameter = new JdbcParameterImpl( selection.getJdbcMapping() );
final var jdbcParameter = new SqlTypedMappingJdbcParameter( selection );
jdbcParameterConsumer.accept( jdbcParameter );
rootQuerySpec.applyPredicate(
new ComparisonPredicate( columnRef, ComparisonOperator.EQUAL, jdbcParameter )
Expand All @@ -607,11 +607,9 @@ private void applyRestriction(
else {
final var predicate = new InListPredicate( columnRef );
for ( int i = 0; i < numberOfKeysToLoad; i++ ) {
for ( int j = 0; j < numberColumns; j++ ) {
final var jdbcParameter = new JdbcParameterImpl( columnRef.getJdbcMapping() );
jdbcParameterConsumer.accept( jdbcParameter );
predicate.addExpression( jdbcParameter );
}
final var jdbcParameter = new SqlTypedMappingJdbcParameter( selection );
jdbcParameterConsumer.accept( jdbcParameter );
predicate.addExpression( jdbcParameter );
}
rootQuerySpec.applyPredicate( predicate );
}
Expand All @@ -638,12 +636,13 @@ private void applyRestriction(

for ( int i = 0; i < numberOfKeysToLoad; i++ ) {
final List<JdbcParameter> tupleParams = new ArrayList<>( numberColumns );
for ( int j = 0; j < numberColumns; j++ ) {
final ColumnReference columnReference = columnReferences.get( j );
final JdbcParameter jdbcParameter = new JdbcParameterImpl( columnReference.getJdbcMapping() );
jdbcParameterConsumer.accept( jdbcParameter );
tupleParams.add( jdbcParameter );
}
restrictedPart.forEachSelectable(
(columnIndex, selection) -> {
final JdbcParameter jdbcParameter = new SqlTypedMappingJdbcParameter( selection );
jdbcParameterConsumer.accept( jdbcParameter );
tupleParams.add( jdbcParameter );
}
);
final SqlTuple paramTuple = new SqlTuple( tupleParams, restrictedPart );
predicate.addExpression( paramTuple );
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,18 @@
import org.hibernate.loader.ast.spi.MultiIdLoadOptions;
import org.hibernate.loader.ast.spi.SqlArrayMultiKeyLoader;
import org.hibernate.metamodel.mapping.BasicEntityIdentifierMapping;
import org.hibernate.metamodel.mapping.EntityIdentifierMapping;
import org.hibernate.metamodel.mapping.EntityMappingType;
import org.hibernate.metamodel.mapping.JdbcMapping;
import org.hibernate.metamodel.mapping.SelectableMapping;
import org.hibernate.metamodel.mapping.SqlTypedMapping;
import org.hibernate.metamodel.mapping.internal.SqlTypedMappingImpl;
import org.hibernate.query.spi.QueryOptions;
import org.hibernate.query.spi.QueryOptionsAdapter;
import org.hibernate.sql.ast.tree.expression.JdbcParameter;
import org.hibernate.sql.exec.internal.JdbcParameterBindingImpl;
import org.hibernate.sql.exec.internal.JdbcParameterBindingsImpl;
import org.hibernate.sql.exec.internal.JdbcParameterImpl;
import org.hibernate.sql.exec.internal.SqlTypedMappingJdbcParameter;
import org.hibernate.sql.exec.spi.JdbcParametersList;
import org.hibernate.sql.results.internal.RowTransformerStandardImpl;
import org.hibernate.sql.results.spi.ManagedResultConsumer;
Expand All @@ -43,7 +47,7 @@
*/
public class MultiIdEntityLoaderArrayParam<E> extends AbstractMultiIdEntityLoader<E>
implements SqlArrayMultiKeyLoader {
private final JdbcMapping arrayJdbcMapping;
private final SqlTypedMapping arraySqlTypedMapping;
private final JdbcParameter jdbcParameter;
protected final Object[] idArray;

Expand All @@ -52,11 +56,24 @@ public MultiIdEntityLoaderArrayParam(
EntityMappingType entityDescriptor,
SessionFactoryImplementor sessionFactory) {
super( entityDescriptor, sessionFactory );
final EntityIdentifierMapping identifierMapping = entityDescriptor.getIdentifierMapping();
final SelectableMapping selectable = identifierMapping.getSelectable( 0 );
final JdbcMapping jdbcMapping = selectable.getJdbcMapping();
final var idClass = identifierMapping.getJavaType().getJavaTypeClass();
idArray = (Object[]) Array.newInstance( idClass, 0 );
arrayJdbcMapping =
resolveArrayJdbcMapping( getIdentifierMapping().getJdbcMapping(), idClass, getSessionFactory() );
jdbcParameter = new JdbcParameterImpl( arrayJdbcMapping );
arraySqlTypedMapping = new SqlTypedMappingImpl(
selectable.getColumnDefinition(),
selectable.getLength(),
selectable.getPrecision(),
selectable.getScale(),
selectable.getTemporalPrecision(),
resolveArrayJdbcMapping(
jdbcMapping,
jdbcMapping.getJdbcJavaType().getJavaTypeClass(),
sessionFactory
)
);
jdbcParameter = new SqlTypedMappingJdbcParameter( arraySqlTypedMapping );
}

@Override
Expand Down Expand Up @@ -90,8 +107,10 @@ protected void loadEntitiesById(
);

final var bindings = new JdbcParameterBindingsImpl(1);
bindings.addBinding( jdbcParameter,
new JdbcParameterBindingImpl( arrayJdbcMapping, toIdArray( idsInBatch ) ) );
bindings.addBinding(
jdbcParameter,
new JdbcParameterBindingImpl( arraySqlTypedMapping.getJdbcMapping(), toIdArray( idsInBatch ) )
);

final var sqlAstTranslator =
getSqlAstTranslatorFactory()
Expand Down Expand Up @@ -156,7 +175,7 @@ protected void loadEntitiesWithUnresolvedIds(
sqlAst,
jdbcSelectOperation,
jdbcParameter,
arrayJdbcMapping,
arraySqlTypedMapping.getJdbcMapping(),
null,
null,
null,
Expand Down
Loading