Skip to content

Commit 944ff41

Browse files
Alexmbellade
authored andcommitted
HHH-18560: fix for invalid queries executed on DB2i AS/400 machine
1 parent b870214 commit 944ff41

File tree

2 files changed

+41
-0
lines changed

2 files changed

+41
-0
lines changed

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

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
*/
77
package org.hibernate.dialect;
88

9+
import org.hibernate.LockOptions;
910
import org.hibernate.boot.model.FunctionContributions;
1011
import org.hibernate.dialect.function.CommonFunctionFactory;
1112
import org.hibernate.dialect.identity.DB2IdentityColumnSupport;
@@ -41,6 +42,9 @@ public class DB2iDialect extends DB2Dialect {
4142
private final static DatabaseVersion MINIMUM_VERSION = DatabaseVersion.make( 7, 1 );
4243
final static DatabaseVersion DB2_LUW_VERSION = DB2Dialect.MINIMUM_VERSION;
4344

45+
private static final String FOR_UPDATE_SQL = " for update with rs";
46+
private static final String FOR_UPDATE_SKIP_LOCKED_SQL = FOR_UPDATE_SQL + " skip locked data";
47+
4448
public DB2iDialect(DialectResolutionInfo info) {
4549
this( info.makeCopyOrDefault( MINIMUM_VERSION ) );
4650
registerKeywords( info );
@@ -124,6 +128,7 @@ public String getQuerySequencesString() {
124128
}
125129
}
126130

131+
127132
@Override
128133
public LimitHandler getLimitHandler() {
129134
return getVersion().isSameOrAfter(7, 3)
@@ -171,4 +176,35 @@ public int rowIdSqlType() {
171176
public String getRowIdColumnString(String rowId) {
172177
return rowId( rowId ) + " rowid not null generated always";
173178
}
179+
180+
@Override
181+
public String getForUpdateString() {
182+
return FOR_UPDATE_SQL;
183+
}
184+
185+
@Override
186+
public String getForUpdateSkipLockedString() {
187+
return supportsSkipLocked()
188+
? FOR_UPDATE_SKIP_LOCKED_SQL
189+
: FOR_UPDATE_SQL;
190+
}
191+
192+
@Override
193+
public String getForUpdateSkipLockedString(String aliases) {
194+
return getForUpdateSkipLockedString();
195+
}
196+
197+
@Override
198+
public String getWriteLockString(int timeout) {
199+
return timeout == LockOptions.SKIP_LOCKED && supportsSkipLocked()
200+
? FOR_UPDATE_SKIP_LOCKED_SQL
201+
: FOR_UPDATE_SQL;
202+
}
203+
204+
@Override
205+
public String getReadLockString(int timeout) {
206+
return timeout == LockOptions.SKIP_LOCKED && supportsSkipLocked()
207+
? FOR_UPDATE_SKIP_LOCKED_SQL
208+
: FOR_UPDATE_SQL;
209+
}
174210
}

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,4 +60,9 @@ protected void renderComparison(Expression lhs, ComparisonOperator operator, Exp
6060
public DatabaseVersion getDB2Version() {
6161
return DB2_LUW_VERSION;
6262
}
63+
64+
@Override
65+
protected String getForUpdate() {
66+
return " for update with rs";
67+
}
6368
}

0 commit comments

Comments
 (0)