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 @@ -27,13 +27,14 @@
import org.hibernate.sql.ast.spi.SimpleFromClauseAccessImpl;
import org.hibernate.sql.ast.spi.SqlAliasBaseManager;
import org.hibernate.sql.ast.spi.SqlExpressionResolver;
import org.hibernate.sql.ast.tree.expression.JdbcParameter;
import org.hibernate.sql.ast.tree.from.TableGroup;
import org.hibernate.sql.ast.tree.predicate.ComparisonPredicate;
import org.hibernate.sql.ast.tree.select.QuerySpec;
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.spi.JdbcOperationQuerySelect;
import org.hibernate.sql.exec.spi.JdbcParameterBindings;
import org.hibernate.sql.exec.spi.JdbcSelectExecutor;
Expand Down Expand Up @@ -209,8 +210,7 @@ private static void handleRestriction(
LoaderSqlAstCreationState sqlAstCreationState,
TableGroup rootTableGroup,
JdbcParameterBindings jdbcParameterBindings) {
final JdbcMapping jdbcMapping = jdbcValueMapping.getJdbcMapping();
final JdbcParameterImpl jdbcParameter = new JdbcParameterImpl( jdbcMapping );
final JdbcParameter jdbcParameter = new SqlTypedMappingJdbcParameter( jdbcValueMapping );
rootQuerySpec.applyPredicate(
new ComparisonPredicate(
sqlAstCreationState.getSqlExpressionResolver().resolveSqlExpression(
Expand All @@ -222,8 +222,8 @@ private static void handleRestriction(
)
);

final JdbcParameterBindingImpl jdbcParameterBinding = new JdbcParameterBindingImpl( jdbcMapping, value );
jdbcParameterBindings.addBinding( jdbcParameter, jdbcParameterBinding );
final JdbcMapping 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,29 @@ 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 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 @@ -41,7 +41,7 @@
import org.hibernate.sql.exec.internal.CallbackImpl;
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.JdbcOperationQuerySelect;
import org.hibernate.sql.exec.spi.JdbcParameterBinding;
Expand Down Expand Up @@ -357,7 +357,7 @@ void applyRestriction(
predicateConsumer.accept( new NullnessPredicate( columnReference ) );
}
else {
final JdbcParameter jdbcParameter = new JdbcParameterImpl( jdbcValueMapping.getJdbcMapping() );
final JdbcParameter jdbcParameter = new SqlTypedMappingJdbcParameter( jdbcValueMapping );
final ComparisonPredicate predicate =
new ComparisonPredicate( columnReference, ComparisonOperator.EQUAL, jdbcParameter );
predicateConsumer.accept( predicate );
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,17 @@
import org.hibernate.metamodel.mapping.ForeignKeyDescriptor;
import org.hibernate.metamodel.mapping.JdbcMapping;
import org.hibernate.metamodel.mapping.PluralAttributeMapping;
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.from.TableGroup;
import org.hibernate.sql.ast.tree.select.QuerySpec;
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.spi.JdbcOperationQuerySelect;
import org.hibernate.sql.exec.spi.JdbcParameterBindings;
import org.hibernate.sql.exec.spi.JdbcParametersList;
Expand All @@ -47,7 +50,7 @@ public class CollectionBatchLoaderArrayParam
extends AbstractCollectionBatchLoader
implements SqlArrayMultiKeyLoader {
private final Class<?> keyDomainType;
private final JdbcMapping arrayJdbcMapping;
private final SqlTypedMapping arraySqlTypedMapping;
private final JdbcParameter jdbcParameter;
private final SelectStatement sqlSelect;
private final JdbcOperationQuerySelect jdbcSelectOperation;
Expand All @@ -68,17 +71,25 @@ public CollectionBatchLoaderArrayParam(
}

final ForeignKeyDescriptor keyDescriptor = getLoadable().getKeyDescriptor();
final JdbcMapping jdbcMapping = keyDescriptor.getSingleJdbcMapping();
final SelectableMapping selectable = keyDescriptor.getSelectable( 0 );
final JdbcMapping jdbcMapping = selectable.getJdbcMapping();
final Class<?> jdbcJavaTypeClass = jdbcMapping.getJdbcJavaType().getJavaTypeClass();
keyDomainType = getKeyType( keyDescriptor.getKeyPart() );

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 @@ -178,7 +189,7 @@ void initializeKeys(Object key, Object[] keysToInitialize, SharedSessionContract
final JdbcParameterBindings jdbcParameterBindings = new JdbcParameterBindingsImpl(1);
jdbcParameterBindings.addBinding(
jdbcParameter,
new JdbcParameterBindingImpl( arrayJdbcMapping, keysToInitialize )
new JdbcParameterBindingImpl( arraySqlTypedMapping.getJdbcMapping(), keysToInitialize )
);

final SubselectFetch.RegistrationHandler subSelectFetchableKeysHandler = SubselectFetch.createRegistrationHandler(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,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.spi.JdbcOperationQuerySelect;
import org.hibernate.sql.exec.spi.JdbcParameterBindings;
import org.hibernate.sql.exec.spi.JdbcParametersList;
Expand Down Expand Up @@ -110,7 +110,7 @@ class DatabaseSnapshotExecutor {
selection.getContainingTableExpression()
);

final JdbcParameter jdbcParameter = new JdbcParameterImpl( selection.getJdbcMapping() );
final JdbcParameter jdbcParameter = new SqlTypedMappingJdbcParameter( selection );
jdbcParametersBuilder.add( jdbcParameter );

final ColumnReference columnReference = (ColumnReference) sqlExpressionResolver
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,15 +14,17 @@
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.persister.entity.EntityPersister;
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.spi.JdbcOperationQuerySelect;
import org.hibernate.sql.exec.spi.JdbcParameterBindings;

Expand All @@ -43,8 +45,8 @@ public class EntityBatchLoaderArrayParam<T>
implements SqlArrayMultiKeyLoader {
private final int domainBatchSize;

private final BasicEntityIdentifierMapping identifierMapping;
private final JdbcMapping arrayJdbcMapping;
private final EntityIdentifierMapping identifierMapping;
private final SqlTypedMapping arraySqlTypedMapping;
private final JdbcParameter jdbcParameter;
private final SelectStatement sqlAst;
private final JdbcOperationQuerySelect jdbcSelectOperation;
Expand Down Expand Up @@ -76,14 +78,23 @@ public EntityBatchLoaderArrayParam(
);
}

identifierMapping = (BasicEntityIdentifierMapping) getLoadable().getIdentifierMapping();
arrayJdbcMapping = MultiKeyLoadHelper.resolveArrayJdbcMapping(
identifierMapping.getJdbcMapping(),
identifierMapping.getJavaType().getJavaTypeClass(),
sessionFactory
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 @@ -140,7 +151,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 @@ -70,7 +70,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 @@ -613,7 +613,7 @@ private void applyRestriction(
(ColumnReference)
sqlExpressionResolver.resolveSqlExpression( tableReference, selection );
if ( numberOfKeysToLoad == 1 ) {
final JdbcParameter jdbcParameter = new JdbcParameterImpl( selection.getJdbcMapping() );
final JdbcParameter jdbcParameter = new SqlTypedMappingJdbcParameter( selection );
jdbcParameterConsumer.accept( jdbcParameter );

rootQuerySpec.applyPredicate(
Expand All @@ -623,12 +623,10 @@ private void applyRestriction(
else {
final InListPredicate predicate = new InListPredicate( columnRef );
for ( int i = 0; i < numberOfKeysToLoad; i++ ) {
for ( int j = 0; j < numberColumns; j++ ) {
final JdbcParameter jdbcParameter =
new JdbcParameterImpl( columnRef.getJdbcMapping() );
jdbcParameterConsumer.accept( jdbcParameter );
predicate.addExpression( jdbcParameter );
}
final JdbcParameter jdbcParameter =
new SqlTypedMappingJdbcParameter( selection );
jdbcParameterConsumer.accept( jdbcParameter );
predicate.addExpression( jdbcParameter );
}
rootQuerySpec.applyPredicate( predicate );
}
Expand Down Expand Up @@ -656,12 +654,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
Loading
Loading