From 9fefe9d19e97eb54c3bd73fc3679c9ec8ce18265 Mon Sep 17 00:00:00 2001 From: redkale Date: Thu, 6 Jun 2024 15:49:27 +0800 Subject: [PATCH] sqlserver --- .../redkale/source/AbstractDataSqlSource.java | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/redkale/source/AbstractDataSqlSource.java b/src/main/java/org/redkale/source/AbstractDataSqlSource.java index 25a73c0df..8778dd7c8 100644 --- a/src/main/java/org/redkale/source/AbstractDataSqlSource.java +++ b/src/main/java/org/redkale/source/AbstractDataSqlSource.java @@ -174,7 +174,6 @@ public abstract class AbstractDataSqlSource extends AbstractDataSource final CharSequence where = node == null ? null : node.createSQLExpress(this, info, joinTabalis); final String joinAndWhere = (join == null ? "" : join) + ((where == null || where.length() == 0) ? "" : (" WHERE " + where)); - final boolean mysqlOrPgsql = "mysql".equals(dbtype()) || "postgresql".equals(dbtype()); String pageSql = null; String countSql = null; boolean containsLimit = false; @@ -202,11 +201,20 @@ public abstract class AbstractDataSqlSource extends AbstractDataSource // pageSql pageSql = listSubSql + createOrderbySql(info, flipper); if (Flipper.validLimit(flipper)) { - if (mysqlOrPgsql) { + if ("oracle".equals(dbtype)) { + int start = flipper.getOffset(); + int end = flipper.getOffset() + flipper.getLimit(); + pageSql = "SELECT * FROM (SELECT T_.*, ROWNUM RN_ FROM (" + pageSql + ") T_) WHERE RN_ BETWEEN " + + start + " AND " + end; + containsLimit = true; + } else if ("mysql".equals(dbtype) || "postgresql".equals(dbtype)) { pageSql += " LIMIT " + flipper.getLimit() + " OFFSET " + flipper.getOffset(); containsLimit = true; - } else if ("oracle".equals(dbtype())) { - // to do + } else if ("sqlserver".equals(dbtype)) { + int offset = flipper.getOffset(); + int limit = flipper.getLimit(); + pageSql += " OFFSET " + offset + " ROWS FETCH NEXT " + limit + " ROWS ONLY"; + containsLimit = true; } } // countSql