55package  org .hibernate .sql .exec .internal ;
66
77import  java .util .Collection ;
8- import  java .util .Collections ;
98import  java .util .IdentityHashMap ;
109import  java .util .List ;
1110import  java .util .Map ;
1211import  java .util .function .BiConsumer ;
1312
14- import  org .hibernate .dialect .Dialect ;
1513import  org .hibernate .engine .spi .SessionFactoryImplementor ;
1614import  org .hibernate .metamodel .mapping .BasicValuedMapping ;
1715import  org .hibernate .metamodel .mapping .JdbcMapping ;
1816import  org .hibernate .type .BindableType ;
1917import  org .hibernate .query .spi .QueryParameterBinding ;
2018import  org .hibernate .query .spi .QueryParameterBindings ;
2119import  org .hibernate .query .spi .QueryParameterImplementor ;
22- import  org .hibernate .query .sql .internal .NativeQueryImpl ;
2320import  org .hibernate .query .sql .spi .ParameterOccurrence ;
2421import  org .hibernate .sql .ast .tree .expression .JdbcParameter ;
2522import  org .hibernate .sql .exec .spi .JdbcParameterBinder ;
2825import  org .hibernate .type .BasicTypeReference ;
2926import  org .hibernate .type .descriptor .converter .spi .BasicValueConverter ;
3027
28+ import  static  java .util .Collections .emptyList ;
29+ import  static  org .hibernate .query .sql .internal .NativeQueryImpl .determineBindValueMaxCount ;
30+ 
3131/** 
3232 * Standard implementation of JdbcParameterBindings 
3333 * 
@@ -50,42 +50,22 @@ public JdbcParameterBindingsImpl(
5050		if  ( !parameterOccurrences .isEmpty () ) {
5151			bindingMap  = new  IdentityHashMap <>( parameterOccurrences .size () );
5252
53- 			final  Dialect  dialect  = factory .getJdbcServices ().getDialect ();
5453			final  boolean  paddingEnabled  = factory .getSessionFactoryOptions ().inClauseParameterPaddingEnabled ();
55- 			final  int  inExprLimit  = dialect .getParameterCountLimit ();
54+ 			final  int  inExprLimit  = factory . getJdbcServices (). getDialect () .getParameterCountLimit ();
5655
5756			for  ( ParameterOccurrence  occurrence  : parameterOccurrences  ) {
5857				final  QueryParameterImplementor <?> param  = occurrence .parameter ();
5958				final  QueryParameterBinding <?> binding  = queryParameterBindings .getBinding ( param  );
6059
61- 				final  JdbcMapping  jdbcMapping ;
62- 
63- 				final  BindableType <?> type  = determineParamType ( param , binding  );
64- 				if  ( type  == null  ) {
65- 					jdbcMapping  = factory .getTypeConfiguration ().getBasicTypeForJavaType ( Object .class  );
66- 				}
67- 				else  if  ( type  instanceof  BasicTypeReference <?> basicTypeReference  ) {
68- 					jdbcMapping  =
69- 							factory .getTypeConfiguration ().getBasicTypeRegistry ()
70- 									.resolve ( basicTypeReference  );
71- 				}
72- 				else  if  ( type  instanceof  BasicValuedMapping  basicValuedMapping  ) {
73- 					jdbcMapping  = basicValuedMapping .getJdbcMapping ();
74- 				}
75- 				else  {
76- 					throw  new  IllegalArgumentException ( "Could not resolve NativeQuery parameter type : `"  + param  + "`" );
77- 				}
60+ 				final  JdbcMapping  jdbcMapping  = jdbcMapping ( factory , param , binding  );
7861
7962				final  BasicValueConverter  valueConverter  = jdbcMapping  == null  ? null  : jdbcMapping .getValueConverter ();
8063
8164				if  ( binding .isMultiValued () ) {
8265					final  Collection <?> bindValues  = binding .getBindValues ();
8366					final  int  bindValueCount  = bindValues .size ();
84- 					final  int  bindValueMaxCount  = NativeQueryImpl .determineBindValueMaxCount (
85- 							paddingEnabled ,
86- 							inExprLimit ,
87- 							bindValueCount 
88- 					);
67+ 					final  int  bindValueMaxCount  =
68+ 							determineBindValueMaxCount ( paddingEnabled , inExprLimit , bindValueCount  );
8969					Object  lastBindValue  = null ;
9070					if  ( valueConverter  != null  ) {
9171						for  ( Object  bindValue  : bindValues  ) {
@@ -119,31 +99,38 @@ else if ( type instanceof BasicValuedMapping basicValuedMapping ) {
11999					}
120100				}
121101				else  {
122- 					final  Object  bindValue ;
123- 					if  ( valueConverter  != null  && binding .getBindValue () != null  ) {
124- 						bindValue  = valueConverter .toRelationalValue ( binding .getBindValue () );
125- 					}
126- 					else  {
127- 						bindValue  = binding .getBindValue ();
128- 					}
129- 
102+ 					final  Object  bindValue  =
103+ 							valueConverter  != null  && binding .getBindValue () != null 
104+ 									? valueConverter .toRelationalValue ( binding .getBindValue () )
105+ 									: binding .getBindValue ();
130106					final  JdbcParameterImpl  jdbcParameter  = new  JdbcParameterImpl ( jdbcMapping  );
131107					jdbcParameterBinders .add ( jdbcParameter  );
132- 					addBinding (
133- 							jdbcParameter ,
134- 							new  JdbcParameterBindingImpl ( jdbcMapping , bindValue  )
135- 					);
108+ 					addBinding ( jdbcParameter , new  JdbcParameterBindingImpl ( jdbcMapping , bindValue  ) );
136109				}
137110			}
138111		}
139112	}
140113
141- 	private  BindableType <?>  determineParamType ( QueryParameterImplementor <?> param , QueryParameterBinding <?> binding ) {
142- 		BindableType <?> type  = binding . getBindType ( );
114+ 	private  JdbcMapping   jdbcMapping ( SessionFactoryImplementor   factory ,  QueryParameterImplementor <?> param , QueryParameterBinding <?> binding ) {
115+ 		final   BindableType <?> type  = determineParamType (  param ,  binding   );
143116		if  ( type  == null  ) {
144- 			type  =  param . getHibernateType ( );
117+ 			return   factory . getTypeConfiguration (). getBasicTypeForJavaType (  Object . class   );
145118		}
146- 		return  type ;
119+ 		else  if  ( type  instanceof  BasicTypeReference <?> basicTypeReference  ) {
120+ 			return  factory .getTypeConfiguration ().getBasicTypeRegistry ()
121+ 					.resolve ( basicTypeReference  );
122+ 		}
123+ 		else  if  ( type  instanceof  BasicValuedMapping  basicValuedMapping  ) {
124+ 			return  basicValuedMapping .getJdbcMapping ();
125+ 		}
126+ 		else  {
127+ 			throw  new  IllegalArgumentException ( "Could not resolve NativeQuery parameter type : `"  + param  + "`" );
128+ 		}
129+ 	}
130+ 
131+ 	private  BindableType <?> determineParamType (QueryParameterImplementor <?> param , QueryParameterBinding <?> binding ) {
132+ 		final  BindableType <?> type  = binding .getBindType ();
133+ 		return  type  == null  ? param .getHibernateType () : type ;
147134	}
148135
149136	@ Override 
@@ -157,24 +144,20 @@ public void addBinding(JdbcParameter parameter, JdbcParameterBinding binding) {
157144
158145	@ Override 
159146	public  Collection <JdbcParameterBinding > getBindings () {
160- 		return  bindingMap  == null  ? Collections . emptyList () : bindingMap .values ();
147+ 		return  bindingMap  == null  ? emptyList () : bindingMap .values ();
161148	}
162149
163150	@ Override 
164151	public  JdbcParameterBinding  getBinding (JdbcParameter  parameter ) {
165- 		if  ( bindingMap  == null  ) {
166- 			return  null ;
167- 		}
168- 		return  bindingMap .get ( parameter  );
152+ 		return  bindingMap  == null  ? null  : bindingMap .get ( parameter  );
169153	}
170154
171155	@ Override 
172156	public  void  visitBindings (BiConsumer <JdbcParameter , JdbcParameterBinding > action ) {
173- 		if  ( bindingMap  == null  ) {
174- 			return ;
175- 		}
176- 		for  ( Map .Entry <JdbcParameter , JdbcParameterBinding > entry  : bindingMap .entrySet () ) {
177- 			action .accept ( entry .getKey (), entry .getValue () );
157+ 		if  ( bindingMap  != null  ) {
158+ 			for  ( var  entry  : bindingMap .entrySet () ) {
159+ 				action .accept ( entry .getKey (), entry .getValue () );
160+ 			}
178161		}
179162	}
180163
0 commit comments