55package org .hibernate .dialect .lock .internal ;
66
77import jakarta .persistence .Timeout ;
8- import org .hibernate .Timeouts ;
98import org .hibernate .dialect .DatabaseVersion ;
109import org .hibernate .dialect .lock .spi .ConnectionLockTimeoutStrategy ;
1110import org .hibernate .dialect .lock .spi .LockTimeoutType ;
1211import org .hibernate .dialect .lock .spi .LockingSupport ;
1312import org .hibernate .dialect .lock .spi .OuterJoinLockingType ;
1413
14+ import static org .hibernate .Timeouts .NO_WAIT_MILLI ;
15+ import static org .hibernate .Timeouts .SKIP_LOCKED_MILLI ;
16+ import static org .hibernate .Timeouts .WAIT_FOREVER_MILLI ;
1517import static org .hibernate .dialect .lock .internal .MySQLLockingSupport .MYSQL_CONN_LOCK_TIMEOUT_STRATEGY ;
18+ import static org .hibernate .dialect .lock .spi .LockTimeoutType .NONE ;
19+ import static org .hibernate .dialect .lock .spi .LockTimeoutType .QUERY ;
1620
1721/**
1822 * LockingSupport for MariaDBDialect
1923 *
2024 * @author Steve Ebersole
2125 */
2226public class MariaDBLockingSupport implements LockingSupport , LockingSupport .Metadata {
23- private final boolean supportsSkipLocked ;
24- private final boolean supportsNoWait ;
25- private final boolean supportsWait ;
27+ private final LockTimeoutType skipLockedType ;
28+ private final LockTimeoutType noWaitType ;
29+ private final LockTimeoutType waitType ;
2630
2731 public MariaDBLockingSupport (boolean supportsSkipLocked , boolean supportsNoWait , boolean supportsWait ) {
28- this .supportsSkipLocked = supportsSkipLocked ;
29- this .supportsNoWait = supportsNoWait ;
30- this .supportsWait = supportsWait ;
32+ this .skipLockedType = supportsSkipLocked ? QUERY : NONE ;
33+ this .noWaitType = supportsNoWait ? QUERY : NONE ;
34+ // Real lock timeouts need to be applied on the Connection
35+ // todo (db-locking) : integrate connection-based lock timeouts. for now report NONE
36+ //this.waitType = supportsWait ? CONNECTION : NONE;
37+ this .waitType = NONE ;
3138 }
3239
3340 public MariaDBLockingSupport (boolean supportsSkipLocked , boolean supportsWait ) {
@@ -48,11 +55,12 @@ public Metadata getMetadata() {
4855
4956 @ Override
5057 public LockTimeoutType getLockTimeoutType (Timeout timeout ) {
51- // MariaDB supports wait and no-wait, and skip-locked after 10.6
52- if ( timeout .milliseconds () == Timeouts .SKIP_LOCKED_MILLI && !supportsSkipLocked ) {
53- return LockTimeoutType .NONE ;
54- }
55- return LockTimeoutType .QUERY ;
58+ return switch ( timeout .milliseconds () ) {
59+ case NO_WAIT_MILLI -> noWaitType ;
60+ case SKIP_LOCKED_MILLI -> skipLockedType ;
61+ case WAIT_FOREVER_MILLI -> NONE ;
62+ default -> waitType ;
63+ };
5664 }
5765
5866 @ Override
0 commit comments