Skip to content

Commit

Permalink
Revert "HHH-13077 - Optimize query plan call count"
Browse files Browse the repository at this point in the history
This reverts commit 4f27d5b.
  • Loading branch information
vladmihalcea committed Nov 12, 2018
1 parent 4f27d5b commit 27118f7
Show file tree
Hide file tree
Showing 6 changed files with 25 additions and 234 deletions.
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -620,11 +620,11 @@ public QueryImplementor getNamedQuery(String name) {
throw exceptionConverter.convert( new IllegalArgumentException( "No query defined for that name [" + name + "]" ) ); throw exceptionConverter.convert( new IllegalArgumentException( "No query defined for that name [" + name + "]" ) );
} }


protected QueryImpl createQuery(NamedQueryDefinition queryDefinition) { protected QueryImplementor createQuery(NamedQueryDefinition queryDefinition) {
String queryString = queryDefinition.getQueryString(); String queryString = queryDefinition.getQueryString();
final QueryImpl query = new QueryImpl( final QueryImpl query = new QueryImpl(
this, this,
getQueryPlan( queryString, false ), getQueryPlan( queryString, false ).getParameterMetadata(),
queryString queryString
); );
query.setHibernateFlushMode( queryDefinition.getFlushMode() ); query.setHibernateFlushMode( queryDefinition.getFlushMode() );
Expand Down Expand Up @@ -693,15 +693,15 @@ protected void initQueryFromNamedDefinition(Query query, NamedQueryDefinition nq
} }


@Override @Override
public QueryImpl createQuery(String queryString) { public QueryImplementor createQuery(String queryString) {
checkOpen(); checkOpen();
checkTransactionSynchStatus(); checkTransactionSynchStatus();
delayedAfterCompletion(); delayedAfterCompletion();


try { try {
final QueryImpl query = new QueryImpl( final QueryImpl query = new QueryImpl(
this, this,
getQueryPlan( queryString, false ), getQueryPlan( queryString, false ).getParameterMetadata(),
queryString queryString
); );
query.setComment( queryString ); query.setComment( queryString );
Expand All @@ -726,7 +726,7 @@ public <T> QueryImplementor<T> createQuery(String queryString, Class<T> resultCl


try { try {
// do the translation // do the translation
final QueryImpl<T> query = createQuery( queryString ); final QueryImplementor<T> query = createQuery( queryString );
resultClassChecking( resultClass, query ); resultClassChecking( resultClass, query );
return query; return query;
} }
Expand All @@ -736,10 +736,13 @@ public <T> QueryImplementor<T> createQuery(String queryString, Class<T> resultCl
} }


@SuppressWarnings({"unchecked", "WeakerAccess", "StatementWithEmptyBody"}) @SuppressWarnings({"unchecked", "WeakerAccess", "StatementWithEmptyBody"})
protected void resultClassChecking(Class resultClass, QueryImpl hqlQuery) { protected void resultClassChecking(Class resultClass, org.hibernate.Query hqlQuery) {
// make sure the query is a select -> HHH-7192 // make sure the query is a select -> HHH-7192
HQLQueryPlan queryPlan = hqlQuery.getQueryPlan(); final HQLQueryPlan queryPlan = getFactory().getQueryPlanCache().getHQLQueryPlan(

hqlQuery.getQueryString(),
false,
getLoadQueryInfluencers().getEnabledFilters()
);
if ( queryPlan.getTranslators()[0].isManipulationStatement() ) { if ( queryPlan.getTranslators()[0].isManipulationStatement() ) {
throw new IllegalArgumentException( "Update/delete queries cannot be typed" ); throw new IllegalArgumentException( "Update/delete queries cannot be typed" );
} }
Expand Down Expand Up @@ -815,7 +818,7 @@ protected <T> QueryImplementor<T> buildQueryFromName(String name, Class<T> resu


@SuppressWarnings({"WeakerAccess", "unchecked"}) @SuppressWarnings({"WeakerAccess", "unchecked"})
protected <T> QueryImplementor<T> createQuery(NamedQueryDefinition namedQueryDefinition, Class<T> resultType) { protected <T> QueryImplementor<T> createQuery(NamedQueryDefinition namedQueryDefinition, Class<T> resultType) {
final QueryImpl query = createQuery( namedQueryDefinition ); final QueryImplementor query = createQuery( namedQueryDefinition );
if ( resultType != null ) { if ( resultType != null ) {
resultClassChecking( resultType, query ); resultClassChecking( resultType, query );
} }
Expand Down
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -1620,7 +1620,7 @@ public Iterator iterate(String query, QueryParameters queryParameters) throws Hi
queryParameters.validateParameters(); queryParameters.validateParameters();


HQLQueryPlan plan = queryParameters.getQueryPlan(); HQLQueryPlan plan = queryParameters.getQueryPlan();
if ( plan == null || !plan.isShallow() ) { if ( plan == null ) {
plan = getQueryPlan( query, true ); plan = getQueryPlan( query, true );
} }


Expand Down
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -34,7 +34,6 @@
import org.hibernate.LockOptions; import org.hibernate.LockOptions;
import org.hibernate.ScrollMode; import org.hibernate.ScrollMode;
import org.hibernate.ScrollableResults; import org.hibernate.ScrollableResults;
import org.hibernate.engine.query.spi.HQLQueryPlan;
import org.hibernate.graph.Graph; import org.hibernate.graph.Graph;
import org.hibernate.graph.GraphSemantic; import org.hibernate.graph.GraphSemantic;
import org.hibernate.graph.RootGraph; import org.hibernate.graph.RootGraph;
Expand Down
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -56,7 +56,6 @@
import org.hibernate.engine.spi.TypedValue; import org.hibernate.engine.spi.TypedValue;
import org.hibernate.graph.GraphSemantic; import org.hibernate.graph.GraphSemantic;
import org.hibernate.graph.RootGraph; import org.hibernate.graph.RootGraph;
import org.hibernate.graph.internal.RootGraphImpl;
import org.hibernate.graph.spi.RootGraphImplementor; import org.hibernate.graph.spi.RootGraphImplementor;
import org.hibernate.hql.internal.QueryExecutionRequestException; import org.hibernate.hql.internal.QueryExecutionRequestException;
import org.hibernate.internal.EmptyScrollableResults; import org.hibernate.internal.EmptyScrollableResults;
Expand All @@ -65,6 +64,7 @@
import org.hibernate.internal.util.collections.ArrayHelper; import org.hibernate.internal.util.collections.ArrayHelper;
import org.hibernate.jpa.QueryHints; import org.hibernate.jpa.QueryHints;
import org.hibernate.jpa.TypedParameterValue; import org.hibernate.jpa.TypedParameterValue;
import org.hibernate.graph.internal.RootGraphImpl;
import org.hibernate.jpa.internal.util.CacheModeHelper; import org.hibernate.jpa.internal.util.CacheModeHelper;
import org.hibernate.jpa.internal.util.ConfigurationHelper; import org.hibernate.jpa.internal.util.ConfigurationHelper;
import org.hibernate.jpa.internal.util.FlushModeTypeHelper; import org.hibernate.jpa.internal.util.FlushModeTypeHelper;
Expand Down Expand Up @@ -1376,8 +1376,8 @@ protected QueryParameters makeQueryParametersForExecution(String hql) {
); );
} }


QueryParameters queryParameters = new QueryParameters( QueryParameters queryParameters = new QueryParameters(
getQueryParameterBindings(), getQueryParameterBindings(),
getLockOptions(), getLockOptions(),
queryOptions, queryOptions,
true, true,
Expand All @@ -1392,24 +1392,13 @@ protected QueryParameters makeQueryParametersForExecution(String hql) {
optionalId, optionalId,
resultTransformer resultTransformer
); );

queryParameters.setQueryPlan( entityGraphHintedQueryPlan );
appendQueryPlanToQueryParameters( hql, queryParameters, entityGraphHintedQueryPlan );

if ( passDistinctThrough != null ) { if ( passDistinctThrough != null ) {
queryParameters.setPassDistinctThrough( passDistinctThrough ); queryParameters.setPassDistinctThrough( passDistinctThrough );
} }
return queryParameters; return queryParameters;
} }


protected void appendQueryPlanToQueryParameters(
String hql,
QueryParameters queryParameters,
HQLQueryPlan queryPlan) {
if ( queryPlan != null ) {
queryParameters.setQueryPlan( queryPlan );
}
}

public QueryParameters getQueryParameters() { public QueryParameters getQueryParameters() {
final String expandedQuery = getQueryParameterBindings().expandListValuedParameters( getQueryString(), getProducer() ); final String expandedQuery = getQueryParameterBindings().expandListValuedParameters( getQueryString(), getProducer() );
return makeQueryParametersForExecution( expandedQuery ); return makeQueryParametersForExecution( expandedQuery );
Expand Down Expand Up @@ -1694,7 +1683,7 @@ public Type determineProperBooleanType(int position, Object value, Type defaultT
: defaultType; : defaultType;
} }


protected boolean isSelect() { private boolean isSelect() {
return getProducer().getFactory().getQueryPlanCache() return getProducer().getFactory().getQueryPlanCache()
.getHQLQueryPlan( getQueryString(), false, Collections.<String, Filter>emptyMap() ) .getHQLQueryPlan( getQueryString(), false, Collections.<String, Filter>emptyMap() )
.isSelect(); .isSelect();
Expand Down
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -6,10 +6,8 @@
*/ */
package org.hibernate.query.internal; package org.hibernate.query.internal;


import org.hibernate.engine.query.spi.HQLQueryPlan;
import org.hibernate.engine.query.spi.ReturnMetadata;
import org.hibernate.engine.spi.QueryParameters;
import org.hibernate.engine.spi.SharedSessionContractImplementor; import org.hibernate.engine.spi.SharedSessionContractImplementor;
import org.hibernate.query.ParameterMetadata;
import org.hibernate.query.Query; import org.hibernate.query.Query;
import org.hibernate.query.spi.QueryParameterBindings; import org.hibernate.query.spi.QueryParameterBindings;
import org.hibernate.type.Type; import org.hibernate.type.Type;
Expand All @@ -20,19 +18,16 @@
public class QueryImpl<R> extends AbstractProducedQuery<R> implements Query<R> { public class QueryImpl<R> extends AbstractProducedQuery<R> implements Query<R> {
private final String queryString; private final String queryString;


private final HQLQueryPlan hqlQueryPlan;

private final QueryParameterBindingsImpl queryParameterBindings; private final QueryParameterBindingsImpl queryParameterBindings;


public QueryImpl( public QueryImpl(
SharedSessionContractImplementor producer, SharedSessionContractImplementor producer,
HQLQueryPlan hqlQueryPlan, ParameterMetadata parameterMetadata,
String queryString) { String queryString) {
super( producer, hqlQueryPlan.getParameterMetadata() ); super( producer, parameterMetadata );
this.hqlQueryPlan = hqlQueryPlan;
this.queryString = queryString; this.queryString = queryString;
this.queryParameterBindings = QueryParameterBindingsImpl.from( this.queryParameterBindings = QueryParameterBindingsImpl.from(
hqlQueryPlan.getParameterMetadata(), parameterMetadata,
producer.getFactory(), producer.getFactory(),
producer.isQueryParametersValidationEnabled() producer.isQueryParametersValidationEnabled()
); );
Expand All @@ -48,25 +43,19 @@ public String getQueryString() {
return queryString; return queryString;
} }


public HQLQueryPlan getQueryPlan() {
return hqlQueryPlan;
}

@Override @Override
protected boolean isNativeQuery() { protected boolean isNativeQuery() {
return false; return false;
} }


@Override @Override
public Type[] getReturnTypes() { public Type[] getReturnTypes() {
final ReturnMetadata metadata = hqlQueryPlan.getReturnMetadata(); return getProducer().getFactory().getReturnTypes( queryString );
return metadata == null ? null : metadata.getReturnTypes();
} }


@Override @Override
public String[] getReturnAliases() { public String[] getReturnAliases() {
final ReturnMetadata metadata = hqlQueryPlan.getReturnMetadata(); return getProducer().getFactory().getReturnAliases( queryString );
return metadata == null ? null : metadata.getReturnAliases();
} }


@Override @Override
Expand All @@ -78,22 +67,4 @@ public Query setEntity(int position, Object val) {
public Query setEntity(String name, Object val) { public Query setEntity(String name, Object val) {
return setParameter( name, val, getProducer().getFactory().getTypeHelper().entity( resolveEntityName( val ) ) ); return setParameter( name, val, getProducer().getFactory().getTypeHelper().entity( resolveEntityName( val ) ) );
} }

@Override
protected boolean isSelect() {
return hqlQueryPlan.isSelect();
}

@Override
protected void appendQueryPlanToQueryParameters(
String hql,
QueryParameters queryParameters,
HQLQueryPlan queryPlan) {
if ( queryPlan != null ) {
queryParameters.setQueryPlan( queryPlan );
}
else if ( hql.equals( getQueryString() ) ) {
queryParameters.setQueryPlan( getQueryPlan() );
}
}
} }
Loading

0 comments on commit 27118f7

Please sign in to comment.