|
6 | 6 | */
|
7 | 7 | package org.hibernate.dialect;
|
8 | 8 |
|
| 9 | +import org.hibernate.LockOptions; |
9 | 10 | import org.hibernate.boot.model.FunctionContributions;
|
10 | 11 | import org.hibernate.dialect.function.CommonFunctionFactory;
|
11 | 12 | import org.hibernate.dialect.identity.DB2IdentityColumnSupport;
|
@@ -41,6 +42,9 @@ public class DB2iDialect extends DB2Dialect {
|
41 | 42 | private final static DatabaseVersion MINIMUM_VERSION = DatabaseVersion.make( 7, 1 );
|
42 | 43 | final static DatabaseVersion DB2_LUW_VERSION = DB2Dialect.MINIMUM_VERSION;
|
43 | 44 |
|
| 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 | + |
44 | 48 | public DB2iDialect(DialectResolutionInfo info) {
|
45 | 49 | this( info.makeCopyOrDefault( MINIMUM_VERSION ) );
|
46 | 50 | registerKeywords( info );
|
@@ -124,6 +128,7 @@ public String getQuerySequencesString() {
|
124 | 128 | }
|
125 | 129 | }
|
126 | 130 |
|
| 131 | + |
127 | 132 | @Override
|
128 | 133 | public LimitHandler getLimitHandler() {
|
129 | 134 | return getVersion().isSameOrAfter(7, 3)
|
@@ -171,4 +176,35 @@ public int rowIdSqlType() {
|
171 | 176 | public String getRowIdColumnString(String rowId) {
|
172 | 177 | return rowId( rowId ) + " rowid not null generated always";
|
173 | 178 | }
|
| 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 | + } |
174 | 210 | }
|
0 commit comments