Skip to content

Commit 84bed78

Browse files
committed
Fix lock handling for HANA
1 parent b3f7dbd commit 84bed78

File tree

2 files changed

+20
-86
lines changed

2 files changed

+20
-86
lines changed

hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/HANALegacyDialect.java

Lines changed: 10 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1002,30 +1002,9 @@ public String getReadLockString(String aliases, Timeout timeout) {
10021002
return getWriteLockString( aliases, timeout );
10031003
}
10041004

1005-
@Override
1006-
public String getWriteLockString(Timeout timeout) {
1007-
if ( Timeouts.isRealTimeout( timeout ) ) {
1008-
return getForUpdateString() + " wait " + getTimeoutInSeconds( timeout.milliseconds() );
1009-
}
1010-
else if ( timeout.milliseconds() == Timeouts.NO_WAIT_MILLI ) {
1011-
return getForUpdateNowaitString();
1012-
}
1013-
else {
1014-
return getForUpdateString();
1015-
}
1016-
}
1017-
10181005
@Override
10191006
public String getWriteLockString(String aliases, Timeout timeout) {
1020-
if ( Timeouts.isRealTimeout( timeout ) ) {
1021-
return getForUpdateString( aliases ) + " wait " + getTimeoutInSeconds( timeout.milliseconds() );
1022-
}
1023-
else if ( timeout.milliseconds() == Timeouts.NO_WAIT_MILLI ) {
1024-
return getForUpdateNowaitString( aliases );
1025-
}
1026-
else {
1027-
return getForUpdateString( aliases );
1028-
}
1007+
return withTimeout( getForUpdateString( aliases ), timeout.milliseconds() );
10291008
}
10301009

10311010
@Override
@@ -1039,29 +1018,17 @@ public String getReadLockString(String aliases, int timeout) {
10391018
}
10401019

10411020
@Override
1042-
public String getWriteLockString(int timeout) {
1043-
if ( Timeouts.isRealTimeout( timeout ) ) {
1044-
return getForUpdateString() + " wait " + Timeouts.getTimeoutInSeconds( timeout );
1045-
}
1046-
else if ( timeout == Timeouts.NO_WAIT_MILLI ) {
1047-
return getForUpdateNowaitString();
1048-
}
1049-
else {
1050-
return getForUpdateString();
1051-
}
1021+
public String getWriteLockString(String aliases, int timeout) {
1022+
return withTimeout( getForUpdateString( aliases ), timeout );
10521023
}
10531024

1054-
@Override
1055-
public String getWriteLockString(String aliases, int timeout) {
1056-
if ( timeout > 0 ) {
1057-
return getForUpdateString( aliases ) + " wait " + getTimeoutInSeconds( timeout );
1058-
}
1059-
else if ( timeout == 0 ) {
1060-
return getForUpdateNowaitString( aliases );
1061-
}
1062-
else {
1063-
return getForUpdateString( aliases );
1064-
}
1025+
private String withTimeout(String lockString, int timeout) {
1026+
return switch (timeout) {
1027+
case Timeouts.NO_WAIT_MILLI -> supportsNoWait() ? lockString + " nowait" : lockString;
1028+
case Timeouts.SKIP_LOCKED_MILLI -> supportsSkipLocked() ? lockString + SQL_IGNORE_LOCKED : lockString;
1029+
case Timeouts.WAIT_FOREVER_MILLI -> lockString;
1030+
default -> supportsWait() ? lockString + " wait " + getTimeoutInSeconds( timeout ) : lockString;
1031+
};
10651032
}
10661033

10671034
@Override

hibernate-core/src/main/java/org/hibernate/dialect/HANADialect.java

Lines changed: 10 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1007,30 +1007,9 @@ public String getReadLockString(String aliases, Timeout timeout) {
10071007
return getWriteLockString( aliases, timeout );
10081008
}
10091009

1010-
@Override
1011-
public String getWriteLockString(Timeout timeout) {
1012-
if ( Timeouts.isRealTimeout( timeout ) ) {
1013-
return getForUpdateString() + " wait " + Timeouts.getTimeoutInSeconds( timeout.milliseconds() );
1014-
}
1015-
else if ( timeout.milliseconds() == Timeouts.NO_WAIT_MILLI ) {
1016-
return getForUpdateNowaitString();
1017-
}
1018-
else {
1019-
return getForUpdateString();
1020-
}
1021-
}
1022-
10231010
@Override
10241011
public String getWriteLockString(String aliases, Timeout timeout) {
1025-
if ( Timeouts.isRealTimeout( timeout ) ) {
1026-
return getForUpdateString( aliases ) + " wait " + getTimeoutInSeconds( timeout.milliseconds() );
1027-
}
1028-
else if ( timeout.milliseconds() == Timeouts.NO_WAIT_MILLI ) {
1029-
return getForUpdateNowaitString( aliases );
1030-
}
1031-
else {
1032-
return getForUpdateString( aliases );
1033-
}
1012+
return withTimeout( getForUpdateString( aliases ), timeout.milliseconds() );
10341013
}
10351014

10361015
@Override
@@ -1044,29 +1023,17 @@ public String getReadLockString(String aliases, int timeout) {
10441023
}
10451024

10461025
@Override
1047-
public String getWriteLockString(int timeout) {
1048-
if ( timeout > 0 ) {
1049-
return getForUpdateString() + " wait " + getTimeoutInSeconds( timeout );
1050-
}
1051-
else if ( timeout == Timeouts.NO_WAIT_MILLI ) {
1052-
return getForUpdateNowaitString();
1053-
}
1054-
else {
1055-
return getForUpdateString();
1056-
}
1026+
public String getWriteLockString(String aliases, int timeout) {
1027+
return withTimeout( getForUpdateString( aliases ), timeout );
10571028
}
10581029

1059-
@Override
1060-
public String getWriteLockString(String aliases, int timeout) {
1061-
if ( timeout > 0 ) {
1062-
return getForUpdateString( aliases ) + " wait " + getTimeoutInSeconds( timeout );
1063-
}
1064-
else if ( timeout == 0 ) {
1065-
return getForUpdateNowaitString( aliases );
1066-
}
1067-
else {
1068-
return getForUpdateString( aliases );
1069-
}
1030+
private String withTimeout(String lockString, int timeout) {
1031+
return switch (timeout) {
1032+
case Timeouts.NO_WAIT_MILLI -> supportsNoWait() ? lockString + " nowait" : lockString;
1033+
case Timeouts.SKIP_LOCKED_MILLI -> supportsSkipLocked() ? lockString + SQL_IGNORE_LOCKED : lockString;
1034+
case Timeouts.WAIT_FOREVER_MILLI -> lockString;
1035+
default -> supportsWait() ? lockString + " wait " + getTimeoutInSeconds( timeout ) : lockString;
1036+
};
10701037
}
10711038

10721039
@Override

0 commit comments

Comments
 (0)