Skip to content

Commit 0601c04

Browse files
committed
HHH-19440 - Deprecate exposing of LockOptions
1 parent 626ecd0 commit 0601c04

24 files changed

+722
-47
lines changed

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

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
import jakarta.persistence.GenerationType;
88
import jakarta.persistence.TemporalType;
9+
import jakarta.persistence.Timeout;
910
import org.checkerframework.checker.nullness.qual.Nullable;
1011
import org.hibernate.LockMode;
1112
import org.hibernate.LockOptions;
@@ -1018,6 +1019,10 @@ public String getForUpdateString(String aliases, LockOptions lockOptions) {
10181019
};
10191020
}
10201021

1022+
private String withTimeout(String lockString, Timeout timeout) {
1023+
return withTimeout( lockString, timeout.milliseconds() );
1024+
}
1025+
10211026
private String withTimeout(String lockString, int timeout) {
10221027
return switch ( timeout ) {
10231028
case Timeouts.NO_WAIT_MILLI -> supportsNoWait() ? lockString + " nowait" : lockString;
@@ -1026,6 +1031,26 @@ private String withTimeout(String lockString, int timeout) {
10261031
};
10271032
}
10281033

1034+
@Override
1035+
public String getWriteLockString(Timeout timeout) {
1036+
return withTimeout( getForUpdateString(), timeout );
1037+
}
1038+
1039+
@Override
1040+
public String getWriteLockString(String aliases, Timeout timeout) {
1041+
return withTimeout( getForUpdateString( aliases ), timeout );
1042+
}
1043+
1044+
@Override
1045+
public String getReadLockString(Timeout timeout) {
1046+
return withTimeout(" for share", timeout );
1047+
}
1048+
1049+
@Override
1050+
public String getReadLockString(String aliases, Timeout timeout) {
1051+
return withTimeout(" for share of " + aliases, timeout );
1052+
}
1053+
10291054
@Override
10301055
public String getWriteLockString(int timeout) {
10311056
return withTimeout( getForUpdateString(), timeout );

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

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
package org.hibernate.community.dialect;
66

77
import jakarta.persistence.TemporalType;
8+
import jakarta.persistence.Timeout;
89
import org.hibernate.Timeouts;
910
import org.hibernate.boot.model.FunctionContributions;
1011
import org.hibernate.boot.model.TypeContributions;
@@ -780,6 +781,20 @@ public String getForUpdateSkipLockedString(String aliases) {
780781
return getForUpdateSkipLockedString();
781782
}
782783

784+
@Override
785+
public String getWriteLockString(Timeout timeout) {
786+
return timeout.milliseconds() == Timeouts.SKIP_LOCKED_MILLI && supportsSkipLocked()
787+
? FOR_UPDATE_SKIP_LOCKED_SQL
788+
: FOR_UPDATE_SQL;
789+
}
790+
791+
@Override
792+
public String getReadLockString(Timeout timeout) {
793+
return timeout.milliseconds() == Timeouts.SKIP_LOCKED_MILLI && supportsSkipLocked()
794+
? FOR_SHARE_SKIP_LOCKED_SQL
795+
: FOR_SHARE_SQL;
796+
}
797+
783798
@Override
784799
public String getWriteLockString(int timeout) {
785800
return timeout == Timeouts.SKIP_LOCKED_MILLI && supportsSkipLocked()

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

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import java.sql.Types;
1010
import java.util.Locale;
1111

12+
import jakarta.persistence.Timeout;
1213
import org.hibernate.boot.model.FunctionContributions;
1314
import org.hibernate.boot.model.TypeContributions;
1415
import org.hibernate.dialect.DB2Dialect;
@@ -577,6 +578,16 @@ public String getForUpdateString() {
577578
return " for update with rs";
578579
}
579580

581+
@Override
582+
public String getWriteLockString(Timeout timeout) {
583+
return " for update with rs";
584+
}
585+
586+
@Override
587+
public String getReadLockString(Timeout timeout) {
588+
return " for read only with rs";
589+
}
590+
580591
@Override
581592
public String getWriteLockString(int timeout) {
582593
return " for update with rs";

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

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import java.sql.SQLException;
99
import java.sql.Types;
1010

11+
import jakarta.persistence.Timeout;
1112
import org.hibernate.boot.model.FunctionContributions;
1213
import org.hibernate.boot.model.TypeContributions;
1314
import org.hibernate.dialect.DB2Dialect;
@@ -593,6 +594,16 @@ public String getForUpdateString() {
593594
return " for update with rs";
594595
}
595596

597+
@Override
598+
public String getWriteLockString(Timeout timeout) {
599+
return " for update with rs";
600+
}
601+
602+
@Override
603+
public String getReadLockString(Timeout timeout) {
604+
return " for read only with rs";
605+
}
606+
596607
@Override
597608
public String getWriteLockString(int timeout) {
598609
return " for update with rs";

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

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
package org.hibernate.community.dialect;
66

77
import jakarta.persistence.TemporalType;
8+
import jakarta.persistence.Timeout;
89
import org.hibernate.LockMode;
910
import org.hibernate.LockOptions;
1011
import org.hibernate.ScrollMode;
@@ -992,6 +993,42 @@ public String getForUpdateNowaitString(String aliases) {
992993
return getForUpdateString( aliases ) + " nowait";
993994
}
994995

996+
@Override
997+
public String getReadLockString(Timeout timeout) {
998+
return getWriteLockString( timeout );
999+
}
1000+
1001+
@Override
1002+
public String getReadLockString(String aliases, Timeout timeout) {
1003+
return getWriteLockString( aliases, timeout );
1004+
}
1005+
1006+
@Override
1007+
public String getWriteLockString(Timeout timeout) {
1008+
if ( Timeouts.isRealTimeout( timeout ) ) {
1009+
return getForUpdateString() + " wait " + getTimeoutInSeconds( timeout.milliseconds() );
1010+
}
1011+
else if ( timeout.milliseconds() == Timeouts.NO_WAIT_MILLI ) {
1012+
return getForUpdateNowaitString();
1013+
}
1014+
else {
1015+
return getForUpdateString();
1016+
}
1017+
}
1018+
1019+
@Override
1020+
public String getWriteLockString(String aliases, Timeout timeout) {
1021+
if ( Timeouts.isRealTimeout( timeout ) ) {
1022+
return getForUpdateString( aliases ) + " wait " + getTimeoutInSeconds( timeout.milliseconds() );
1023+
}
1024+
else if ( timeout.milliseconds() == Timeouts.NO_WAIT_MILLI ) {
1025+
return getForUpdateNowaitString( aliases );
1026+
}
1027+
else {
1028+
return getForUpdateString( aliases );
1029+
}
1030+
}
1031+
9951032
@Override
9961033
public String getReadLockString(int timeout) {
9971034
return getWriteLockString( timeout );

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

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
package org.hibernate.community.dialect;
66

77
import jakarta.persistence.TemporalType;
8+
import jakarta.persistence.Timeout;
89
import org.hibernate.PessimisticLockException;
910
import org.hibernate.Timeouts;
1011
import org.hibernate.boot.model.FunctionContributions;
@@ -1336,6 +1337,36 @@ public static Replacer datetimeFormat(String format) {
13361337
.replace("S", "%f");
13371338
}
13381339

1340+
private String withTimeout(String lockString, Timeout timeout) {
1341+
return withTimeout( lockString, Timeouts.getTimeoutInSeconds( timeout ) );
1342+
}
1343+
1344+
@Override
1345+
public String getWriteLockString(Timeout timeout) {
1346+
return withTimeout( getForUpdateString(), timeout );
1347+
}
1348+
1349+
@Override
1350+
public String getWriteLockString(String aliases, Timeout timeout) {
1351+
return withTimeout( getForUpdateString( aliases ), timeout );
1352+
}
1353+
1354+
@Override
1355+
public String getReadLockString(Timeout timeout) {
1356+
return withTimeout( supportsForShare() ? " for share" : " lock in share mode", timeout );
1357+
}
1358+
1359+
@Override
1360+
public String getReadLockString(String aliases, Timeout timeout) {
1361+
if ( supportsAliasLocks() && supportsForShare() ) {
1362+
return withTimeout( " for share of " + aliases, timeout );
1363+
}
1364+
else {
1365+
// fall back to locking all aliases
1366+
return getReadLockString( timeout );
1367+
}
1368+
}
1369+
13391370
private String withTimeout(String lockString, int timeout) {
13401371
return switch ( timeout ) {
13411372
case Timeouts.NO_WAIT_MILLI -> supportsNoWait() ? lockString + " nowait" : lockString;

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

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import java.util.regex.Matcher;
1717
import java.util.regex.Pattern;
1818

19+
import jakarta.persistence.Timeout;
1920
import org.hibernate.QueryTimeoutException;
2021
import org.hibernate.Timeouts;
2122
import org.hibernate.boot.model.FunctionContributions;
@@ -1410,6 +1411,30 @@ public String getForUpdateSkipLockedString(String aliases) {
14101411
return " for update of " + aliases + " skip locked";
14111412
}
14121413

1414+
private String withTimeout(String lockString, Timeout timeout) {
1415+
return withTimeout( lockString, timeout.milliseconds() );
1416+
}
1417+
1418+
@Override
1419+
public String getWriteLockString(Timeout timeout) {
1420+
return withTimeout( getForUpdateString(), timeout );
1421+
}
1422+
1423+
@Override
1424+
public String getWriteLockString(String aliases, Timeout timeout) {
1425+
return withTimeout( getForUpdateString(aliases), timeout );
1426+
}
1427+
1428+
@Override
1429+
public String getReadLockString(Timeout timeout) {
1430+
return getWriteLockString( timeout );
1431+
}
1432+
1433+
@Override
1434+
public String getReadLockString(String aliases, Timeout timeout) {
1435+
return getWriteLockString( aliases, timeout );
1436+
}
1437+
14131438
private String withTimeout(String lockString, int timeout) {
14141439
return switch ( timeout ) {
14151440
case Timeouts.NO_WAIT_MILLI -> supportsNoWait() ? lockString + " nowait" : lockString;

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

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import java.util.Map;
1818
import java.util.TimeZone;
1919

20+
import jakarta.persistence.Timeout;
2021
import org.checkerframework.checker.nullness.qual.Nullable;
2122
import org.hibernate.Length;
2223
import org.hibernate.LockMode;
@@ -1318,6 +1319,34 @@ public void appendDateTimeLiteral(
13181319
}
13191320
}
13201321

1322+
private String withTimeout(String lockString, Timeout timeout) {
1323+
return switch (timeout.milliseconds()) {
1324+
case Timeouts.NO_WAIT_MILLI -> supportsNoWait() ? lockString + " nowait" : lockString;
1325+
case Timeouts.SKIP_LOCKED_MILLI -> supportsSkipLocked() ? lockString + " skip locked" : lockString;
1326+
default -> lockString;
1327+
};
1328+
}
1329+
1330+
@Override
1331+
public String getWriteLockString(Timeout timeout) {
1332+
return withTimeout( getForUpdateString(), timeout );
1333+
}
1334+
1335+
@Override
1336+
public String getWriteLockString(String aliases, Timeout timeout) {
1337+
return withTimeout( getForUpdateString( aliases ), timeout );
1338+
}
1339+
1340+
@Override
1341+
public String getReadLockString(Timeout timeout) {
1342+
return withTimeout(" for share", timeout );
1343+
}
1344+
1345+
@Override
1346+
public String getReadLockString(String aliases, Timeout timeout) {
1347+
return withTimeout(" for share of " + aliases, timeout );
1348+
}
1349+
13211350
private String withTimeout(String lockString, int timeout) {
13221351
return switch ( timeout ) {
13231352
case Timeouts.NO_WAIT_MILLI -> supportsNoWait() ? lockString + " nowait" : lockString;

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import java.util.Date;
1717
import java.util.TimeZone;
1818

19+
import jakarta.persistence.Timeout;
1920
import org.hibernate.Length;
2021
import org.hibernate.PessimisticLockException;
2122
import org.hibernate.boot.Metadata;
@@ -1224,6 +1225,11 @@ public String getAddPrimaryKeyConstraintString(String constraintName) {
12241225
throw new UnsupportedOperationException( "SingleStore does not support altering primary key." );
12251226
}
12261227

1228+
@Override
1229+
public String getWriteLockString(String aliases, Timeout timeout) {
1230+
return getForUpdateString( aliases );
1231+
}
1232+
12271233
@Override
12281234
public String getWriteLockString(String aliases, int timeout) {
12291235
return getForUpdateString( aliases );

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

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
package org.hibernate.community.dialect;
66

77
import jakarta.persistence.TemporalType;
8+
import jakarta.persistence.Timeout;
89
import org.hibernate.Timeouts;
910
import org.hibernate.community.dialect.sequence.SequenceInformationExtractorTiDBDatabaseImpl;
1011
import org.hibernate.community.dialect.sequence.TiDBSequenceSupport;
@@ -153,6 +154,35 @@ public boolean supportsRowValueConstructorSyntaxInInList() {
153154
return getVersion().isSameOrAfter( 5, 7 );
154155
}
155156

157+
@Override
158+
public String getReadLockString(Timeout timeout) {
159+
if ( timeout.milliseconds() == Timeouts.NO_WAIT_MILLI ) {
160+
return getForUpdateNowaitString();
161+
}
162+
return super.getReadLockString( timeout );
163+
}
164+
165+
@Override
166+
public String getReadLockString(String aliases, Timeout timeout) {
167+
if ( timeout.milliseconds() == Timeouts.NO_WAIT_MILLI ) {
168+
return getForUpdateNowaitString( aliases );
169+
}
170+
return super.getReadLockString( aliases, timeout );
171+
}
172+
173+
@Override
174+
public String getWriteLockString(Timeout timeout) {
175+
if ( timeout.milliseconds() == Timeouts.NO_WAIT_MILLI ) {
176+
return getForUpdateNowaitString();
177+
}
178+
179+
if ( Timeouts.isRealTimeout( timeout ) ) {
180+
return getForUpdateString() + " wait " + Timeouts.getTimeoutInSeconds( timeout );
181+
}
182+
183+
return getForUpdateString();
184+
}
185+
156186
@Override
157187
public String getReadLockString(int timeout) {
158188
if ( timeout == Timeouts.NO_WAIT_MILLI ) {

0 commit comments

Comments
 (0)