Skip to content

Commit 03e48d8

Browse files
dreab8sebersole
authored andcommitted
HHH-18280 add hibernate.query.pass_procedure_paramater_names setting
1 parent 8740a83 commit 03e48d8

24 files changed

+254
-123
lines changed

hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/SQLServerLegacyDialect.java

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1136,12 +1136,6 @@ protected String getFormattedSequenceName(QualifiedSequenceName name, Metadata m
11361136
}
11371137
}
11381138

1139-
@Override
1140-
public boolean supportsNamedParameters(DatabaseMetaData databaseMetaData) {
1141-
// Not sure if it's a JDBC driver issue, but it doesn't work
1142-
return false;
1143-
}
1144-
11451139
@Override
11461140
public String generatedAs(String generatedAs) {
11471141
return " as (" + generatedAs + ") persisted";

hibernate-core/src/main/java/org/hibernate/boot/internal/SessionFactoryOptionsBuilder.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,7 @@ public class SessionFactoryOptionsBuilder implements SessionFactoryOptions {
208208
private boolean orderInsertsEnabled;
209209
private boolean collectionsInDefaultFetchGroupEnabled = true;
210210
private boolean UnownedAssociationTransientCheck;
211+
private boolean passProcedureParameterNames;
211212

212213
// JPA callbacks
213214
private final boolean callbacksEnabled;
@@ -627,6 +628,12 @@ else if ( jdbcTimeZoneValue != null ) {
627628
configurationSettings,
628629
isJpaBootstrap()
629630
);
631+
632+
this.passProcedureParameterNames = ConfigurationHelper.getBoolean(
633+
AvailableSettings.QUERY_PASS_PROCEDURE_PARAMETER_NAMES,
634+
configurationSettings,
635+
false
636+
);
630637
}
631638

632639
private boolean disallowBatchUpdates(Dialect dialect, ExtractedDatabaseMetaData meta) {
@@ -1318,6 +1325,11 @@ public FormatMapper getXmlFormatMapper() {
13181325
return xmlFormatMapper;
13191326
}
13201327

1328+
@Override
1329+
public boolean isPassProcedureParameterNames() {
1330+
return passProcedureParameterNames;
1331+
}
1332+
13211333
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
13221334
// In-flight mutation access
13231335

hibernate-core/src/main/java/org/hibernate/boot/spi/AbstractDelegatingSessionFactoryOptions.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -512,4 +512,9 @@ public FormatMapper getJsonFormatMapper() {
512512
public FormatMapper getXmlFormatMapper() {
513513
return delegate.getXmlFormatMapper();
514514
}
515+
516+
@Override
517+
public boolean isPassProcedureParameterNames() {
518+
return delegate.isPassProcedureParameterNames();
519+
}
515520
}

hibernate-core/src/main/java/org/hibernate/boot/spi/SessionFactoryOptions.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -374,4 +374,6 @@ default boolean isCollectionsInDefaultFetchGroupEnabled() {
374374
default JavaType<Object> getDefaultTenantIdentifierJavaType() {
375375
return ObjectJavaType.INSTANCE;
376376
}
377+
378+
boolean isPassProcedureParameterNames();
377379
}

hibernate-core/src/main/java/org/hibernate/cfg/QuerySettings.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -242,4 +242,11 @@ public interface QuerySettings {
242242
*/
243243
@Deprecated(since="6.0")
244244
String QUERY_PLAN_CACHE_PARAMETER_METADATA_MAX_SIZE = "hibernate.query.plan_parameter_metadata_max_size";
245+
246+
/**
247+
* For database supporting name parameters this setting allows to use named parameter is the procedure call.
248+
*
249+
* By default, this is set to false
250+
*/
251+
String QUERY_PASS_PROCEDURE_PARAMETER_NAMES = "hibernate.query.pass_procedure_paramater_names";
245252
}

hibernate-core/src/main/java/org/hibernate/dialect/DB2Dialect.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -857,11 +857,6 @@ public Boolean supportsRefCursors() {
857857
return false;
858858
}
859859

860-
@Override
861-
public boolean supportsNamedParameters(DatabaseMetaData databaseMetaData) throws SQLException {
862-
return false;
863-
}
864-
865860
@Override
866861
public int registerResultSetOutParameter(CallableStatement statement, int col) throws SQLException {
867862
statement.registerOutParameter( col++, Types.REF_CURSOR );

hibernate-core/src/main/java/org/hibernate/dialect/OracleDialect.java

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1582,12 +1582,6 @@ public int registerResultSetOutParameter(CallableStatement statement, String nam
15821582
return 1;
15831583
}
15841584

1585-
@Override
1586-
public boolean supportsNamedParameters(DatabaseMetaData databaseMetaData) {
1587-
// Not sure if it's a JDBC driver issue, but it doesn't work
1588-
return false;
1589-
}
1590-
15911585
@Override
15921586
public ResultSet getResultSet(CallableStatement statement, String name) throws SQLException {
15931587
return (ResultSet) statement.getObject( name );

hibernate-core/src/main/java/org/hibernate/dialect/SQLServerDialect.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1122,11 +1122,6 @@ protected String getFormattedSequenceName(QualifiedSequenceName name, Metadata m
11221122
}
11231123
}
11241124

1125-
@Override
1126-
public boolean supportsNamedParameters(DatabaseMetaData databaseMetaData) {
1127-
return false;
1128-
}
1129-
11301125
@Override
11311126
public String generatedAs(String generatedAs) {
11321127
return " as (" + generatedAs + ") persisted";

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
import java.util.List;
1010

11+
import org.hibernate.engine.spi.SharedSessionContractImplementor;
1112
import org.hibernate.procedure.spi.FunctionReturnImplementor;
1213
import org.hibernate.procedure.spi.ParameterStrategy;
1314
import org.hibernate.procedure.spi.ProcedureCallImplementor;
@@ -84,7 +85,10 @@ public JdbcOperationQueryCall interpretCall(ProcedureCallImplementor<?> procedur
8485
i + offset,
8586
procedureCall
8687
);
87-
if ( parameter.getName() != null ) {
88+
final SharedSessionContractImplementor session = procedureCall.getSession();
89+
if ( parameter.getName() != null
90+
&& session.getJdbcServices().getExtractedMetaDataSupport().supportsNamedParameters()
91+
&& session.getFactory().getSessionFactoryOptions().isPassProcedureParameterNames() ) {
8892
buffer.append( parameter.getName() ).append( " => ?" );
8993
}
9094
else {

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ public JdbcCallFunctionReturn toJdbcFunctionReturn(SharedSessionContractImplemen
5252
final JdbcCallParameterExtractorImpl<T> parameterExtractor;
5353

5454
if ( getJdbcTypeCode() == Types.REF_CURSOR ) {
55-
refCursorExtractor = new JdbcCallRefCursorExtractorImpl( null, 1 );
55+
refCursorExtractor = new JdbcCallRefCursorExtractorImpl( 1 );
5656
ormType = null;
5757
parameterExtractor = null;
5858
}

0 commit comments

Comments
 (0)