Skip to content

Commit 8865cb5

Browse files
committed
Adapt to new internal contracts for parameter rendering
1 parent e8fdf1e commit 8865cb5

File tree

3 files changed

+49
-20
lines changed

3 files changed

+49
-20
lines changed

hibernate-reactive-core/src/main/java/org/hibernate/reactive/persister/entity/impl/ReactiveAbstractEntityPersister.java

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@
2929
import org.hibernate.bytecode.enhance.spi.interceptor.LazyAttributeLoadingInterceptor;
3030
import org.hibernate.bytecode.spi.BytecodeEnhancementMetadata;
3131
import org.hibernate.collection.spi.PersistentCollection;
32-
import org.hibernate.dialect.Dialect;
3332
import org.hibernate.engine.internal.ManagedTypeHelper;
3433
import org.hibernate.engine.spi.EntityEntry;
3534
import org.hibernate.engine.spi.EntityKey;
@@ -125,14 +124,13 @@ boolean check(
125124

126125
default String generateSelectLockString(LockOptions lockOptions) {
127126
final SessionFactoryImplementor factory = getFactory();
128-
Dialect dialect = factory.getJdbcServices().getDialect();
129-
final SimpleSelect select = new SimpleSelect(dialect)
127+
final SimpleSelect select = new SimpleSelect( factory )
130128
.setLockOptions( lockOptions )
131129
.setTableName( getRootTableName() )
132130
.addColumn( getRootTableIdentifierColumnNames()[0] )
133-
.addCondition( getRootTableIdentifierColumnNames(), "=?" );
131+
.addRestriction( getRootTableIdentifierColumnNames() );
134132
if ( isVersioned() ) {
135-
select.addCondition( getVersionColumnName(), "=?" );
133+
select.addRestriction( getVersionColumnName() );
136134
}
137135
if ( factory.getSessionFactoryOptions().isCommentsEnabled() ) {
138136
select.setComment( lockOptions.getLockMode() + " lock " + getEntityName() );
@@ -142,12 +140,11 @@ default String generateSelectLockString(LockOptions lockOptions) {
142140

143141
default String generateUpdateLockString(LockOptions lockOptions) {
144142
final SessionFactoryImplementor factory = getFactory();
145-
Dialect dialect = factory.getJdbcServices().getDialect();
146-
final Update update = new Update(dialect);
143+
final Update update = new Update( factory );
147144
update.setTableName( getRootTableName() );
148-
update.addPrimaryKeyColumns( getRootTableIdentifierColumnNames() );
149-
update.setVersionColumnName( getVersionColumnName() );
150-
update.addColumn( getVersionColumnName() );
145+
update.addAssignment( getVersionColumnName() );
146+
update.addRestriction( getRootTableIdentifierColumnNames() );
147+
update.addRestriction( getVersionColumnName() );
151148
if ( factory.getSessionFactoryOptions().isCommentsEnabled() ) {
152149
update.setComment( lockOptions.getLockMode() + " lock " + getEntityName() );
153150
}

hibernate-reactive-core/src/main/java/org/hibernate/reactive/persister/entity/impl/ReactiveIdentityGenerator.java

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import org.hibernate.dialect.Dialect;
1515
import org.hibernate.dialect.PostgreSQLDialect;
1616
import org.hibernate.dialect.SQLServerDialect;
17+
import org.hibernate.engine.spi.SessionFactoryImplementor;
1718
import org.hibernate.id.IdentityGenerator;
1819
import org.hibernate.id.PostInsertIdentityPersister;
1920
import org.hibernate.id.insert.IdentifierGeneratingInsert;
@@ -46,11 +47,13 @@ public static class ReactiveInsertAndSelectDelegate extends InsertReturningDeleg
4647

4748
private final PostInsertIdentityPersister persister;
4849
private final Dialect dialect;
50+
private final SessionFactoryImplementor factory;
4951

5052
public ReactiveInsertAndSelectDelegate(PostInsertIdentityPersister persister, Dialect dialect) {
5153
super( persister, dialect );
5254
this.persister = persister;
5355
this.dialect = dialect;
56+
this.factory = persister.getFactory();
5457
}
5558

5659
@Override
@@ -62,13 +65,13 @@ public IdentifierGeneratingInsert prepareIdentifierGeneratingInsert(SqlStringGen
6265

6366
private IdentifierGeneratingInsert createInsert(SqlStringGenerationContext context) {
6467
if ( dialect instanceof PostgreSQLDialect || dialect instanceof CockroachDialect ) {
65-
return new PostgresIdentifierGeneratingInsert( dialect );
68+
return new PostgresIdentifierGeneratingInsert( factory );
6669
}
6770
if ( dialect instanceof SQLServerDialect ) {
68-
return new SqlServerIdentifierGeneratingInsert( dialect );
71+
return new SqlServerIdentifierGeneratingInsert( factory );
6972
}
7073
if ( dialect instanceof DB2Dialect ) {
71-
return new Db2IdentifierGeneratingInsert( dialect );
74+
return new Db2IdentifierGeneratingInsert( factory );
7275
}
7376
return super.prepareIdentifierGeneratingInsert( context );
7477
}
@@ -78,8 +81,8 @@ public static class Db2IdentifierGeneratingInsert extends IdentifierGeneratingIn
7881

7982
private String identityColumnName;
8083

81-
public Db2IdentifierGeneratingInsert(Dialect dialect) {
82-
super( dialect );
84+
public Db2IdentifierGeneratingInsert(SessionFactoryImplementor sessionFactory) {
85+
super( sessionFactory );
8386
}
8487

8588
@Override
@@ -101,8 +104,8 @@ public static class PostgresIdentifierGeneratingInsert extends IdentifierGenerat
101104

102105
private String identityColumnName;
103106

104-
public PostgresIdentifierGeneratingInsert(Dialect dialect) {
105-
super( dialect );
107+
public PostgresIdentifierGeneratingInsert(SessionFactoryImplementor sessionFactory) {
108+
super( sessionFactory );
106109
}
107110

108111
@Override
@@ -120,8 +123,8 @@ public String toStatementString() {
120123
public static class SqlServerIdentifierGeneratingInsert extends IdentifierGeneratingInsert {
121124
private String identityColumnName;
122125

123-
public SqlServerIdentifierGeneratingInsert(Dialect dialect) {
124-
super( dialect );
126+
public SqlServerIdentifierGeneratingInsert(SessionFactoryImplementor sessionFactory) {
127+
super( sessionFactory );
125128
}
126129

127130
@Override

hibernate-reactive-core/src/main/java/org/hibernate/reactive/provider/service/NativeParametersRendering.java

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,20 +5,29 @@
55
*/
66
package org.hibernate.reactive.provider.service;
77

8+
import java.lang.invoke.MethodHandles;
89
import java.util.Map;
910

1011
import org.hibernate.boot.registry.StandardServiceInitiator;
1112
import org.hibernate.dialect.Dialect;
13+
import org.hibernate.dialect.DialectDelegateWrapper;
14+
import org.hibernate.dialect.PostgreSQLDialect;
1215
import org.hibernate.engine.jdbc.spi.JdbcServices;
16+
import org.hibernate.reactive.logging.impl.Log;
17+
import org.hibernate.reactive.logging.impl.LoggerFactory;
1318
import org.hibernate.service.spi.ServiceRegistryImplementor;
1419
import org.hibernate.sql.ast.spi.JdbcParameterRenderer;
20+
import org.hibernate.type.descriptor.jdbc.JdbcType;
1521

1622
/**
1723
* Replaces the JdbcParameterRendererInitiator so to not require
1824
* users to set AvailableSettings.DIALECT_NATIVE_PARAM_MARKERS : this
1925
* gets enforces as the Vert.x SQL clients require it.
2026
*/
2127
public class NativeParametersRendering implements StandardServiceInitiator<JdbcParameterRenderer> {
28+
29+
private static final Log LOG = LoggerFactory.make( Log.class, MethodHandles.lookup() );
30+
2231
/**
2332
* Singleton access
2433
*/
@@ -27,12 +36,32 @@ public class NativeParametersRendering implements StandardServiceInitiator<JdbcP
2736
@Override
2837
public JdbcParameterRenderer initiateService(Map<String, Object> configurationValues, ServiceRegistryImplementor registry) {
2938
final Dialect dialect = registry.getService( JdbcServices.class ).getDialect();
30-
return dialect.getNativeParameterRenderer();
39+
final Dialect realDialect = DialectDelegateWrapper.extractRealDialect( dialect );
40+
final JdbcParameterRenderer renderer = recommendRendered( realDialect );
41+
LOG.debug( "Initializing service JdbcParameterRenderer with implementation: " + renderer.getClass() );
42+
return renderer;
43+
}
44+
45+
private JdbcParameterRenderer recommendRendered(Dialect realDialect) {
46+
if ( realDialect instanceof PostgreSQLDialect ) {
47+
return new PostgreSQLNativeParameterMarkers();
48+
}
49+
//TBD : Implementations for other DBs
50+
else {
51+
return realDialect.getNativeParameterRenderer();
52+
}
3153
}
3254

3355
@Override
3456
public Class<JdbcParameterRenderer> getServiceInitiated() {
3557
return JdbcParameterRenderer.class;
3658
}
3759

60+
private static class PostgreSQLNativeParameterMarkers implements JdbcParameterRenderer {
61+
@Override
62+
public String renderJdbcParameter(int position, JdbcType jdbcType) {
63+
return "$" + position;
64+
}
65+
}
66+
3867
}

0 commit comments

Comments
 (0)