Skip to content

Commit 88d689e

Browse files
committed
some cleanups mostly around native query stuff
1 parent 1198815 commit 88d689e

File tree

6 files changed

+295
-353
lines changed

6 files changed

+295
-353
lines changed

hibernate-core/src/main/java/org/hibernate/query/spi/AbstractSelectionQuery.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -282,7 +282,7 @@ public R getSingleResult() {
282282
}
283283

284284
protected static <T> T uniqueElement(List<T> list) throws NonUniqueResultException {
285-
int size = list.size();
285+
final int size = list.size();
286286
if ( size == 0 ) {
287287
return null;
288288
}
@@ -381,11 +381,13 @@ public SelectionQuery<R> setEntityGraph(EntityGraph<R> graph, GraphSemantic sema
381381

382382
@Override
383383
public SelectionQuery<R> enableFetchProfile(String profileName) {
384-
if ( !getSession().getFactory().containsFetchProfileDefinition( profileName ) ) {
384+
if ( getSession().getFactory().containsFetchProfileDefinition( profileName ) ) {
385+
getQueryOptions().enableFetchProfile( profileName );
386+
return this;
387+
}
388+
else {
385389
throw new UnknownProfileException( profileName );
386390
}
387-
getQueryOptions().enableFetchProfile( profileName );
388-
return this;
389391
}
390392

391393
@Override

hibernate-core/src/main/java/org/hibernate/query/sql/internal/NativeNonSelectQueryPlanImpl.java

Lines changed: 7 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -5,23 +5,22 @@
55
package org.hibernate.query.sql.internal;
66

77
import java.util.ArrayList;
8-
import java.util.Collections;
98
import java.util.List;
109
import java.util.Set;
1110

1211
import org.hibernate.action.internal.BulkOperationCleanupAction;
1312
import org.hibernate.engine.spi.SharedSessionContractImplementor;
1413
import org.hibernate.query.spi.DomainQueryExecutionContext;
1514
import org.hibernate.query.spi.NonSelectQueryPlan;
16-
import org.hibernate.query.spi.QueryParameterBindings;
1715
import org.hibernate.query.sql.spi.ParameterOccurrence;
1816
import org.hibernate.query.sqm.internal.SqmJdbcExecutionContextAdapter;
1917
import org.hibernate.sql.exec.internal.JdbcParameterBindingsImpl;
20-
import org.hibernate.sql.exec.spi.JdbcOperationQueryMutation;
2118
import org.hibernate.sql.exec.spi.JdbcOperationQueryMutationNative;
2219
import org.hibernate.sql.exec.spi.JdbcParameterBinder;
2320
import org.hibernate.sql.exec.spi.JdbcParameterBindings;
2421

22+
import static java.util.Collections.emptyList;
23+
2524
/**
2625
* @author Steve Ebersole
2726
*/
@@ -47,37 +46,25 @@ public int executeUpdate(DomainQueryExecutionContext executionContext) {
4746
BulkOperationCleanupAction.schedule( session, affectedTableNames );
4847
final List<JdbcParameterBinder> jdbcParameterBinders;
4948
final JdbcParameterBindings jdbcParameterBindings;
50-
51-
final QueryParameterBindings queryParameterBindings = executionContext.getQueryParameterBindings();
5249
if ( parameterList == null || parameterList.isEmpty() ) {
53-
jdbcParameterBinders = Collections.emptyList();
50+
jdbcParameterBinders = emptyList();
5451
jdbcParameterBindings = JdbcParameterBindings.NO_BINDINGS;
5552
}
5653
else {
5754
jdbcParameterBinders = new ArrayList<>( parameterList.size() );
5855
jdbcParameterBindings = new JdbcParameterBindingsImpl(
59-
queryParameterBindings,
56+
executionContext.getQueryParameterBindings(),
6057
parameterList,
6158
jdbcParameterBinders,
6259
session.getFactory()
6360
);
6461
}
6562

66-
final SQLQueryParser parser = new SQLQueryParser( sql, null, session.getSessionFactory() );
67-
68-
final JdbcOperationQueryMutation jdbcMutation = new JdbcOperationQueryMutationNative(
69-
parser.process(),
70-
jdbcParameterBinders,
71-
affectedTableNames
72-
);
73-
63+
final String processedSql = new SQLQueryParser( sql, null, session.getSessionFactory() ).process();
7464
return session.getJdbcServices().getJdbcMutationExecutor().execute(
75-
jdbcMutation,
65+
new JdbcOperationQueryMutationNative( processedSql, jdbcParameterBinders, affectedTableNames ),
7666
jdbcParameterBindings,
77-
sql -> session
78-
.getJdbcCoordinator()
79-
.getStatementPreparer()
80-
.prepareStatement( sql ),
67+
sql -> session.getJdbcCoordinator().getStatementPreparer().prepareStatement( sql ),
8168
(integer, preparedStatement) -> {},
8269
SqmJdbcExecutionContextAdapter.usingLockingAndPaging( executionContext )
8370
);

hibernate-core/src/main/java/org/hibernate/query/sql/internal/NativeQueryImpl.java

Lines changed: 20 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -269,15 +269,7 @@ public NativeQueryImpl(
269269

270270
}
271271

272-
public NativeQueryImpl(
273-
NamedNativeQueryMemento<?> memento,
274-
Supplier<ResultSetMapping> resultSetMappingCreator,
275-
ResultSetMappingHandler resultSetMappingHandler,
276-
SharedSessionContractImplementor session) {
277-
this( memento, resultSetMappingCreator, resultSetMappingHandler, null, session );
278-
}
279-
280-
public NativeQueryImpl(
272+
private NativeQueryImpl(
281273
NamedNativeQueryMemento<?> memento,
282274
Supplier<ResultSetMapping> resultSetMappingCreator,
283275
ResultSetMappingHandler resultSetMappingHandler,
@@ -303,29 +295,32 @@ public NativeQueryImpl(
303295
resultSetMappingHandler.resolveResultSetMapping( resultSetMapping, querySpaces::add, this );
304296

305297
if ( resultType != null ) {
306-
if ( !isResultTypeAlwaysAllowed( resultType ) ) {
307-
switch ( resultSetMapping.getNumberOfResultBuilders() ) {
308-
case 0:
309-
throw new IllegalArgumentException( "Named query exists, but did not specify a resultClass" );
310-
case 1:
311-
final Class<?> actualResultJavaType = resultSetMapping.getResultBuilders().get( 0 )
312-
.getJavaType();
313-
if ( actualResultJavaType != null && !resultType.isAssignableFrom( actualResultJavaType ) ) {
314-
throw buildIncompatibleException( resultType, actualResultJavaType );
315-
}
316-
break;
317-
default:
318-
throw new IllegalArgumentException(
319-
"Cannot create TypedQuery for query with more than one return" );
320-
}
298+
if ( isResultTypeAlwaysAllowed( resultType ) ) {
299+
setTupleTransformerForResultType( resultType );
321300
}
322301
else {
323-
setTupleTransformerForResultType( resultType );
302+
checkResulType( resultType );
324303
}
325304
}
326305
applyOptions( memento );
327306
}
328307

308+
private void checkResulType(Class<R> resultType) {
309+
switch ( resultSetMapping.getNumberOfResultBuilders() ) {
310+
case 0:
311+
throw new IllegalArgumentException( "Named query exists, but did not specify a resultClass" );
312+
case 1:
313+
final Class<?> actualResultJavaType =
314+
resultSetMapping.getResultBuilders().get( 0 ).getJavaType();
315+
if ( actualResultJavaType != null && !resultType.isAssignableFrom( actualResultJavaType ) ) {
316+
throw buildIncompatibleException( resultType, actualResultJavaType );
317+
}
318+
break;
319+
default:
320+
throw new IllegalArgumentException( "Cannot create TypedQuery for query with more than one return" );
321+
}
322+
}
323+
329324
public NativeQueryImpl(
330325
String sqlString,
331326
NamedResultSetMappingMemento resultSetMappingMemento,

hibernate-core/src/main/java/org/hibernate/query/sql/internal/NativeSelectQueryPlanImpl.java

Lines changed: 65 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
package org.hibernate.query.sql.internal;
66

77
import java.util.ArrayList;
8-
import java.util.Collections;
98
import java.util.HashSet;
109
import java.util.List;
1110
import java.util.Set;
@@ -29,6 +28,8 @@
2928
import org.hibernate.sql.results.spi.ListResultsConsumer;
3029
import org.hibernate.sql.results.spi.ResultsConsumer;
3130

31+
import static java.util.Collections.emptyList;
32+
3233
/**
3334
* @author Steve Ebersole
3435
*/
@@ -67,7 +68,7 @@ public <T> T executeQuery(DomainQueryExecutionContext executionContext, ResultsC
6768

6869
final QueryParameterBindings queryParameterBindings = executionContext.getQueryParameterBindings();
6970
if ( parameterList == null || parameterList.isEmpty() ) {
70-
jdbcParameterBinders = Collections.emptyList();
71+
jdbcParameterBinders = emptyList();
7172
jdbcParameterBindings = JdbcParameterBindings.NO_BINDINGS;
7273
}
7374
else {
@@ -102,83 +103,83 @@ public <T> T executeQuery(DomainQueryExecutionContext executionContext, ResultsC
102103
public List<R> performList(DomainQueryExecutionContext executionContext) {
103104
final QueryOptions queryOptions = executionContext.getQueryOptions();
104105
if ( queryOptions.getEffectiveLimit().getMaxRowsJpa() == 0 ) {
105-
return Collections.emptyList();
106-
}
107-
final List<JdbcParameterBinder> jdbcParameterBinders;
108-
final JdbcParameterBindings jdbcParameterBindings;
109-
110-
final QueryParameterBindings queryParameterBindings = executionContext.getQueryParameterBindings();
111-
if ( parameterList == null || parameterList.isEmpty() ) {
112-
jdbcParameterBinders = Collections.emptyList();
113-
jdbcParameterBindings = JdbcParameterBindings.NO_BINDINGS;
106+
return emptyList();
114107
}
115108
else {
116-
jdbcParameterBinders = new ArrayList<>( parameterList.size() );
117-
jdbcParameterBindings = new JdbcParameterBindingsImpl(
118-
queryParameterBindings,
119-
parameterList,
109+
final List<JdbcParameterBinder> jdbcParameterBinders;
110+
final JdbcParameterBindings jdbcParameterBindings;
111+
if ( parameterList == null || parameterList.isEmpty() ) {
112+
jdbcParameterBinders = emptyList();
113+
jdbcParameterBindings = JdbcParameterBindings.NO_BINDINGS;
114+
}
115+
else {
116+
jdbcParameterBinders = new ArrayList<>( parameterList.size() );
117+
jdbcParameterBindings = new JdbcParameterBindingsImpl(
118+
executionContext.getQueryParameterBindings(),
119+
parameterList,
120+
jdbcParameterBinders,
121+
executionContext.getSession().getFactory()
122+
);
123+
}
124+
125+
final JdbcOperationQuerySelect jdbcSelect = new JdbcOperationQuerySelect(
126+
sql,
120127
jdbcParameterBinders,
121-
executionContext.getSession().getFactory()
128+
resultSetMapping,
129+
affectedTableNames
122130
);
123-
}
124131

125-
final JdbcOperationQuerySelect jdbcSelect = new JdbcOperationQuerySelect(
126-
sql,
127-
jdbcParameterBinders,
128-
resultSetMapping,
129-
affectedTableNames
130-
);
131-
132-
executionContext.getSession().autoFlushIfRequired( jdbcSelect.getAffectedTableNames() );
133-
return executionContext.getSession().getJdbcServices().getJdbcSelectExecutor().list(
134-
jdbcSelect,
135-
jdbcParameterBindings,
136-
SqmJdbcExecutionContextAdapter.usingLockingAndPaging( executionContext ),
137-
null,
138-
queryOptions.getUniqueSemantic() == null ?
139-
ListResultsConsumer.UniqueSemantic.NEVER :
140-
queryOptions.getUniqueSemantic()
141-
);
132+
executionContext.getSession().autoFlushIfRequired( jdbcSelect.getAffectedTableNames() );
133+
return executionContext.getSession().getJdbcServices().getJdbcSelectExecutor().list(
134+
jdbcSelect,
135+
jdbcParameterBindings,
136+
SqmJdbcExecutionContextAdapter.usingLockingAndPaging( executionContext ),
137+
null,
138+
queryOptions.getUniqueSemantic() == null
139+
? ListResultsConsumer.UniqueSemantic.NEVER
140+
: queryOptions.getUniqueSemantic()
141+
);
142+
}
142143
}
143144

144145
@Override
145146
public ScrollableResultsImplementor<R> performScroll(ScrollMode scrollMode, DomainQueryExecutionContext executionContext) {
146147
if ( executionContext.getQueryOptions().getEffectiveLimit().getMaxRowsJpa() == 0 ) {
147148
return EmptyScrollableResults.instance();
148149
}
149-
final List<JdbcParameterBinder> jdbcParameterBinders;
150-
final JdbcParameterBindings jdbcParameterBindings;
151-
152-
final QueryParameterBindings queryParameterBindings = executionContext.getQueryParameterBindings();
153-
if ( parameterList == null || parameterList.isEmpty() ) {
154-
jdbcParameterBinders = Collections.emptyList();
155-
jdbcParameterBindings = JdbcParameterBindings.NO_BINDINGS;
156-
}
157150
else {
158-
jdbcParameterBinders = new ArrayList<>( parameterList.size() );
159-
jdbcParameterBindings = new JdbcParameterBindingsImpl(
160-
queryParameterBindings,
161-
parameterList,
151+
final List<JdbcParameterBinder> jdbcParameterBinders;
152+
final JdbcParameterBindings jdbcParameterBindings;
153+
if ( parameterList == null || parameterList.isEmpty() ) {
154+
jdbcParameterBinders = emptyList();
155+
jdbcParameterBindings = JdbcParameterBindings.NO_BINDINGS;
156+
}
157+
else {
158+
jdbcParameterBinders = new ArrayList<>( parameterList.size() );
159+
jdbcParameterBindings = new JdbcParameterBindingsImpl(
160+
executionContext.getQueryParameterBindings(),
161+
parameterList,
162+
jdbcParameterBinders,
163+
executionContext.getSession().getFactory()
164+
);
165+
}
166+
167+
final JdbcOperationQuerySelect jdbcSelect = new JdbcOperationQuerySelect(
168+
sql,
162169
jdbcParameterBinders,
163-
executionContext.getSession().getFactory()
170+
resultSetMapping,
171+
affectedTableNames
164172
);
165-
}
166173

167-
final JdbcOperationQuerySelect jdbcSelect = new JdbcOperationQuerySelect(
168-
sql,
169-
jdbcParameterBinders,
170-
resultSetMapping,
171-
affectedTableNames
172-
);
173-
174-
executionContext.getSession().autoFlushIfRequired( jdbcSelect.getAffectedTableNames() );
175-
return executionContext.getSession().getJdbcServices().getJdbcSelectExecutor().scroll(
176-
jdbcSelect,
177-
scrollMode,
178-
jdbcParameterBindings,
179-
SqmJdbcExecutionContextAdapter.usingLockingAndPaging( executionContext ),
180-
null,
181-
-1
182-
);
174+
executionContext.getSession().autoFlushIfRequired( jdbcSelect.getAffectedTableNames() );
175+
return executionContext.getSession().getJdbcServices().getJdbcSelectExecutor().scroll(
176+
jdbcSelect,
177+
scrollMode,
178+
jdbcParameterBindings,
179+
SqmJdbcExecutionContextAdapter.usingLockingAndPaging( executionContext ),
180+
null,
181+
-1
182+
);
183+
}
183184
}
184185
}

0 commit comments

Comments
 (0)