Browse Source

sqlserver2005分页,修改获取order by的方法,将子查询中的 over(order by xxx) 的情况过滤掉,避免分页报错。

白羊梦 2 năm trước cách đây
mục cha
commit
249aaf235c

+ 12 - 6
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/plugins/pagination/dialects/SQLServer2005Dialect.java

@@ -27,14 +27,20 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.DialectModel;
  */
 public class SQLServer2005Dialect implements IDialect {
 
-    private static String getOrderByPart(String sql) {
-        String loweredString = sql.toLowerCase();
-        int orderByIndex = loweredString.lastIndexOf("order by");
-        if (orderByIndex != -1) {
-            return sql.substring(orderByIndex);
-        } else {
+    private static final Pattern pattern = Pattern.compile("\\((.)*order by(.)*\\)");
+
+    public String getOrderByPart(String sql) {
+        String order_by = "order by";
+        int lastIndex = sql.toLowerCase().lastIndexOf(order_by);
+        if (lastIndex == -1) {
             return StringPool.EMPTY;
         }
+        Matcher matcher = pattern.matcher(sql);
+        if (!matcher.find()) {
+            return sql.substring(lastIndex);
+        }
+        int end = matcher.end();
+        return lastIndex < end ? StringPool.EMPTY : sql.substring(lastIndex);
     }
 
     @Override