1818import org .hibernate .type .BindableType ;
1919import org .hibernate .query .QueryParameter ;
2020import org .hibernate .query .internal .QueryParameterBindingsImpl ;
21- import org .hibernate .procedure .ProcedureParameter ;
2221import org .hibernate .procedure .spi .ProcedureParameterImplementor ;
2322import org .hibernate .query .spi .ProcedureParameterMetadataImplementor ;
2423import org .hibernate .query .spi .QueryParameterBindings ;
@@ -38,14 +37,6 @@ class ProcedureParameterMetadataImpl implements ProcedureParameterMetadataImplem
3837 private ParameterStrategy parameterStrategy = ParameterStrategy .UNKNOWN ;
3938 private List <ProcedureParameterImplementor <?>> parameters ;
4039
41- ProcedureParameterMetadataImpl () {
42- }
43-
44- // public ProcedureParameterMetadataImpl(NamedCallableQueryMemento memento, SharedSessionContractImplementor session) {
45- // memento.getParameterMementos()
46- // .forEach( parameterMemento -> registerParameter( parameterMemento.resolve( session ) ) );
47- // }
48-
4940 @ Override
5041 public void registerParameter (ProcedureParameterImplementor <?> parameter ) {
5142 if ( parameter .isNamed () ) {
@@ -98,17 +89,18 @@ public boolean hasPositionalParameters() {
9889
9990 @ Override
10091 public Set <String > getNamedParameterNames () {
101- if ( !hasNamedParameters () ) {
102- return emptySet ();
103- }
104-
105- final Set <String > rtn = new HashSet <>();
106- for ( ProcedureParameter <?> parameter : parameters ) {
107- if ( parameter .getName () != null ) {
108- rtn .add ( parameter .getName () );
92+ if ( hasNamedParameters () && parameters != null ) {
93+ final Set <String > names = new HashSet <>();
94+ for ( var parameter : parameters ) {
95+ if ( parameter .getName () != null ) {
96+ names .add ( parameter .getName () );
97+ }
10998 }
99+ return names ;
100+ }
101+ else {
102+ return emptySet ();
110103 }
111- return rtn ;
112104 }
113105
114106 @ Override
@@ -129,7 +121,7 @@ public ParameterStrategy getParameterStrategy() {
129121
130122 @ Override
131123 public boolean hasAnyMatching (Predicate <QueryParameterImplementor <?>> filter ) {
132- if ( parameters .isEmpty () ) {
124+ if ( parameters == null || parameters .isEmpty () ) {
133125 return false ;
134126 }
135127 else {
@@ -144,9 +136,11 @@ public boolean hasAnyMatching(Predicate<QueryParameterImplementor<?>> filter) {
144136
145137 @ Override
146138 public ProcedureParameterImplementor <?> findQueryParameter (String name ) {
147- for ( var parameter : parameters ) {
148- if ( name .equals ( parameter .getName () ) ) {
149- return parameter ;
139+ if ( parameters != null ) {
140+ for ( var parameter : parameters ) {
141+ if ( name .equals ( parameter .getName () ) ) {
142+ return parameter ;
143+ }
150144 }
151145 }
152146 return null ;
@@ -163,9 +157,12 @@ public ProcedureParameterImplementor<?> getQueryParameter(String name) {
163157
164158 @ Override
165159 public ProcedureParameterImplementor <?> findQueryParameter (int positionLabel ) {
166- for ( var parameter : parameters ) {
167- if ( parameter .getName () == null && positionLabel == parameter .getPosition () ) {
168- return parameter ;
160+ if ( parameters != null ) {
161+ for ( var parameter : parameters ) {
162+ if ( parameter .getName () == null
163+ && positionLabel == parameter .getPosition () ) {
164+ return parameter ;
165+ }
169166 }
170167 }
171168 return null ;
@@ -174,18 +171,20 @@ public ProcedureParameterImplementor<?> findQueryParameter(int positionLabel) {
174171 @ Override
175172 public ProcedureParameterImplementor <?> getQueryParameter (int positionLabel ) {
176173 final var queryParameter = findQueryParameter ( positionLabel );
177- if ( queryParameter != null ) {
178- return queryParameter ;
174+ if ( queryParameter == null ) {
175+ throw new IllegalArgumentException (
176+ "Positional parameter " + positionLabel + " is not registered with this procedure call" );
179177 }
180- throw new IllegalArgumentException ( "Positional parameter [" + positionLabel + "] is not registered with this procedure call" ) ;
178+ return queryParameter ;
181179 }
182180
183181 @ Override
184182 public <P > ProcedureParameterImplementor <P > resolve (Parameter <P > parameter ) {
185- if ( parameter instanceof ProcedureParameterImplementor <P > parameterImplementor ) {
183+ if ( parameters != null
184+ && parameter instanceof ProcedureParameterImplementor <P > procedureParam ) {
186185 for ( var registered : parameters ) {
187186 if ( registered == parameter ) {
188- return parameterImplementor ;
187+ return procedureParam ;
189188 }
190189 }
191190 }
0 commit comments