Skip to content

Commit e28e36f

Browse files
committed
Temp quick fix for CockroachDB
1 parent 6e2269d commit e28e36f

File tree

1 file changed

+15
-4
lines changed

1 file changed

+15
-4
lines changed

hibernate-reactive-core/src/main/java/org/hibernate/reactive/query/sqm/mutation/internal/temptable/ReactiveTemporaryTableHelper.java

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
import java.util.concurrent.CompletionStage;
1010
import java.util.function.Function;
1111

12+
import org.hibernate.dialect.CockroachDialect;
13+
import org.hibernate.dialect.Dialect;
1214
import org.hibernate.dialect.temptable.TemporaryTable;
1315
import org.hibernate.dialect.temptable.TemporaryTableExporter;
1416
import org.hibernate.engine.jdbc.internal.FormatStyle;
@@ -20,7 +22,6 @@
2022
import org.hibernate.reactive.logging.impl.Log;
2123
import org.hibernate.reactive.logging.impl.LoggerFactory;
2224
import org.hibernate.reactive.pool.ReactiveConnection;
23-
import org.hibernate.reactive.pool.impl.Parameters;
2425
import org.hibernate.reactive.session.ReactiveConnectionSupplier;
2526
import org.hibernate.reactive.util.impl.CompletionStages;
2627

@@ -144,9 +145,8 @@ public static CompletionStage<Void> cleanTemporaryTableRows(
144145
TemporaryTableExporter exporter,
145146
Function<SharedSessionContractImplementor, String> sessionUidAccess,
146147
SharedSessionContractImplementor session) {
147-
// Workaround for https://hibernate.atlassian.net/browse/HHH-16486
148-
final String sql = Parameters.instance( temporaryTable.getDialect() )
149-
.process( exporter.getSqlTruncateCommand( temporaryTable, sessionUidAccess, session ) );
148+
149+
final String sql = fixforCockroach( temporaryTable.getDialect(), exporter.getSqlTruncateCommand( temporaryTable, sessionUidAccess, session ) );
150150

151151
Object[] params = PreparedStatementAdaptor.bind( ps -> {
152152
if ( temporaryTable.getSessionUidColumn() != null ) {
@@ -160,6 +160,17 @@ public static CompletionStage<Void> cleanTemporaryTableRows(
160160
.thenCompose( CompletionStages::voidFuture );
161161
}
162162

163+
// A hack so that we can release: the issue is that the query generated by ORM uses $0 as placeholder, but the
164+
// driver only accept placeholders starting from $1
165+
private static String fixforCockroach(Dialect dialect, String sqlTruncateCommand) {
166+
if ( sqlTruncateCommand.endsWith( "$0" ) ) {
167+
if ( dialect instanceof CockroachDialect ) {
168+
return sqlTruncateCommand.replaceAll( "\\$0$", "\\$1" );
169+
}
170+
}
171+
return sqlTruncateCommand;
172+
}
173+
163174
private static ReactiveConnection reactiveConnection(SharedSessionContractImplementor session) {
164175
return ( (ReactiveConnectionSupplier) session ).getReactiveConnection();
165176
}

0 commit comments

Comments
 (0)