5
5
package org .hibernate .procedure .internal ;
6
6
7
7
import java .util .ArrayList ;
8
- import java .util .Collections ;
9
8
import java .util .HashSet ;
10
9
import java .util .List ;
11
10
import java .util .Set ;
17
16
import org .hibernate .engine .spi .SharedSessionContractImplementor ;
18
17
import org .hibernate .procedure .spi .NamedCallableQueryMemento ;
19
18
import org .hibernate .procedure .spi .ParameterStrategy ;
19
+ import org .hibernate .query .BindableType ;
20
20
import org .hibernate .query .QueryParameter ;
21
21
import org .hibernate .query .internal .QueryParameterBindingsImpl ;
22
22
import org .hibernate .query .procedure .ProcedureParameter ;
25
25
import org .hibernate .query .spi .QueryParameterBindings ;
26
26
import org .hibernate .query .spi .QueryParameterImplementor ;
27
27
28
+ import static java .util .Collections .emptyList ;
29
+ import static java .util .Collections .emptySet ;
30
+
28
31
/**
29
32
* Specialized ParameterMetadataImplementor for callable queries implementing
30
33
* expandable parameter registrations
@@ -39,29 +42,26 @@ public ProcedureParameterMetadataImpl() {
39
42
}
40
43
41
44
public ProcedureParameterMetadataImpl (NamedCallableQueryMemento memento , SharedSessionContractImplementor session ) {
42
- memento .getParameterMementos ().forEach (
43
- parameterMemento -> registerParameter ( parameterMemento .resolve ( session ) )
44
- );
45
+ memento .getParameterMementos ()
46
+ .forEach ( parameterMemento -> registerParameter ( parameterMemento .resolve ( session ) ) );
45
47
}
46
48
47
- public void registerParameter (ProcedureParameterImplementor parameter ) {
48
- if ( parameter .getName () != null ) {
49
+ public void registerParameter (ProcedureParameterImplementor <?> parameter ) {
50
+ if ( parameter .isNamed () ) {
49
51
if ( parameterStrategy == ParameterStrategy .POSITIONAL ) {
50
52
throw new IllegalArgumentException ( "Cannot mix named parameter with positional parameter registrations" );
51
53
}
52
54
parameterStrategy = ParameterStrategy .NAMED ;
53
55
}
54
- else if ( parameter .getPosition () != null ) {
56
+ else if ( parameter .isOrdinal () ) {
55
57
if ( parameterStrategy == ParameterStrategy .NAMED ) {
56
58
throw new IllegalArgumentException ( "Cannot mix positional parameter with named parameter registrations" );
57
59
}
58
- this . parameterStrategy = ParameterStrategy .POSITIONAL ;
60
+ parameterStrategy = ParameterStrategy .POSITIONAL ;
59
61
}
60
62
else {
61
63
throw new IllegalArgumentException ( "Unrecognized parameter type : " + parameter );
62
64
}
63
-
64
-
65
65
if ( parameters == null ) {
66
66
parameters = new ArrayList <>();
67
67
}
@@ -74,7 +74,7 @@ public QueryParameterBindings createBindings(SessionFactoryImplementor sessionFa
74
74
}
75
75
76
76
@ Override
77
- public void visitParameters (Consumer <QueryParameterImplementor <?>> consumer ) {
77
+ public void visitParameters (Consumer <QueryParameter <?>> consumer ) {
78
78
if ( parameters != null ) {
79
79
parameters .forEach ( consumer );
80
80
}
@@ -93,11 +93,11 @@ public boolean hasPositionalParameters() {
93
93
@ Override
94
94
public Set <String > getNamedParameterNames () {
95
95
if ( !hasNamedParameters () ) {
96
- return Collections . emptySet ();
96
+ return emptySet ();
97
97
}
98
98
99
99
final Set <String > rtn = new HashSet <>();
100
- for ( ProcedureParameter parameter : parameters ) {
100
+ for ( ProcedureParameter <?> parameter : parameters ) {
101
101
if ( parameter .getName () != null ) {
102
102
rtn .add ( parameter .getName () );
103
103
}
@@ -107,19 +107,12 @@ public Set<String> getNamedParameterNames() {
107
107
108
108
@ Override
109
109
public int getParameterCount () {
110
- if ( parameters == null ) {
111
- return 0 ;
112
- }
113
- return parameters .size ();
110
+ return parameters == null ? 0 : parameters .size ();
114
111
}
115
112
116
113
@ Override
117
- @ SuppressWarnings ("SuspiciousMethodCalls" )
118
- public boolean containsReference (QueryParameter parameter ) {
119
- if ( parameters == null ) {
120
- return false ;
121
- }
122
- return parameters .contains ( parameter );
114
+ public boolean containsReference (QueryParameter <?> parameter ) {
115
+ return parameters != null && parameters .contains ( (ProcedureParameterImplementor <?>) parameter );
123
116
}
124
117
125
118
public ParameterStrategy getParameterStrategy () {
@@ -131,14 +124,14 @@ public boolean hasAnyMatching(Predicate<QueryParameterImplementor<?>> filter) {
131
124
if ( parameters .isEmpty () ) {
132
125
return false ;
133
126
}
134
-
135
- for ( ProcedureParameterImplementor <?> parameter : parameters ) {
136
- if ( filter .test ( parameter ) ) {
137
- return true ;
127
+ else {
128
+ for ( ProcedureParameterImplementor <?> parameter : parameters ) {
129
+ if ( filter .test ( parameter ) ) {
130
+ return true ;
131
+ }
138
132
}
133
+ return false ;
139
134
}
140
-
141
- return false ;
142
135
}
143
136
144
137
@ Override
@@ -157,7 +150,6 @@ public ProcedureParameterImplementor<?> getQueryParameter(String name) {
157
150
if ( parameter != null ) {
158
151
return parameter ;
159
152
}
160
-
161
153
throw new IllegalArgumentException ( "Named parameter [" + name + "] is not registered with this procedure call" );
162
154
}
163
155
@@ -177,57 +169,51 @@ public ProcedureParameterImplementor<?> getQueryParameter(int positionLabel) {
177
169
if ( queryParameter != null ) {
178
170
return queryParameter ;
179
171
}
180
-
181
172
throw new IllegalArgumentException ( "Positional parameter [" + positionLabel + "] is not registered with this procedure call" );
182
173
}
183
174
184
175
@ Override
185
- public <P > ProcedureParameterImplementor <P > resolve (Parameter <P > param ) {
186
- if ( param instanceof ProcedureParameterImplementor ) {
187
- for ( ProcedureParameterImplementor <?> p : parameters ) {
188
- if ( p == param ) {
189
- //noinspection unchecked
190
- return (ProcedureParameterImplementor <P >) p ;
176
+ public <P > ProcedureParameterImplementor <P > resolve (Parameter <P > parameter ) {
177
+ if ( parameter instanceof ProcedureParameterImplementor <P > procedureParameterImplementor ) {
178
+ for ( ProcedureParameterImplementor <?> registered : parameters ) {
179
+ if ( registered == parameter ) {
180
+ return procedureParameterImplementor ;
191
181
}
192
182
}
193
183
}
194
-
195
184
return null ;
196
185
}
197
186
198
187
@ Override
199
188
public Set <? extends QueryParameter <?>> getRegistrations () {
200
- if ( parameters == null ) {
201
- return Collections .emptySet ();
202
- }
203
- return new HashSet <>( parameters );
189
+ return parameters == null ? emptySet () : new HashSet <>( parameters );
204
190
}
205
191
206
192
@ Override
207
193
public List <? extends ProcedureParameterImplementor <?>> getRegistrationsAsList () {
208
- if ( parameters == null ) {
209
- return Collections .emptyList ();
210
- }
211
- return parameters ;
194
+ return parameters == null ? emptyList () : parameters ;
212
195
}
213
196
214
197
@ Override
215
- public void visitRegistrations (Consumer <? extends QueryParameter <?>> action ) {
198
+ public void visitRegistrations (Consumer <QueryParameter <?>> action ) {
216
199
if ( parameters != null ) {
217
- parameters .forEach ( ( Consumer ) action );
200
+ parameters .forEach ( action );
218
201
}
219
202
}
220
203
221
204
@ Override
222
205
public Set <Integer > getOrdinalParameterLabels () {
223
206
final HashSet <Integer > labels = new HashSet <>();
224
- visitRegistrations (
225
- p -> {
226
- if ( p .getPosition () != null ) {
227
- labels .add ( p .getPosition () );
228
- }
229
- }
230
- );
207
+ visitRegistrations ( parameter -> {
208
+ if ( parameter .getPosition () != null ) {
209
+ labels .add ( parameter .getPosition () );
210
+ }
211
+ } );
231
212
return labels ;
232
213
}
214
+
215
+ @ Override
216
+ public <T > BindableType <T > getInferredParameterType (QueryParameter <T > parameter ) {
217
+ return null ;
218
+ }
233
219
}
0 commit comments