55package org .hibernate .procedure .internal ;
66
77import java .util .ArrayList ;
8- import java .util .Collections ;
98import java .util .HashSet ;
109import java .util .List ;
1110import java .util .Set ;
1716import org .hibernate .engine .spi .SharedSessionContractImplementor ;
1817import org .hibernate .procedure .spi .NamedCallableQueryMemento ;
1918import org .hibernate .procedure .spi .ParameterStrategy ;
19+ import org .hibernate .query .BindableType ;
2020import org .hibernate .query .QueryParameter ;
2121import org .hibernate .query .internal .QueryParameterBindingsImpl ;
2222import org .hibernate .query .procedure .ProcedureParameter ;
2525import org .hibernate .query .spi .QueryParameterBindings ;
2626import org .hibernate .query .spi .QueryParameterImplementor ;
2727
28+ import static java .util .Collections .emptyList ;
29+ import static java .util .Collections .emptySet ;
30+
2831/**
2932 * Specialized ParameterMetadataImplementor for callable queries implementing
3033 * expandable parameter registrations
@@ -39,29 +42,26 @@ public ProcedureParameterMetadataImpl() {
3942 }
4043
4144 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 ) ) );
4547 }
4648
47- public void registerParameter (ProcedureParameterImplementor parameter ) {
48- if ( parameter .getName () != null ) {
49+ public void registerParameter (ProcedureParameterImplementor <?> parameter ) {
50+ if ( parameter .isNamed () ) {
4951 if ( parameterStrategy == ParameterStrategy .POSITIONAL ) {
5052 throw new IllegalArgumentException ( "Cannot mix named parameter with positional parameter registrations" );
5153 }
5254 parameterStrategy = ParameterStrategy .NAMED ;
5355 }
54- else if ( parameter .getPosition () != null ) {
56+ else if ( parameter .isOrdinal () ) {
5557 if ( parameterStrategy == ParameterStrategy .NAMED ) {
5658 throw new IllegalArgumentException ( "Cannot mix positional parameter with named parameter registrations" );
5759 }
58- this . parameterStrategy = ParameterStrategy .POSITIONAL ;
60+ parameterStrategy = ParameterStrategy .POSITIONAL ;
5961 }
6062 else {
6163 throw new IllegalArgumentException ( "Unrecognized parameter type : " + parameter );
6264 }
63-
64-
6565 if ( parameters == null ) {
6666 parameters = new ArrayList <>();
6767 }
@@ -74,7 +74,7 @@ public QueryParameterBindings createBindings(SessionFactoryImplementor sessionFa
7474 }
7575
7676 @ Override
77- public void visitParameters (Consumer <QueryParameterImplementor <?>> consumer ) {
77+ public void visitParameters (Consumer <QueryParameter <?>> consumer ) {
7878 if ( parameters != null ) {
7979 parameters .forEach ( consumer );
8080 }
@@ -93,11 +93,11 @@ public boolean hasPositionalParameters() {
9393 @ Override
9494 public Set <String > getNamedParameterNames () {
9595 if ( !hasNamedParameters () ) {
96- return Collections . emptySet ();
96+ return emptySet ();
9797 }
9898
9999 final Set <String > rtn = new HashSet <>();
100- for ( ProcedureParameter parameter : parameters ) {
100+ for ( ProcedureParameter <?> parameter : parameters ) {
101101 if ( parameter .getName () != null ) {
102102 rtn .add ( parameter .getName () );
103103 }
@@ -107,19 +107,12 @@ public Set<String> getNamedParameterNames() {
107107
108108 @ Override
109109 public int getParameterCount () {
110- if ( parameters == null ) {
111- return 0 ;
112- }
113- return parameters .size ();
110+ return parameters == null ? 0 : parameters .size ();
114111 }
115112
116113 @ 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 );
123116 }
124117
125118 public ParameterStrategy getParameterStrategy () {
@@ -131,14 +124,14 @@ public boolean hasAnyMatching(Predicate<QueryParameterImplementor<?>> filter) {
131124 if ( parameters .isEmpty () ) {
132125 return false ;
133126 }
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+ }
138132 }
133+ return false ;
139134 }
140-
141- return false ;
142135 }
143136
144137 @ Override
@@ -157,7 +150,6 @@ public ProcedureParameterImplementor<?> getQueryParameter(String name) {
157150 if ( parameter != null ) {
158151 return parameter ;
159152 }
160-
161153 throw new IllegalArgumentException ( "Named parameter [" + name + "] is not registered with this procedure call" );
162154 }
163155
@@ -177,57 +169,51 @@ public ProcedureParameterImplementor<?> getQueryParameter(int positionLabel) {
177169 if ( queryParameter != null ) {
178170 return queryParameter ;
179171 }
180-
181172 throw new IllegalArgumentException ( "Positional parameter [" + positionLabel + "] is not registered with this procedure call" );
182173 }
183174
184175 @ 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 ;
191181 }
192182 }
193183 }
194-
195184 return null ;
196185 }
197186
198187 @ Override
199188 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 );
204190 }
205191
206192 @ Override
207193 public List <? extends ProcedureParameterImplementor <?>> getRegistrationsAsList () {
208- if ( parameters == null ) {
209- return Collections .emptyList ();
210- }
211- return parameters ;
194+ return parameters == null ? emptyList () : parameters ;
212195 }
213196
214197 @ Override
215- public void visitRegistrations (Consumer <? extends QueryParameter <?>> action ) {
198+ public void visitRegistrations (Consumer <QueryParameter <?>> action ) {
216199 if ( parameters != null ) {
217- parameters .forEach ( ( Consumer ) action );
200+ parameters .forEach ( action );
218201 }
219202 }
220203
221204 @ Override
222205 public Set <Integer > getOrdinalParameterLabels () {
223206 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+ } );
231212 return labels ;
232213 }
214+
215+ @ Override
216+ public <T > BindableType <T > getInferredParameterType (QueryParameter <T > parameter ) {
217+ return null ;
218+ }
233219}
0 commit comments