jobob %!s(int64=8) %!d(string=hai) anos
pai
achega
85f89f6efb

+ 69 - 0
mybatis-plus/src/main/java/com/baomidou/mybatisplus/plugins/pagination/dialects/DB2Dialect.java

@@ -0,0 +1,69 @@
+/**
+ * Copyright © 2015-2015  Jeedcp All rights reserved.
+ */
+/**
+ * Copyright (c) 2011-2014, hubin (jobob@qq.com).
+ *
+ * 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
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.plugins.pagination.dialects;
+
+import com.baomidou.mybatisplus.plugins.pagination.IDialect;
+
+/**
+ * <p>
+ * DB2 数据库分页方言
+ * </p>
+ * 
+ * @author hubin
+ * @Date 2016-11-10
+ */
+public class DB2Dialect implements IDialect {
+
+	private static String getRowNumber(String originalSql) {
+		StringBuilder rownumber = new StringBuilder(50).append("rownumber() over(");
+		int orderByIndex = originalSql.toLowerCase().indexOf("order by");
+		if (orderByIndex > 0 && !hasDistinct(originalSql)) {
+			rownumber.append(originalSql.substring(orderByIndex));
+		}
+		rownumber.append(") as rownumber_,");
+		return rownumber.toString();
+	}
+
+	private static boolean hasDistinct(String originalSql) {
+		return originalSql.toLowerCase().contains("select distinct");
+	}
+
+	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(getRowNumber(originalSql));
+		if (hasDistinct(originalSql)) {
+			pagingSelect.append(" row_.* from ( ").append(originalSql.substring(startOfSelect)).append(" ) as row_");
+		} else {
+			pagingSelect.append(originalSql.substring(startOfSelect + 6));
+		}
+		pagingSelect.append(" ) as temp_ where rownumber_ ");
+
+		// add the restriction to the outer select
+		if (offset > 0) {
+			String endString = offset + "+" + limit;
+			pagingSelect.append("between ").append(offset).append("+1 and ").append(endString);
+		} else {
+			pagingSelect.append("<= ").append(limit);
+		}
+		return null;
+	}
+
+}

+ 39 - 0
mybatis-plus/src/main/java/com/baomidou/mybatisplus/plugins/pagination/dialects/H2Dialect.java

@@ -0,0 +1,39 @@
+/**
+ * Copyright (c) 2011-2014, hubin (jobob@qq.com).
+ *
+ * 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
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.plugins.pagination.dialects;
+
+import com.baomidou.mybatisplus.plugins.pagination.IDialect;
+
+/**
+ * <p>
+ * H2 数据库分页方言
+ * </p>
+ * 
+ * @author hubin
+ * @Date 2016-11-10
+ */
+public class H2Dialect implements IDialect {
+
+	public String buildPaginationSql(String originalSql, int offset, int limit) {
+		StringBuffer sql = new StringBuffer(originalSql);
+		sql.append(" limit ").append(limit);
+		if (offset > 0) {
+			sql.append(" offset ").append(offset);
+		}
+		return sql.toString();
+	}
+
+}

+ 71 - 0
mybatis-plus/src/main/java/com/baomidou/mybatisplus/plugins/pagination/dialects/SQLServer2005Dialect.java

@@ -0,0 +1,71 @@
+/**
+ * Copyright (c) 2011-2014, hubin (jobob@qq.com).
+ *
+ * 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
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.plugins.pagination.dialects;
+
+import com.baomidou.mybatisplus.plugins.pagination.IDialect;
+import com.baomidou.mybatisplus.toolkit.StringUtils;
+
+/**
+ * <p>
+ * SQLServer 2005 数据库分页方言
+ * </p>
+ * 
+ * @author hubin
+ * @Date 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 "";
+		}
+	}
+
+	public String buildPaginationSql(String originalSql, int offset, int limit) {
+		StringBuilder pagingBuilder = new StringBuilder();
+		String orderby = getOrderByPart(originalSql);
+		String distinctStr = "";
+
+		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 query AS (SELECT ").append(distinctStr).append("TOP 100 PERCENT ")
+				.append(" ROW_NUMBER() OVER (").append(orderby).append(") as __row_number__, ").append(pagingBuilder)
+				.append(") SELECT * FROM query WHERE __row_number__ BETWEEN ").append(offset).append(" AND ")
+				.append(offset + limit).append(" ORDER BY __row_number__");
+		return sql.toString();
+	}
+
+}