浏览代码

优化 db2 方言

hubin 7 年之前
父节点
当前提交
35b4ec2b50

+ 6 - 4
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/plugins/pagination/dialects/DB2Dialect.java

@@ -46,7 +46,7 @@ public class DB2Dialect implements IDialect {
     public String buildPaginationSql(String originalSql, int offset, int limit) {
         int startOfSelect = originalSql.toLowerCase().indexOf("select");
         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));
         if (hasDistinct(originalSql)) {
             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_ ");
 
-        // add the restriction to the outer select
+        // 20180829 modify by hepengju
+        // https://github.com/baomidou/mybatis-plus/issues/450
         if (offset > 0) {
             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 {
-            pagingSelect.append("<= ").append(limit);
+            pagingSelect.append(" fetch first ").append(limit).append(" rows only) as temp_ ");
         }
         return pagingSelect.toString();
     }