HHH-12896 Minor memory improvements in HQLQueryPlan
This commit is contained in:
parent
fa5f592fb9
commit
ea859736c2
|
@ -48,11 +48,10 @@ import org.hibernate.type.Type;
|
||||||
public class HQLQueryPlan implements Serializable {
|
public class HQLQueryPlan implements Serializable {
|
||||||
private static final CoreMessageLogger LOG = CoreLogging.messageLogger( HQLQueryPlan.class );
|
private static final CoreMessageLogger LOG = CoreLogging.messageLogger( HQLQueryPlan.class );
|
||||||
|
|
||||||
// TODO : keep separate notions of QT[] here for shallow/non-shallow queries...
|
// TODO : keep separate notions of QT[] here for shallow/non-shallow queries...
|
||||||
|
|
||||||
private final String sourceQuery;
|
private final String sourceQuery;
|
||||||
private final QueryTranslator[] translators;
|
private final QueryTranslator[] translators;
|
||||||
private final String[] sqlStrings;
|
|
||||||
|
|
||||||
private final ParameterMetadataImpl parameterMetadata;
|
private final ParameterMetadataImpl parameterMetadata;
|
||||||
private final ReturnMetadata returnMetadata;
|
private final ReturnMetadata returnMetadata;
|
||||||
|
@ -60,7 +59,6 @@ public class HQLQueryPlan implements Serializable {
|
||||||
|
|
||||||
private final Set<String> enabledFilterNames;
|
private final Set<String> enabledFilterNames;
|
||||||
private final boolean shallow;
|
private final boolean shallow;
|
||||||
private final SessionFactoryImplementor factory;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* We'll check the trace level only once per instance
|
* We'll check the trace level only once per instance
|
||||||
|
@ -95,17 +93,18 @@ public class HQLQueryPlan implements Serializable {
|
||||||
EntityGraphQueryHint entityGraphQueryHint) {
|
EntityGraphQueryHint entityGraphQueryHint) {
|
||||||
this.sourceQuery = hql;
|
this.sourceQuery = hql;
|
||||||
this.shallow = shallow;
|
this.shallow = shallow;
|
||||||
this.factory = factory;
|
|
||||||
|
|
||||||
final Set<String> copy = new HashSet<>();
|
if ( enabledFilters.isEmpty() ) {
|
||||||
copy.addAll( enabledFilters.keySet() );
|
this.enabledFilterNames = Collections.emptySet();
|
||||||
this.enabledFilterNames = java.util.Collections.unmodifiableSet( copy );
|
}
|
||||||
|
else {
|
||||||
|
this.enabledFilterNames = Collections.unmodifiableSet( new HashSet<>( enabledFilters.keySet() ) );
|
||||||
|
}
|
||||||
|
|
||||||
final String[] concreteQueryStrings = QuerySplitter.concreteQueries( hql, factory );
|
final String[] concreteQueryStrings = QuerySplitter.concreteQueries( hql, factory );
|
||||||
final int length = concreteQueryStrings.length;
|
final int length = concreteQueryStrings.length;
|
||||||
this.translators = new QueryTranslator[length];
|
this.translators = new QueryTranslator[length];
|
||||||
|
|
||||||
final List<String> sqlStringList = new ArrayList<>();
|
|
||||||
final Set<Serializable> combinedQuerySpaces = new HashSet<>();
|
final Set<Serializable> combinedQuerySpaces = new HashSet<>();
|
||||||
|
|
||||||
final Map querySubstitutions = factory.getSessionFactoryOptions().getQuerySubstitutions();
|
final Map querySubstitutions = factory.getSessionFactoryOptions().getQuerySubstitutions();
|
||||||
|
@ -124,10 +123,8 @@ public class HQLQueryPlan implements Serializable {
|
||||||
( (FilterTranslator) translators[i] ).compile( collectionRole, querySubstitutions, shallow );
|
( (FilterTranslator) translators[i] ).compile( collectionRole, querySubstitutions, shallow );
|
||||||
}
|
}
|
||||||
combinedQuerySpaces.addAll( translators[i].getQuerySpaces() );
|
combinedQuerySpaces.addAll( translators[i].getQuerySpaces() );
|
||||||
sqlStringList.addAll( translators[i].collectSqlStrings() );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
this.sqlStrings = ArrayHelper.toStringArray( sqlStringList );
|
|
||||||
this.querySpaces = combinedQuerySpaces;
|
this.querySpaces = combinedQuerySpaces;
|
||||||
|
|
||||||
if ( length == 0 ) {
|
if ( length == 0 ) {
|
||||||
|
@ -166,8 +163,15 @@ public class HQLQueryPlan implements Serializable {
|
||||||
return enabledFilterNames;
|
return enabledFilterNames;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method should only be called for debugging purposes as it regenerates a new array every time.
|
||||||
|
*/
|
||||||
public String[] getSqlStrings() {
|
public String[] getSqlStrings() {
|
||||||
return sqlStrings;
|
List<String> sqlStrings = new ArrayList<>();
|
||||||
|
for ( int i = 0; i < translators.length; i++ ) {
|
||||||
|
sqlStrings.addAll( translators[i].collectSqlStrings() );
|
||||||
|
}
|
||||||
|
return ArrayHelper.toStringArray( sqlStrings );
|
||||||
}
|
}
|
||||||
|
|
||||||
public Set getUtilizedFilterNames() {
|
public Set getUtilizedFilterNames() {
|
||||||
|
|
|
@ -268,10 +268,12 @@ public class QueryTranslatorImpl extends BasicLoader implements FilterTranslator
|
||||||
return sqlString;
|
return sqlString;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public List<String> collectSqlStrings() {
|
public List<String> collectSqlStrings() {
|
||||||
return ArrayHelper.toList( new String[] {sqlString} );
|
return Collections.singletonList( sqlString );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public String getQueryString() {
|
public String getQueryString() {
|
||||||
return queryString;
|
return queryString;
|
||||||
}
|
}
|
||||||
|
@ -291,15 +293,18 @@ public class QueryTranslatorImpl extends BasicLoader implements FilterTranslator
|
||||||
*
|
*
|
||||||
* @return an array of <tt>Type</tt>s.
|
* @return an array of <tt>Type</tt>s.
|
||||||
*/
|
*/
|
||||||
|
@Override
|
||||||
public Type[] getReturnTypes() {
|
public Type[] getReturnTypes() {
|
||||||
return actualReturnTypes;
|
return actualReturnTypes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public String[] getReturnAliases() {
|
public String[] getReturnAliases() {
|
||||||
// return aliases not supported in classic translator!
|
// return aliases not supported in classic translator!
|
||||||
return NO_RETURN_ALIASES;
|
return NO_RETURN_ALIASES;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public String[][] getColumnNames() {
|
public String[][] getColumnNames() {
|
||||||
return scalarColumnNames;
|
return scalarColumnNames;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue