|
@@ -46,7 +46,7 @@ public class DB2Dialect implements IDialect {
|
|
public String buildPaginationSql(String originalSql, int offset, int limit) {
|
|
public String buildPaginationSql(String originalSql, int offset, int limit) {
|
|
int startOfSelect = originalSql.toLowerCase().indexOf("select");
|
|
int startOfSelect = originalSql.toLowerCase().indexOf("select");
|
|
StringBuilder pagingSelect = new StringBuilder(originalSql.length() + 100)
|
|
StringBuilder pagingSelect = new StringBuilder(originalSql.length() + 100)
|
|
- .append(originalSql.substring(0, startOfSelect)).append("select * from ( select ")
|
|
|
|
|
|
+ .append(originalSql, 0, startOfSelect).append("select * from ( select ")
|
|
.append(getRowNumber(originalSql));
|
|
.append(getRowNumber(originalSql));
|
|
if (hasDistinct(originalSql)) {
|
|
if (hasDistinct(originalSql)) {
|
|
pagingSelect.append(" row_.* from ( ").append(originalSql.substring(startOfSelect)).append(" ) as row_");
|
|
pagingSelect.append(" row_.* from ( ").append(originalSql.substring(startOfSelect)).append(" ) as row_");
|
|
@@ -55,12 +55,14 @@ public class DB2Dialect implements IDialect {
|
|
}
|
|
}
|
|
pagingSelect.append(" ) as temp_ where rownumber_ ");
|
|
pagingSelect.append(" ) as temp_ where rownumber_ ");
|
|
|
|
|
|
- // add the restriction to the outer select
|
|
|
|
|
|
+ // 20180829 modify by hepengju
|
|
|
|
+ // https://github.com/baomidou/mybatis-plus/issues/450
|
|
if (offset > 0) {
|
|
if (offset > 0) {
|
|
String endString = offset + "+" + limit;
|
|
String endString = offset + "+" + limit;
|
|
- pagingSelect.append("between ").append(offset).append("+1 and ").append(endString);
|
|
|
|
|
|
+ pagingSelect.append(" fetch first ").append(endString).append(" rows only) as temp_ where rownumber_ ")
|
|
|
|
+ .append("> ").append(offset);
|
|
} else {
|
|
} else {
|
|
- pagingSelect.append("<= ").append(limit);
|
|
|
|
|
|
+ pagingSelect.append(" fetch first ").append(limit).append(" rows only) as temp_ ");
|
|
}
|
|
}
|
|
return pagingSelect.toString();
|
|
return pagingSelect.toString();
|
|
}
|
|
}
|