Skip to content

Commit b276128

Browse files
committed
HHH-16284 - Rename JdbcParameterRender to ParameterMarkerStrategy
1 parent f45dcf4 commit b276128

29 files changed

+630
-475
lines changed

gradle/databases.gradle

+3-2
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@ ext {
1919
'jdbc.user' : 'sa',
2020
'jdbc.pass' : '',
2121
'jdbc.url' : 'jdbc:h2:mem:db1;DB_CLOSE_DELAY=-1;LOCK_TIMEOUT=10000',
22-
'connection.init_sql' : ''
22+
'connection.init_sql' : '',
23+
'hibernate.dialect.native_param_markers' : 'true'
2324
],
2425
hsqldb : [
2526
'db.dialect' : 'org.hibernate.dialect.HSQLDialect',
@@ -250,4 +251,4 @@ if ( processTestResourcesTask != null ) {
250251
// processTestResourcesTask.inputs.property( "gradle.libs.versions.hsqldb", project.getProperty( "gradle.libs.versions.hsqldb", "2.7.1" ) )
251252
// processTestResourcesTask.inputs.property( "gradle.libs.versions.derby", project.getProperty( "gradle.libs.versions.derby", "10.15.2.0" ) )
252253
processTestResourcesTask.filter( ReplaceTokens, tokens: dbBundle[db] )
253-
}
254+
}

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

+8-5
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import org.hibernate.query.sqm.mutation.internal.temptable.PersistentTableStrategy;
3030
import org.hibernate.resource.jdbc.spi.PhysicalConnectionHandlingMode;
3131
import org.hibernate.resource.jdbc.spi.StatementInspector;
32+
import org.hibernate.sql.ast.spi.ParameterMarkerStrategy;
3233

3334
import jakarta.persistence.criteria.CriteriaDelete;
3435
import jakarta.persistence.criteria.CriteriaQuery;
@@ -2789,13 +2790,15 @@ public interface AvailableSettings {
27892790
String TIMEZONE_DEFAULT_STORAGE = "hibernate.timezone.default_storage";
27902791

27912792
/**
2792-
* Controls whether to use JDBC parameter markers (`?`) or dialect native markers.
2793+
* Controls whether to use JDBC markers (`?`) or dialect native markers for parameters
2794+
* within {@linkplain java.sql.PreparedStatement preparable} SQL statements.
27932795
*
2794-
* @implNote By default ({@code true}), dialect native markers are used, if any; disable
2795-
* ({@code false}) to use the standard JDBC parameter markers (`?`) instead
2796+
* @implNote {@code False} by default, indicating standard JDBC parameter markers (`?`)
2797+
* are used. Set to {@code true} to use the Dialect's native markers, if any. For
2798+
* Dialects without native markers, the standard JDBC strategy is used.
27962799
*
2797-
* @see org.hibernate.sql.ast.spi.JdbcParameterRenderer
2798-
* @see org.hibernate.dialect.Dialect#getNativeParameterRenderer()
2800+
* @see ParameterMarkerStrategy
2801+
* @see org.hibernate.dialect.Dialect#getNativeParameterMarkerStrategy()
27992802
*
28002803
* @since 6.2
28012804
*/

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

+10-5
Original file line numberDiff line numberDiff line change
@@ -144,8 +144,8 @@
144144
import org.hibernate.sql.ForUpdateFragment;
145145
import org.hibernate.sql.ast.SqlAstNodeRenderingMode;
146146
import org.hibernate.sql.ast.SqlAstTranslatorFactory;
147-
import org.hibernate.sql.ast.internal.JdbcParameterRendererStandard;
148-
import org.hibernate.sql.ast.spi.JdbcParameterRenderer;
147+
import org.hibernate.sql.ast.internal.ParameterMarkerStrategyStandard;
148+
import org.hibernate.sql.ast.spi.ParameterMarkerStrategy;
149149
import org.hibernate.sql.ast.spi.SqlAppender;
150150
import org.hibernate.sql.ast.spi.StringBuilderSqlAppender;
151151
import org.hibernate.sql.model.MutationOperation;
@@ -4815,10 +4815,15 @@ public String getTruncateTableStatement(String tableName) {
48154815
}
48164816

48174817
/**
4818-
* Support for native parameter rendering
4818+
* Support for native parameter markers.
4819+
* <p/>
4820+
* This is generally dependent on both the database and the driver.
4821+
*
4822+
* @return May return {@code null} to indicate that the JDBC
4823+
* {@linkplain ParameterMarkerStrategyStandard standard} strategy should be used
48194824
*/
4820-
public JdbcParameterRenderer getNativeParameterRenderer() {
4821-
return JdbcParameterRendererStandard.INSTANCE;
4825+
public ParameterMarkerStrategy getNativeParameterMarkerStrategy() {
4826+
return null;
48224827
}
48234828

48244829
/**

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

+3-3
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@
7575
import org.hibernate.service.ServiceRegistry;
7676
import org.hibernate.service.spi.ServiceRegistryImplementor;
7777
import org.hibernate.sql.ast.SqlAstTranslatorFactory;
78-
import org.hibernate.sql.ast.spi.JdbcParameterRenderer;
78+
import org.hibernate.sql.ast.spi.ParameterMarkerStrategy;
7979
import org.hibernate.sql.ast.spi.SqlAppender;
8080
import org.hibernate.sql.model.MutationOperation;
8181
import org.hibernate.sql.model.internal.OptionalTableUpdate;
@@ -193,8 +193,8 @@ public Integer resolveSqlTypeCode(String typeName, String baseTypeName, TypeConf
193193
}
194194

195195
@Override
196-
public JdbcParameterRenderer getNativeParameterRenderer() {
197-
return wrapped.getNativeParameterRenderer();
196+
public ParameterMarkerStrategy getNativeParameterMarkerStrategy() {
197+
return wrapped.getNativeParameterMarkerStrategy();
198198
}
199199

200200
@Override

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

+6-6
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@
5757
import org.hibernate.sql.ast.SqlAstNodeRenderingMode;
5858
import org.hibernate.sql.ast.SqlAstTranslator;
5959
import org.hibernate.sql.ast.SqlAstTranslatorFactory;
60-
import org.hibernate.sql.ast.spi.JdbcParameterRenderer;
60+
import org.hibernate.sql.ast.spi.ParameterMarkerStrategy;
6161
import org.hibernate.sql.ast.spi.SqlAppender;
6262
import org.hibernate.sql.ast.spi.StandardSqlAstTranslatorFactory;
6363
import org.hibernate.sql.ast.tree.Statement;
@@ -910,18 +910,18 @@ private static MutationOperation withoutMerge(
910910
}
911911

912912
@Override
913-
public JdbcParameterRenderer getNativeParameterRenderer() {
914-
return OrdinalParameterRenderer.INSTANCE;
913+
public ParameterMarkerStrategy getNativeParameterMarkerStrategy() {
914+
return OrdinalParameterMarkerStrategy.INSTANCE;
915915
}
916916

917-
public static class OrdinalParameterRenderer implements JdbcParameterRenderer {
917+
public static class OrdinalParameterMarkerStrategy implements ParameterMarkerStrategy {
918918
/**
919919
* Singleton access
920920
*/
921-
public static final OrdinalParameterRenderer INSTANCE = new OrdinalParameterRenderer();
921+
public static final OrdinalParameterMarkerStrategy INSTANCE = new OrdinalParameterMarkerStrategy();
922922

923923
@Override
924-
public String renderJdbcParameter(int position, JdbcType jdbcType) {
924+
public String createMarker(int position, JdbcType jdbcType) {
925925
return "?" + position;
926926
}
927927
}

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

+6-6
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@
6666
import org.hibernate.service.ServiceRegistry;
6767
import org.hibernate.sql.ast.SqlAstTranslator;
6868
import org.hibernate.sql.ast.SqlAstTranslatorFactory;
69-
import org.hibernate.sql.ast.spi.JdbcParameterRenderer;
69+
import org.hibernate.sql.ast.spi.ParameterMarkerStrategy;
7070
import org.hibernate.sql.ast.spi.SqlAppender;
7171
import org.hibernate.sql.ast.spi.StandardSqlAstTranslatorFactory;
7272
import org.hibernate.sql.ast.tree.Statement;
@@ -145,7 +145,7 @@ public class PostgreSQLDialect extends Dialect {
145145

146146
protected final PostgreSQLDriverKind driverKind;
147147
private final OptionalTableUpdateStrategy optionalTableUpdateStrategy;
148-
private final JdbcParameterRenderer parameterRenderer;
148+
private final ParameterMarkerStrategy parameterRenderer;
149149

150150
public PostgreSQLDialect() {
151151
this( MINIMUM_VERSION );
@@ -166,7 +166,7 @@ public PostgreSQLDialect(DatabaseVersion version, PostgreSQLDriverKind driverKin
166166
this.optionalTableUpdateStrategy = determineOptionalTableUpdateStrategy( version );
167167
this.parameterRenderer = driverKind == PostgreSQLDriverKind.VERT_X
168168
? NativeParameterMarkers.INSTANCE
169-
: super.getNativeParameterRenderer();
169+
: super.getNativeParameterMarkerStrategy();
170170
}
171171

172172
private static OptionalTableUpdateStrategy determineOptionalTableUpdateStrategy(DatabaseVersion version) {
@@ -1433,18 +1433,18 @@ private static MutationOperation withoutMerge(
14331433
}
14341434

14351435
@Override
1436-
public JdbcParameterRenderer getNativeParameterRenderer() {
1436+
public ParameterMarkerStrategy getNativeParameterMarkerStrategy() {
14371437
return parameterRenderer;
14381438
}
14391439

1440-
private static class NativeParameterMarkers implements JdbcParameterRenderer {
1440+
private static class NativeParameterMarkers implements ParameterMarkerStrategy {
14411441
/**
14421442
* Singleton access
14431443
*/
14441444
public static final NativeParameterMarkers INSTANCE = new NativeParameterMarkers();
14451445

14461446
@Override
1447-
public String renderJdbcParameter(int position, JdbcType jdbcType) {
1447+
public String createMarker(int position, JdbcType jdbcType) {
14481448
return "$" + position;
14491449
}
14501450
}

hibernate-core/src/main/java/org/hibernate/persister/entity/AbstractEntityPersister.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -6129,7 +6129,7 @@ protected String[] generateSQLDeleteStrings(Object[] loadedState) {
61296129
delete.addColumnRestriction( propertyColumnNames[k] );
61306130
}
61316131
else {
6132-
delete.addColumnNullnessRestriction( propertyColumnNames[k] );
6132+
delete.addColumnIsNullRestriction( propertyColumnNames[k] );
61336133
}
61346134
}
61356135
}

hibernate-core/src/main/java/org/hibernate/query/sql/internal/NativeNonSelectQueryPlanImpl.java

+1-3
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,7 @@ public int executeUpdate(DomainQueryExecutionContext executionContext) {
5757
}
5858
else {
5959
jdbcParameterBinders = new ArrayList<>( parameterList.size() );
60-
jdbcParameterBindings = new JdbcParameterBindingsImpl( parameterList.size() );
61-
62-
jdbcParameterBindings.registerNativeQueryParameters(
60+
jdbcParameterBindings = new JdbcParameterBindingsImpl(
6361
queryParameterBindings,
6462
parameterList,
6563
jdbcParameterBinders,

hibernate-core/src/main/java/org/hibernate/query/sql/internal/NativeSelectQueryPlanImpl.java

+5-10
Original file line numberDiff line numberDiff line change
@@ -79,9 +79,7 @@ public List<R> performList(DomainQueryExecutionContext executionContext) {
7979
}
8080
else {
8181
jdbcParameterBinders = new ArrayList<>( parameterList.size() );
82-
jdbcParameterBindings = new JdbcParameterBindingsImpl( parameterList.size() );
83-
84-
jdbcParameterBindings.registerNativeQueryParameters(
82+
jdbcParameterBindings = new JdbcParameterBindingsImpl(
8583
queryParameterBindings,
8684
parameterList,
8785
jdbcParameterBinders,
@@ -95,8 +93,7 @@ public List<R> performList(DomainQueryExecutionContext executionContext) {
9593
sql,
9694
jdbcParameterBinders,
9795
resultSetMapping,
98-
affectedTableNames,
99-
Collections.emptySet()
96+
affectedTableNames
10097
);
10198

10299
final SharedSessionContractImplementor session = executionContext.getSession();
@@ -116,6 +113,7 @@ public List<R> performList(DomainQueryExecutionContext executionContext) {
116113
@Override
117114
public ScrollableResultsImplementor<R> performScroll(ScrollMode scrollMode, DomainQueryExecutionContext executionContext) {
118115
if ( executionContext.getQueryOptions().getEffectiveLimit().getMaxRowsJpa() == 0 ) {
116+
//noinspection unchecked
119117
return EmptyScrollableResults.INSTANCE;
120118
}
121119
final List<JdbcParameterBinder> jdbcParameterBinders;
@@ -128,9 +126,7 @@ public ScrollableResultsImplementor<R> performScroll(ScrollMode scrollMode, Doma
128126
}
129127
else {
130128
jdbcParameterBinders = new ArrayList<>( parameterList.size() );
131-
jdbcParameterBindings = new JdbcParameterBindingsImpl( parameterList.size() );
132-
133-
jdbcParameterBindings.registerNativeQueryParameters(
129+
jdbcParameterBindings = new JdbcParameterBindingsImpl(
134130
queryParameterBindings,
135131
parameterList,
136132
jdbcParameterBinders,
@@ -142,8 +138,7 @@ public ScrollableResultsImplementor<R> performScroll(ScrollMode scrollMode, Doma
142138
sql,
143139
jdbcParameterBinders,
144140
resultSetMapping,
145-
affectedTableNames,
146-
Collections.emptySet()
141+
affectedTableNames
147142
);
148143

149144
return executionContext.getSession().getJdbcServices().getJdbcSelectExecutor().scroll(

hibernate-core/src/main/java/org/hibernate/service/StandardServiceInitiators.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838
import org.hibernate.resource.beans.spi.ManagedBeanRegistryInitiator;
3939
import org.hibernate.resource.transaction.internal.TransactionCoordinatorBuilderInitiator;
4040
import org.hibernate.service.internal.SessionFactoryServiceRegistryFactoryInitiator;
41-
import org.hibernate.sql.ast.internal.JdbcParameterRendererInitiator;
41+
import org.hibernate.sql.ast.internal.ParameterMarkerStrategyInitiator;
4242
import org.hibernate.sql.results.jdbc.internal.JdbcValuesMappingProducerProviderInitiator;
4343
import org.hibernate.tool.schema.internal.SchemaManagementToolInitiator;
4444
import org.hibernate.tool.schema.internal.script.SqlScriptExtractorInitiator;
@@ -152,8 +152,8 @@ private static List<StandardServiceInitiator<?>> buildStandardServiceInitiatorLi
152152
// SqmMultiTableMutationStrategyProvider
153153
serviceInitiators.add( SqmMultiTableMutationStrategyProviderInitiator.INSTANCE );
154154

155-
// JdbcParameterRenderer
156-
serviceInitiators.add( JdbcParameterRendererInitiator.INSTANCE );
155+
// ParameterMarkerStrategy
156+
serviceInitiators.add( ParameterMarkerStrategyInitiator.INSTANCE );
157157

158158
serviceInitiators.trimToSize();
159159

hibernate-core/src/main/java/org/hibernate/sql/ComparisonRestriction.java

+20-4
Original file line numberDiff line numberDiff line change
@@ -16,18 +16,18 @@
1616
@Internal
1717
public class ComparisonRestriction implements Restriction {
1818
private final String lhs;
19-
private final String operator;
19+
private final Operator operator;
2020
private final String rhs;
2121

2222
public ComparisonRestriction(String lhs) {
2323
this( lhs, "?" );
2424
}
2525

2626
public ComparisonRestriction(String lhs, String rhs) {
27-
this( lhs, "=", rhs );
27+
this( lhs, Operator.EQ, rhs );
2828
}
2929

30-
public ComparisonRestriction(String lhs, String operator, String rhs) {
30+
public ComparisonRestriction(String lhs, Operator operator, String rhs) {
3131
this.lhs = lhs;
3232
this.operator = operator;
3333
this.rhs = rhs;
@@ -36,7 +36,7 @@ public ComparisonRestriction(String lhs, String operator, String rhs) {
3636
@Override
3737
public void render(StringBuilder sqlBuffer, RestrictionRenderingContext context) {
3838
sqlBuffer.append( lhs );
39-
sqlBuffer.append( operator );
39+
sqlBuffer.append( operator.getSqlText() );
4040

4141
if ( "?".equals( rhs ) ) {
4242
sqlBuffer.append( context.makeParameterMarker() );
@@ -45,4 +45,20 @@ public void render(StringBuilder sqlBuffer, RestrictionRenderingContext context)
4545
sqlBuffer.append( rhs );
4646
}
4747
}
48+
49+
public enum Operator {
50+
EQ( "=" ),
51+
NE( "<>" )
52+
;
53+
54+
private final String sqlText;
55+
56+
Operator(String sqlText) {
57+
this.sqlText = sqlText;
58+
}
59+
60+
public String getSqlText() {
61+
return sqlText;
62+
}
63+
}
4864
}

0 commit comments

Comments
 (0)