mirror of
https://github.com/hibernate/hibernate-orm
synced 2025-02-18 09:05:21 +00:00
Avoid to recreate the DomainParameterXref twice
This commit is contained in:
parent
427204910c
commit
430071027c
@ -112,10 +112,23 @@ public HqlInterpretation resolveHqlInterpretation(
|
|||||||
final boolean stats = statistics.isStatisticsEnabled();
|
final boolean stats = statistics.isStatisticsEnabled();
|
||||||
final long startTime = ( stats ) ? System.nanoTime() : 0L;
|
final long startTime = ( stats ) ? System.nanoTime() : 0L;
|
||||||
|
|
||||||
|
final DomainParameterXref domainParameterXref;
|
||||||
ImmutableHqlInterpretation immutableHqlInterpretation = hqlInterpretationCache.get( queryString );
|
ImmutableHqlInterpretation immutableHqlInterpretation = hqlInterpretationCache.get( queryString );
|
||||||
if ( immutableHqlInterpretation == null ) {
|
if ( immutableHqlInterpretation == null ) {
|
||||||
log.debugf( "Creating and caching HqlInterpretation - %s", queryString );
|
log.debugf( "Creating and caching HqlInterpretation - %s", queryString );
|
||||||
immutableHqlInterpretation = create( queryString, creator );
|
final SqmStatement<?> sqmStatement = creator.apply( queryString );
|
||||||
|
final ParameterMetadataImplementor parameterMetadata;
|
||||||
|
|
||||||
|
if ( sqmStatement.getSqmParameters().isEmpty() ) {
|
||||||
|
domainParameterXref = DomainParameterXref.empty();
|
||||||
|
parameterMetadata = ParameterMetadataImpl.EMPTY;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
domainParameterXref = DomainParameterXref.from( sqmStatement );
|
||||||
|
parameterMetadata = new ParameterMetadataImpl( domainParameterXref.getQueryParameters() );
|
||||||
|
}
|
||||||
|
|
||||||
|
immutableHqlInterpretation = new ImmutableHqlInterpretation( sqmStatement, parameterMetadata);
|
||||||
hqlInterpretationCache.put( queryString, immutableHqlInterpretation );
|
hqlInterpretationCache.put( queryString, immutableHqlInterpretation );
|
||||||
|
|
||||||
if ( stats ) {
|
if ( stats ) {
|
||||||
@ -128,9 +141,6 @@ public HqlInterpretation resolveHqlInterpretation(
|
|||||||
if ( stats ) {
|
if ( stats ) {
|
||||||
statistics.queryPlanCacheHit( queryString );
|
statistics.queryPlanCacheHit( queryString );
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
DomainParameterXref domainParameterXref;
|
|
||||||
|
|
||||||
if ( immutableHqlInterpretation.sqmStatement.getSqmParameters().isEmpty() ) {
|
if ( immutableHqlInterpretation.sqmStatement.getSqmParameters().isEmpty() ) {
|
||||||
domainParameterXref = DomainParameterXref.empty();
|
domainParameterXref = DomainParameterXref.empty();
|
||||||
@ -138,6 +148,7 @@ public HqlInterpretation resolveHqlInterpretation(
|
|||||||
else {
|
else {
|
||||||
domainParameterXref = DomainParameterXref.from( immutableHqlInterpretation.sqmStatement );
|
domainParameterXref = DomainParameterXref.from( immutableHqlInterpretation.sqmStatement );
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return new SimpleHqlInterpretationImpl(
|
return new SimpleHqlInterpretationImpl(
|
||||||
immutableHqlInterpretation.sqmStatement,
|
immutableHqlInterpretation.sqmStatement,
|
||||||
@ -173,21 +184,6 @@ public void close() {
|
|||||||
queryPlanCache.clear();
|
queryPlanCache.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
private ImmutableHqlInterpretation create(String queryString, Function<String, SqmStatement<?>> creator) {
|
|
||||||
final SqmStatement<?> sqmStatement = creator.apply( queryString );
|
|
||||||
final ParameterMetadataImplementor parameterMetadata;
|
|
||||||
|
|
||||||
if ( sqmStatement.getSqmParameters().isEmpty() ) {
|
|
||||||
parameterMetadata = ParameterMetadataImpl.EMPTY;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
// TODO Avoid to recreate the DomainParameterXref twice
|
|
||||||
parameterMetadata = new ParameterMetadataImpl( DomainParameterXref.from( sqmStatement ).getQueryParameters() );
|
|
||||||
}
|
|
||||||
|
|
||||||
return new ImmutableHqlInterpretation( sqmStatement, parameterMetadata);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static class ImmutableHqlInterpretation {
|
private static class ImmutableHqlInterpretation {
|
||||||
|
|
||||||
private final SqmStatement sqmStatement;
|
private final SqmStatement sqmStatement;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user