Browse Source

SQLServer2005Dialect over,剩下 DB2

miemie 6 years ago
parent
commit
cec1f17d92

+ 2 - 2
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/plugins/pagination/DialectFactory.java

@@ -118,8 +118,8 @@ public class DialectFactory {
                 return new H2Dialect();
                 return new H2Dialect();
             case SQL_SERVER:
             case SQL_SERVER:
                 return new SQLServerDialect();
                 return new SQLServerDialect();
-//            case SQL_SERVER2005:
-//                return new SQLServer2005Dialect();
+            case SQL_SERVER2005:
+                return new SQLServer2005Dialect();
             case POSTGRE_SQL:
             case POSTGRE_SQL:
                 return new PostgreDialect();
                 return new PostgreDialect();
             case HSQL:
             case HSQL:

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

@@ -1,75 +1,72 @@
-///*
-// * Copyright (c) 2011-2014, hubin (jobob@qq.com).
-// * <p>
-// * Licensed under the Apache License, Version 2.0 (the "License"); you may not
-// * use this file except in compliance with the License. You may obtain a copy of
-// * the License at
-// * <p>
-// * http://www.apache.org/licenses/LICENSE-2.0
-// * <p>
-// * Unless required by applicable law or agreed to in writing, software
-// * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-// * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-// * License for the specific language governing permissions and limitations under
-// * the License.
-// */
-//package com.baomidou.mybatisplus.extension.plugins.pagination.dialects;
-//
-//import com.baomidou.mybatisplus.core.toolkit.StringPool;
-//import com.baomidou.mybatisplus.core.toolkit.StringUtils;
-//
-///**
-// * <p>
-// * SQLServer 2005 数据库分页方言
-// * </p>
-// *
-// * @author hubin
-// * @since 2016-11-10
-// */
-//public class SQLServer2005Dialect implements IDialect {
-//
-//
-//    private static String getOrderByPart(String sql) {
-//        String loweredString = sql.toLowerCase();
-//        int orderByIndex = loweredString.indexOf("order by");
-//        if (orderByIndex != -1) {
-//            return sql.substring(orderByIndex);
-//        } else {
-//            return StringPool.EMPTY;
-//        }
-//    }
-//
-//    @Override
-//    public String buildPaginationSql(String originalSql, long offset, long limit) {
-//        StringBuilder pagingBuilder = new StringBuilder();
-//        String orderby = getOrderByPart(originalSql);
-//        String distinctStr = StringPool.EMPTY;
-//
-//        String loweredString = originalSql.toLowerCase();
-//        String sqlPartString = originalSql;
-//        if (loweredString.trim().startsWith("select")) {
-//            int index = 6;
-//            if (loweredString.startsWith("select distinct")) {
-//                distinctStr = "DISTINCT ";
-//                index = 15;
-//            }
-//            sqlPartString = sqlPartString.substring(index);
-//        }
-//        pagingBuilder.append(sqlPartString);
-//
-//        // if no ORDER BY is specified use fake ORDER BY field to avoid errors
-//        if (StringUtils.isEmpty(orderby)) {
-//            orderby = "ORDER BY CURRENT_TIMESTAMP";
-//        }
-//
-//        StringBuilder sql = new StringBuilder();
-//        sql.append("WITH selectTemp AS (SELECT ").append(distinctStr).append("TOP 100 PERCENT ")
-//            .append(" ROW_NUMBER() OVER (").append(orderby).append(") as __row_number__, ").append(pagingBuilder)
-//            .append(") SELECT * FROM selectTemp WHERE __row_number__ BETWEEN ")
-//            //FIX#299:原因:mysql中limit 10(offset,size) 是从第10开始(不包含10),;而这里用的BETWEEN是两边都包含,所以改为offset+1
-//            .append(offset + 1)
-//            .append(" AND ")
-//            .append(offset + limit).append(" ORDER BY __row_number__");
-//        return sql.toString();
-//    }
-//}
+/*
+ * Copyright (c) 2011-2014, hubin (jobob@qq.com).
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package com.baomidou.mybatisplus.extension.plugins.pagination.dialects;
+
+import com.baomidou.mybatisplus.core.toolkit.StringPool;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.DialectModel;
+
+/**
+ * <p>
+ * SQLServer 2005 数据库分页方言
+ * </p>
+ *
+ * @author hubin
+ * @since 2016-11-10
+ */
+public class SQLServer2005Dialect implements IDialect {
+
+    private static String getOrderByPart(String sql) {
+        String loweredString = sql.toLowerCase();
+        int orderByIndex = loweredString.indexOf("order by");
+        if (orderByIndex != -1) {
+            return sql.substring(orderByIndex);
+        } else {
+            return StringPool.EMPTY;
+        }
+    }
+
+    @Override
+    public DialectModel buildPaginationSql(String originalSql, long offset, long limit) {
+        StringBuilder pagingBuilder = new StringBuilder();
+        String orderby = getOrderByPart(originalSql);
+        String distinctStr = StringPool.EMPTY;
+
+        String loweredString = originalSql.toLowerCase();
+        String sqlPartString = originalSql;
+        if (loweredString.trim().startsWith("select")) {
+            int index = 6;
+            if (loweredString.startsWith("select distinct")) {
+                distinctStr = "DISTINCT ";
+                index = 15;
+            }
+            sqlPartString = sqlPartString.substring(index);
+        }
+        pagingBuilder.append(sqlPartString);
+
+        // if no ORDER BY is specified use fake ORDER BY field to avoid errors
+        if (StringUtils.isEmpty(orderby)) {
+            orderby = "ORDER BY CURRENT_TIMESTAMP";
+        }
+
+        String sql = "WITH selectTemp AS (SELECT " + distinctStr + "TOP 100 PERCENT " +
+            " ROW_NUMBER() OVER (" + orderby + ") as __row_number__, " + pagingBuilder +
+            ") SELECT * FROM selectTemp WHERE __row_number__ BETWEEN " +
+            //FIX#299:原因:mysql中limit 10(offset,size) 是从第10开始(不包含10),;而这里用的BETWEEN是两边都包含,所以改为offset+1
+            OFFSET + " AND " + LIMIT + " ORDER BY __row_number__";
+        return new DialectModel(sql, offset + 1, offset + limit).setConsumerChain();
+    }
+}