Skip to content

Commit ee08a20

Browse files
SanneDavideD
authored andcommitted
Leverage HHH-16226 to avoid needing to customize SqlAstTranslatorFactory factories
1 parent 195ce77 commit ee08a20

File tree

4 files changed

+95
-2
lines changed

4 files changed

+95
-2
lines changed

hibernate-reactive-core/src/main/java/org/hibernate/reactive/provider/impl/ReactiveServiceInitiators.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import org.hibernate.reactive.provider.service.ReactivePersisterClassResolverInitiator;
3737
import org.hibernate.reactive.provider.service.ReactiveSchemaManagementToolInitiator;
3838
import org.hibernate.reactive.provider.service.ReactiveSessionFactoryBuilderInitiator;
39+
import org.hibernate.reactive.provider.service.ReactiveValuesMappingProducerProviderInitiator;
3940
import org.hibernate.reactive.vertx.impl.VertxInstanceInitiator;
4041
import org.hibernate.resource.beans.spi.ManagedBeanRegistryInitiator;
4142
import org.hibernate.resource.transaction.internal.TransactionCoordinatorBuilderInitiator;
@@ -123,6 +124,8 @@ private static List<StandardServiceInitiator<?>> buildInitialServiceInitiatorLis
123124
serviceInitiators.add( ManagedBeanRegistryInitiator.INSTANCE );
124125
serviceInitiators.add( EntityCopyObserverFactoryInitiator.INSTANCE );
125126

127+
serviceInitiators.add( ReactiveValuesMappingProducerProviderInitiator.INSTANCE );
128+
126129
serviceInitiators.trimToSize();
127130

128131
return unmodifiableList( serviceInitiators );
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
/* Hibernate, Relational Persistence for Idiomatic Java
2+
*
3+
* SPDX-License-Identifier: Apache-2.0
4+
* Copyright: Red Hat Inc. and Hibernate Authors
5+
*/
6+
package org.hibernate.reactive.provider.service;
7+
8+
import org.hibernate.engine.spi.SessionFactoryImplementor;
9+
import org.hibernate.query.results.ResultSetMapping;
10+
import org.hibernate.query.results.ResultSetMappingImpl;
11+
import org.hibernate.reactive.sql.results.ReactiveResultSetMapping;
12+
import org.hibernate.reactive.sql.results.internal.ReactiveStandardValuesMappingProducer;
13+
import org.hibernate.sql.ast.tree.select.SelectStatement;
14+
import org.hibernate.sql.results.jdbc.spi.JdbcValuesMappingProducer;
15+
import org.hibernate.sql.results.jdbc.spi.JdbcValuesMappingProducerProvider;
16+
17+
public class ReactiveValuesMappingProducerProvider implements JdbcValuesMappingProducerProvider {
18+
/**
19+
* Singleton access
20+
*/
21+
public static final ReactiveValuesMappingProducerProvider INSTANCE = new ReactiveValuesMappingProducerProvider();
22+
23+
@Override
24+
public JdbcValuesMappingProducer buildMappingProducer(
25+
SelectStatement sqlAst,
26+
SessionFactoryImplementor sessionFactory) {
27+
return new ReactiveStandardValuesMappingProducer(
28+
sqlAst.getQuerySpec().getSelectClause().getSqlSelections(),
29+
sqlAst.getDomainResultDescriptors()
30+
);
31+
}
32+
33+
@Override
34+
public ResultSetMapping buildResultSetMapping(
35+
String name,
36+
boolean isDynamic,
37+
SessionFactoryImplementor sessionFactory) {
38+
return new ReactiveResultSetMapping( new ResultSetMappingImpl( name, isDynamic ) );
39+
}
40+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
/* Hibernate, Relational Persistence for Idiomatic Java
2+
*
3+
* SPDX-License-Identifier: Apache-2.0
4+
* Copyright: Red Hat Inc. and Hibernate Authors
5+
*/
6+
package org.hibernate.reactive.provider.service;
7+
8+
import java.util.Map;
9+
10+
import org.hibernate.boot.registry.StandardServiceInitiator;
11+
import org.hibernate.service.spi.ServiceRegistryImplementor;
12+
import org.hibernate.sql.results.jdbc.spi.JdbcValuesMappingProducerProvider;
13+
14+
public class ReactiveValuesMappingProducerProviderInitiator implements StandardServiceInitiator<JdbcValuesMappingProducerProvider> {
15+
/**
16+
* Singleton access
17+
*/
18+
public static final ReactiveValuesMappingProducerProviderInitiator INSTANCE = new ReactiveValuesMappingProducerProviderInitiator();
19+
20+
@Override
21+
public JdbcValuesMappingProducerProvider initiateService(
22+
Map<String, Object> configurationValues,
23+
ServiceRegistryImplementor registry) {
24+
return ReactiveValuesMappingProducerProvider.INSTANCE;
25+
}
26+
27+
@Override
28+
public Class<JdbcValuesMappingProducerProvider> getServiceInitiated() {
29+
return JdbcValuesMappingProducerProvider.class;
30+
}
31+
32+
}

hibernate-reactive-core/src/main/java/org/hibernate/reactive/sql/results/ReactiveResultSetMapping.java

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
package org.hibernate.reactive.sql.results;
77

88
import java.lang.invoke.MethodHandles;
9+
import java.util.List;
10+
import java.util.Objects;
911
import java.util.Set;
1012
import java.util.concurrent.CompletionStage;
1113
import java.util.function.BiConsumer;
@@ -32,7 +34,8 @@ public class ReactiveResultSetMapping implements ResultSetMapping, ReactiveValue
3234
private final ResultSetMapping delegate;
3335

3436
public ReactiveResultSetMapping(ResultSetMapping resultSetMapping) {
35-
this.delegate = resultSetMapping;
37+
this.delegate = Objects.requireNonNull( resultSetMapping );
38+
assert !(resultSetMapping instanceof ReactiveResultSetMapping) : "double wrapping detected!";
3639
}
3740

3841
@Override
@@ -42,7 +45,7 @@ public JdbcValuesMapping resolve(JdbcValuesMetadata jdbcResultsMetadata, Session
4245

4346
@Override
4447
public void addAffectedTableNames(Set<String> affectedTableNames, SessionFactoryImplementor sessionFactory) {
45-
48+
delegate.addAffectedTableNames( affectedTableNames, sessionFactory );
4649
}
4750

4851
public CompletionStage<JdbcValuesMapping> reactiveResolve(JdbcValuesMetadata jdbcResultsMetadata, SessionFactoryImplementor sessionFactory) {
@@ -51,11 +54,26 @@ public CompletionStage<JdbcValuesMapping> reactiveResolve(JdbcValuesMetadata jdb
5154
.thenApply( columnCount -> delegate.resolve( jdbcResultsMetadata, sessionFactory ) );
5255
}
5356

57+
@Override
58+
public String getMappingIdentifier() {
59+
return delegate.getMappingIdentifier();
60+
}
61+
62+
@Override
63+
public boolean isDynamic() {
64+
return delegate.isDynamic();
65+
}
66+
5467
@Override
5568
public int getNumberOfResultBuilders() {
5669
return delegate.getNumberOfResultBuilders();
5770
}
5871

72+
@Override
73+
public List<ResultBuilder> getResultBuilders() {
74+
return delegate.getResultBuilders();
75+
}
76+
5977
@Override
6078
public void visitResultBuilders(BiConsumer<Integer, ResultBuilder> resultBuilderConsumer) {
6179
delegate.visitResultBuilders( resultBuilderConsumer );

0 commit comments

Comments
 (0)