Skip to content

Commit aacc0e2

Browse files
committed
cleanups around QueryParameterImplementor
and rename a parameter across the whole SQL hierarchy (!)
1 parent cca376e commit aacc0e2

File tree

116 files changed

+920
-941
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

116 files changed

+920
-941
lines changed

hibernate-core/src/main/java/org/hibernate/metamodel/model/domain/DiscriminatorSqmPath.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,10 @@
1717
*/
1818
public interface DiscriminatorSqmPath<T> extends SqmPath<T> {
1919
@Override
20-
default void appendHqlString(StringBuilder sb) {
21-
sb.append( "type(" );
22-
getLhs().appendHqlString( sb );
23-
sb.append( ')' );
20+
default void appendHqlString(StringBuilder hql) {
21+
hql.append( "type(" );
22+
getLhs().appendHqlString( hql );
23+
hql.append( ')' );
2424
}
2525

2626
@Override

hibernate-core/src/main/java/org/hibernate/procedure/internal/FunctionReturnImpl.java

Lines changed: 34 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,13 @@
1212
import org.hibernate.procedure.spi.ProcedureCallImplementor;
1313
import org.hibernate.query.BindableType;
1414
import org.hibernate.query.OutputableType;
15-
import org.hibernate.sql.exec.internal.JdbcCallFunctionReturnImpl;
15+
import org.hibernate.sql.exec.internal.JdbcCallFunctionReturnImpl.RefCurserJdbcCallFunctionReturnImpl;
16+
import org.hibernate.sql.exec.internal.JdbcCallFunctionReturnImpl.RegularJdbcCallFunctionReturnImpl;
1617
import org.hibernate.sql.exec.internal.JdbcCallParameterExtractorImpl;
1718
import org.hibernate.sql.exec.internal.JdbcCallRefCursorExtractorImpl;
1819
import org.hibernate.sql.exec.spi.JdbcCallFunctionReturn;
20+
import org.hibernate.type.BasicType;
1921
import org.hibernate.type.descriptor.java.JavaType;
20-
import org.hibernate.type.descriptor.jdbc.JdbcType;
2122
import org.hibernate.type.spi.TypeConfiguration;
2223

2324
import jakarta.persistence.ParameterMode;
@@ -26,6 +27,7 @@
2627
* @author Steve Ebersole
2728
*/
2829
public class FunctionReturnImpl<T> implements FunctionReturnImplementor<T> {
30+
2931
private final ProcedureCallImplementor<T> procedureCall;
3032
private final int sqlTypeCode;
3133

@@ -44,37 +46,36 @@ public FunctionReturnImpl(ProcedureCallImplementor<T> procedureCall, OutputableT
4446

4547
@Override
4648
public JdbcCallFunctionReturn toJdbcFunctionReturn(SharedSessionContractImplementor persistenceContext) {
47-
final OutputableType<T> ormType;
48-
final JdbcCallRefCursorExtractorImpl refCursorExtractor;
49-
final JdbcCallParameterExtractorImpl<T> parameterExtractor;
50-
5149
if ( getJdbcTypeCode() == Types.REF_CURSOR ) {
52-
refCursorExtractor = new JdbcCallRefCursorExtractorImpl( 1 );
53-
ormType = null;
54-
parameterExtractor = null;
50+
return new RefCurserJdbcCallFunctionReturnImpl( new JdbcCallRefCursorExtractorImpl( 1 ) );
5551
}
5652
else {
57-
if ( this.ormType != null ) {
58-
ormType = this.ormType;
59-
}
60-
else {
61-
final TypeConfiguration typeConfiguration = persistenceContext.getFactory().getTypeConfiguration();
62-
final JdbcType sqlTypeDescriptor = typeConfiguration.getJdbcTypeRegistry().getDescriptor(
63-
getJdbcTypeCode()
64-
);
65-
final JavaType<?> javaTypeMapping = sqlTypeDescriptor.getJdbcRecommendedJavaTypeMapping(
66-
null,
67-
null,
68-
typeConfiguration
69-
);
70-
//noinspection unchecked
71-
ormType = (OutputableType<T>) typeConfiguration.standardBasicTypeForJavaType( javaTypeMapping.getJavaTypeClass() );
72-
}
73-
parameterExtractor = new JdbcCallParameterExtractorImpl<>( procedureCall.getProcedureName(), null, 1, ormType );
74-
refCursorExtractor = null;
53+
return new RegularJdbcCallFunctionReturnImpl(
54+
getOrmType( persistenceContext ),
55+
new JdbcCallParameterExtractorImpl<T>(
56+
procedureCall.getProcedureName(),
57+
null,
58+
1,
59+
getOrmType( persistenceContext )
60+
)
61+
);
7562
}
63+
}
7664

77-
return new JdbcCallFunctionReturnImpl( ormType, parameterExtractor, refCursorExtractor );
65+
private OutputableType<T> getOrmType(SharedSessionContractImplementor persistenceContext) {
66+
if ( ormType != null ) {
67+
return ormType;
68+
}
69+
else {
70+
final TypeConfiguration typeConfiguration = persistenceContext.getFactory().getTypeConfiguration();
71+
final JavaType<?> javaType =
72+
typeConfiguration.getJdbcTypeRegistry().getDescriptor( getJdbcTypeCode() )
73+
.getJdbcRecommendedJavaTypeMapping( null, null, typeConfiguration );
74+
final BasicType<?> basicType =
75+
typeConfiguration.standardBasicTypeForJavaType( javaType.getJavaTypeClass() );
76+
//noinspection unchecked
77+
return (OutputableType<T>) basicType;
78+
}
7879
}
7980

8081
@Override
@@ -103,7 +104,7 @@ public ParameterMode getMode() {
103104
}
104105

105106
@Override
106-
public Class getParameterType() {
107+
public Class<T> getParameterType() {
107108
throw new UnsupportedOperationException();
108109
}
109110

@@ -113,7 +114,7 @@ public void disallowMultiValuedBinding() {
113114
}
114115

115116
@Override
116-
public void applyAnticipatedType(BindableType type) {
117+
public void applyAnticipatedType(BindableType<?> type) {
117118
throw new UnsupportedOperationException();
118119
}
119120

@@ -124,13 +125,8 @@ public boolean allowsMultiValuedBinding() {
124125

125126
@Override
126127
public NamedCallableQueryMemento.ParameterMemento toMemento() {
127-
return session -> {
128-
if ( ormType != null ) {
129-
return new FunctionReturnImpl<>( procedureCall, ormType );
130-
}
131-
else {
132-
return new FunctionReturnImpl<>( procedureCall, sqlTypeCode );
133-
}
134-
};
128+
return session -> ormType != null
129+
? new FunctionReturnImpl<T>( procedureCall, ormType )
130+
: new FunctionReturnImpl<T>( procedureCall, sqlTypeCode );
135131
}
136132
}

hibernate-core/src/main/java/org/hibernate/procedure/internal/ProcedureParameterImpl.java

Lines changed: 41 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -92,24 +92,9 @@ public Class<T> getParameterType() {
9292

9393
@Override
9494
public NamedCallableQueryMemento.ParameterMemento toMemento() {
95-
return session -> {
96-
if ( getName() != null ) {
97-
return new ProcedureParameterImpl<>(
98-
getName(),
99-
getMode(),
100-
javaType,
101-
getHibernateType()
102-
);
103-
}
104-
else {
105-
return new ProcedureParameterImpl<>(
106-
getPosition(),
107-
getMode(),
108-
javaType,
109-
getHibernateType()
110-
);
111-
}
112-
};
95+
return session -> isNamed()
96+
? new ProcedureParameterImpl<T>( getName(), getMode(), javaType, getHibernateType() )
97+
: new ProcedureParameterImpl<T>( getPosition(), getMode(), javaType, getHibernateType() );
11398
}
11499

115100
@Override
@@ -119,17 +104,7 @@ public JdbcCallParameterRegistration toJdbcParameterRegistration(
119104
final QueryParameterBinding<T> binding = procedureCall.getParameterBindings().getBinding( this );
120105
final boolean isNamed = procedureCall.getParameterStrategy() == ParameterStrategy.NAMED && this.name != null;
121106

122-
final BindableType<T> bindableType;
123-
if ( getHibernateType() != null ) {
124-
bindableType = getHibernateType();
125-
}
126-
else if ( binding != null ) {
127-
//noinspection unchecked
128-
bindableType = (BindableType<T>) binding.getBindType();
129-
}
130-
else {
131-
bindableType = null;
132-
}
107+
final BindableType<T> bindableType = getBindableType( binding );
133108

134109
final SharedSessionContractImplementor session = procedureCall.getSession();
135110

@@ -143,14 +118,11 @@ else if ( binding != null ) {
143118
final JdbcParameterBinder parameterBinder;
144119
final JdbcCallRefCursorExtractorImpl refCursorExtractor;
145120
final JdbcCallParameterExtractorImpl<T> parameterExtractor;
146-
final ExtractedDatabaseMetaData databaseMetaData = session
147-
.getFactory()
148-
.getJdbcServices()
149-
.getJdbcEnvironment()
150-
.getExtractedDatabaseMetaData();
151-
final boolean passProcedureParameterNames = session.getFactory()
152-
.getSessionFactoryOptions()
153-
.isPassProcedureParameterNames();
121+
final ExtractedDatabaseMetaData databaseMetaData =
122+
session.getFactory().getJdbcServices().getJdbcEnvironment()
123+
.getExtractedDatabaseMetaData();
124+
final boolean passProcedureParameterNames =
125+
session.getFactory().getSessionFactoryOptions().isPassProcedureParameterNames();
154126
switch ( mode ) {
155127
case REF_CURSOR:
156128
jdbcParamName = this.name != null && databaseMetaData.supportsNamedParameters() && passProcedureParameterNames ? this.name : null;
@@ -184,13 +156,29 @@ else if ( binding != null ) {
184156
return new JdbcCallParameterRegistrationImpl( jdbcParamName, startIndex, mode, typeToUse, parameterBinder, parameterExtractor, refCursorExtractor );
185157
}
186158

159+
private BindableType<T> getBindableType(QueryParameterBinding<T> binding) {
160+
if ( getHibernateType() != null ) {
161+
return getHibernateType();
162+
}
163+
else if ( binding != null ) {
164+
//noinspection unchecked
165+
return (BindableType<T>) binding.getBindType();
166+
}
167+
else {
168+
return null;
169+
}
170+
}
171+
187172
private String getJdbcParamName(
188173
ProcedureCallImplementor<?> procedureCall,
189174
boolean isNamed,
190175
boolean passProcedureParameterNames,
191176
OutputableType<T> typeToUse,
192177
ExtractedDatabaseMetaData databaseMetaData) {
193-
return isNamed && passProcedureParameterNames && canDoNameParameterBinding( typeToUse, procedureCall, databaseMetaData ) ? this.name : null;
178+
return isNamed && passProcedureParameterNames
179+
&& canDoNameParameterBinding( typeToUse, procedureCall, databaseMetaData )
180+
? this.name
181+
: null;
194182
}
195183

196184
private void validateBindableType(BindableType<T> bindableType, int startIndex) {
@@ -217,22 +205,22 @@ private JdbcParameterBinder getParameterBinder(BindableType<T> typeToUse, String
217205
)
218206
);
219207
}
220-
221-
if ( typeToUse instanceof BasicType<?> ) {
208+
else if ( typeToUse instanceof BasicType<?> ) {
222209
return new JdbcParameterImpl( (BasicType<T>) typeToUse );
223210
}
224-
225-
throw new UnsupportedOperationException();
211+
else {
212+
throw new UnsupportedOperationException();
213+
}
226214
}
227215

228216
private boolean canDoNameParameterBinding(
229217
BindableType<?> hibernateType,
230218
ProcedureCallImplementor<?> procedureCall,
231219
ExtractedDatabaseMetaData databaseMetaData) {
232220
return procedureCall.getFunctionReturn() == null
233-
&& databaseMetaData.supportsNamedParameters()
234-
&& hibernateType instanceof ProcedureParameterNamedBinder
235-
&& ( (ProcedureParameterNamedBinder<?>) hibernateType ).canDoSetting();
221+
&& databaseMetaData.supportsNamedParameters()
222+
&& hibernateType instanceof ProcedureParameterNamedBinder
223+
&& ( (ProcedureParameterNamedBinder<?>) hibernateType ).canDoSetting();
236224
}
237225

238226
@Override
@@ -245,22 +233,19 @@ public boolean equals(Object o) {
245233
if ( this == o ) {
246234
return true;
247235
}
248-
if ( o == null || getClass() != o.getClass() ) {
236+
if ( o == null ) {
237+
return false;
238+
}
239+
if ( !(o instanceof ProcedureParameterImpl<?> that) ) {
249240
return false;
250241
}
251-
ProcedureParameterImpl<?> that = (ProcedureParameterImpl<?>) o;
252-
return Objects.equals( name, that.name ) &&
253-
Objects.equals( position, that.position ) &&
254-
mode == that.mode;
242+
return Objects.equals( name, that.name )
243+
&& Objects.equals( position, that.position )
244+
&& mode == that.mode;
255245
}
256246

257247
@Override
258248
public String toString() {
259-
if ( position == null ) {
260-
return name;
261-
}
262-
else {
263-
return position.toString();
264-
}
249+
return position == null ? name : position.toString();
265250
}
266251
}

hibernate-core/src/main/java/org/hibernate/query/hql/internal/FullyQualifiedReflectivePathTerminal.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -152,10 +152,10 @@ public void applyInferableType(@Nullable SqmExpressible<?> type) {
152152
}
153153

154154
@Override
155-
public void appendHqlString(StringBuilder sb) {
156-
sb.append( getParent().getFullPath() );
157-
sb.append( '.' );
158-
sb.append( getLocalName() );
155+
public void appendHqlString(StringBuilder hql) {
156+
hql.append( getParent().getFullPath() );
157+
hql.append( '.' );
158+
hql.append( getLocalName() );
159159
}
160160

161161
@Override

hibernate-core/src/main/java/org/hibernate/query/internal/QueryParameterNamedImpl.java

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,9 @@ public class QueryParameterNamedImpl<T> extends AbstractQueryParameter<T> {
2424
*
2525
* @return The parameter descriptor
2626
*/
27-
public static <T> QueryParameterNamedImpl<T> fromSqm(SqmParameter<?> parameter) {
27+
public static <T> QueryParameterNamedImpl<T> fromSqm(SqmParameter<T> parameter) {
2828
assert parameter.getName() != null;
2929
assert parameter.getPosition() == null;
30-
3130
return new QueryParameterNamedImpl<>(
3231
parameter.getName(),
3332
parameter.allowMultiValuedBinding(),
@@ -36,20 +35,12 @@ public static <T> QueryParameterNamedImpl<T> fromSqm(SqmParameter<?> parameter)
3635
}
3736

3837
public static <T> QueryParameterNamedImpl<T> fromNativeQuery(String name) {
39-
return new QueryParameterNamedImpl<>(
40-
name,
41-
true,
42-
null
43-
);
38+
return new QueryParameterNamedImpl<>( name, true, null );
4439
}
4540

4641
private final String name;
4742

48-
private QueryParameterNamedImpl(
49-
String name,
50-
boolean allowMultiValuedBinding,
51-
BindableType anticipatedType) {
52-
//noinspection unchecked
43+
private QueryParameterNamedImpl(String name, boolean allowMultiValuedBinding, BindableType<T> anticipatedType) {
5344
super( allowMultiValuedBinding, anticipatedType );
5445
this.name = name;
5546
}
@@ -69,11 +60,15 @@ public boolean equals(Object o) {
6960
if ( this == o ) {
7061
return true;
7162
}
72-
if ( o == null || getClass() != o.getClass() ) {
63+
else if ( o == null ) {
7364
return false;
7465
}
75-
QueryParameterNamedImpl<?> that = (QueryParameterNamedImpl<?>) o;
76-
return Objects.equals( name, that.name );
66+
else if ( !(o instanceof QueryParameterNamedImpl<?> that) ) {
67+
return false;
68+
}
69+
else {
70+
return Objects.equals( name, that.name );
71+
}
7772
}
7873

7974
@Override

0 commit comments

Comments
 (0)