5
5
package org .hibernate .dialect .lock .internal ;
6
6
7
7
import jakarta .persistence .Timeout ;
8
- import org .hibernate .Timeouts ;
9
8
import org .hibernate .dialect .DatabaseVersion ;
10
9
import org .hibernate .dialect .lock .spi .ConnectionLockTimeoutStrategy ;
11
10
import org .hibernate .dialect .lock .spi .LockTimeoutType ;
12
11
import org .hibernate .dialect .lock .spi .LockingSupport ;
13
12
import org .hibernate .dialect .lock .spi .OuterJoinLockingType ;
14
13
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 ;
15
17
import 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 ;
16
20
17
21
/**
18
22
* LockingSupport for MariaDBDialect
19
23
*
20
24
* @author Steve Ebersole
21
25
*/
22
26
public 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 ;
26
30
27
31
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 ;
31
38
}
32
39
33
40
public MariaDBLockingSupport (boolean supportsSkipLocked , boolean supportsWait ) {
@@ -48,11 +55,12 @@ public Metadata getMetadata() {
48
55
49
56
@ Override
50
57
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
+ };
56
64
}
57
65
58
66
@ Override
0 commit comments