mirror of
https://gitee.com/mybatis-flex/mybatis-flex.git
synced 2025-12-08 09:38:26 +08:00
feat: add sqlServer 2005 LimitOffsetProcessor
This commit is contained in:
parent
99729bd8ba
commit
d020fe26b4
@ -17,6 +17,7 @@ package com.mybatisflex.core.dialect;
|
|||||||
|
|
||||||
import com.mybatisflex.core.query.CPI;
|
import com.mybatisflex.core.query.CPI;
|
||||||
import com.mybatisflex.core.query.QueryOrderBy;
|
import com.mybatisflex.core.query.QueryOrderBy;
|
||||||
|
import com.mybatisflex.core.query.QueryTable;
|
||||||
import com.mybatisflex.core.query.QueryWrapper;
|
import com.mybatisflex.core.query.QueryWrapper;
|
||||||
import com.mybatisflex.core.util.CollectionUtil;
|
import com.mybatisflex.core.util.CollectionUtil;
|
||||||
|
|
||||||
@ -29,152 +30,172 @@ import static com.mybatisflex.core.constant.SqlConsts.*;
|
|||||||
*/
|
*/
|
||||||
public interface LimitOffsetProcessor {
|
public interface LimitOffsetProcessor {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* MySql 的处理器
|
* 处理构建 limit 和 offset
|
||||||
* 适合 {@link DbType#MYSQL,DbType#MARIADB,DbType#H2,DbType#CLICK_HOUSE,DbType#XCloud}
|
*
|
||||||
*/
|
* @param dialect 数据方言
|
||||||
LimitOffsetProcessor MYSQL = (sql, queryWrapper, limitRows, limitOffset) -> {
|
* @param sql 已经构建的 sql
|
||||||
if (limitRows != null && limitOffset != null) {
|
* @param queryWrapper 参数内容
|
||||||
sql.append(LIMIT).append(limitOffset).append(DELIMITER).append(limitRows);
|
* @param limitRows 用户传入的 limit 参数 可能为 null
|
||||||
} else if (limitRows != null) {
|
* @param limitOffset 用户传入的 offset 参数,可能为 null
|
||||||
sql.append(LIMIT).append(limitRows);
|
*/
|
||||||
}
|
StringBuilder process(IDialect dialect, StringBuilder sql, QueryWrapper queryWrapper, Integer limitRows, Integer limitOffset);
|
||||||
return sql;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Postgresql 的处理器
|
|
||||||
* 适合 {@link DbType#POSTGRE_SQL,DbType#SQLITE,DbType#H2,DbType#HSQL,DbType#KINGBASE_ES,DbType#PHOENIX}
|
|
||||||
* 适合 {@link DbType#SAP_HANA,DbType#IMPALA,DbType#HIGH_GO,DbType#VERTICA,DbType#REDSHIFT}
|
|
||||||
* 适合 {@link DbType#OPENGAUSS,DbType#TDENGINE,DbType#UXDB}
|
|
||||||
*/
|
|
||||||
LimitOffsetProcessor POSTGRESQL = (sql, queryWrapper, limitRows, limitOffset) -> {
|
|
||||||
if (limitRows != null && limitOffset != null) {
|
|
||||||
sql.append(LIMIT).append(limitRows).append(OFFSET).append(limitOffset);
|
|
||||||
} else if (limitRows != null) {
|
|
||||||
sql.append(LIMIT).append(limitRows);
|
|
||||||
}
|
|
||||||
return sql;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* derby 的处理器
|
|
||||||
* 适合 {@link DbType#DERBY,DbType#ORACLE_12C,DbType#SQLSERVER ,DbType#POSTGRE_SQL}
|
|
||||||
*/
|
|
||||||
LimitOffsetProcessor DERBY = (sql, queryWrapper, limitRows, limitOffset) -> {
|
|
||||||
if (limitRows != null && limitOffset != null) {
|
|
||||||
// OFFSET ** ROWS FETCH NEXT ** ROWS ONLY")
|
|
||||||
sql.append(OFFSET).append(limitOffset).append(ROWS_FETCH_NEXT).append(limitRows).append(ROWS_ONLY);
|
|
||||||
} else if (limitRows != null) {
|
|
||||||
sql.append(OFFSET).append(0).append(ROWS_FETCH_NEXT).append(limitRows).append(ROWS_ONLY);
|
|
||||||
}
|
|
||||||
return sql;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* derby 的处理器
|
|
||||||
* 适合 {@link DbType#DERBY,DbType#ORACLE_12C,DbType#SQLSERVER ,DbType#POSTGRE_SQL}
|
|
||||||
*/
|
|
||||||
LimitOffsetProcessor SQLSERVER = (sql, queryWrapper, limitRows, limitOffset) -> {
|
|
||||||
if (limitRows != null && limitOffset != null) {
|
|
||||||
// OFFSET ** ROWS FETCH NEXT ** ROWS ONLY")
|
|
||||||
sql.append(OFFSET).append(limitOffset).append(ROWS_FETCH_NEXT).append(limitRows).append(ROWS_ONLY);
|
|
||||||
} else if (limitRows != null) {
|
|
||||||
List<QueryOrderBy> orderBys = CPI.getOrderBys(queryWrapper);
|
|
||||||
if (CollectionUtil.isNotEmpty(orderBys)) {
|
|
||||||
sql.append(OFFSET).append(0).append(ROWS_FETCH_NEXT).append(limitRows).append(ROWS_ONLY);
|
|
||||||
} else {
|
|
||||||
sql.insert(6, TOP + limitRows);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return sql;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* SqlServer 2005 limit 处理器
|
* MySql 的处理器
|
||||||
*/
|
* 适合 {@link DbType#MYSQL,DbType#MARIADB,DbType#H2,DbType#CLICK_HOUSE,DbType#XCloud}
|
||||||
LimitOffsetProcessor SQLSERVER_2005 = (sql, queryWrapper, limitRows, limitOffset) -> {
|
*/
|
||||||
if (limitRows != null) {
|
LimitOffsetProcessor MYSQL = (dialect, sql, queryWrapper, limitRows, limitOffset) -> {
|
||||||
if (limitOffset == null) {
|
if (limitRows != null && limitOffset != null) {
|
||||||
limitOffset = 0;
|
sql.append(LIMIT).append(limitOffset).append(DELIMITER).append(limitRows);
|
||||||
}
|
} else if (limitRows != null) {
|
||||||
StringBuilder newSql = new StringBuilder("SELECT * FROM (SELECT TEMP_DATAS.*, ROW_NUMBER() OVER() AS RN FROM (");
|
sql.append(LIMIT).append(limitRows);
|
||||||
newSql.append(sql).append(") AS TEMP_DATAS) WHERE RN > ").append(limitOffset).append(" AND RN <= ").append(limitRows + limitRows);
|
}
|
||||||
return newSql;
|
return sql;
|
||||||
}
|
};
|
||||||
return sql;
|
|
||||||
};
|
/**
|
||||||
|
* Postgresql 的处理器
|
||||||
|
* 适合 {@link DbType#POSTGRE_SQL,DbType#SQLITE,DbType#H2,DbType#HSQL,DbType#KINGBASE_ES,DbType#PHOENIX}
|
||||||
|
* 适合 {@link DbType#SAP_HANA,DbType#IMPALA,DbType#HIGH_GO,DbType#VERTICA,DbType#REDSHIFT}
|
||||||
|
* 适合 {@link DbType#OPENGAUSS,DbType#TDENGINE,DbType#UXDB}
|
||||||
|
*/
|
||||||
|
LimitOffsetProcessor POSTGRESQL = (dialect, sql, queryWrapper, limitRows, limitOffset) -> {
|
||||||
|
if (limitRows != null && limitOffset != null) {
|
||||||
|
sql.append(LIMIT).append(limitRows).append(OFFSET).append(limitOffset);
|
||||||
|
} else if (limitRows != null) {
|
||||||
|
sql.append(LIMIT).append(limitRows);
|
||||||
|
}
|
||||||
|
return sql;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* derby 的处理器
|
||||||
|
* 适合 {@link DbType#DERBY,DbType#ORACLE_12C,DbType#SQLSERVER ,DbType#POSTGRE_SQL}
|
||||||
|
*/
|
||||||
|
LimitOffsetProcessor DERBY = (dialect, sql, queryWrapper, limitRows, limitOffset) -> {
|
||||||
|
if (limitRows != null && limitOffset != null) {
|
||||||
|
// OFFSET ** ROWS FETCH NEXT ** ROWS ONLY")
|
||||||
|
sql.append(OFFSET).append(limitOffset).append(ROWS_FETCH_NEXT).append(limitRows).append(ROWS_ONLY);
|
||||||
|
} else if (limitRows != null) {
|
||||||
|
sql.append(OFFSET).append(0).append(ROWS_FETCH_NEXT).append(limitRows).append(ROWS_ONLY);
|
||||||
|
}
|
||||||
|
return sql;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* derby 的处理器
|
||||||
|
* 适合 {@link DbType#DERBY,DbType#ORACLE_12C,DbType#SQLSERVER ,DbType#POSTGRE_SQL}
|
||||||
|
*/
|
||||||
|
LimitOffsetProcessor SQLSERVER = (dialect, sql, queryWrapper, limitRows, limitOffset) -> {
|
||||||
|
if (limitRows != null && limitOffset != null) {
|
||||||
|
// OFFSET ** ROWS FETCH NEXT ** ROWS ONLY")
|
||||||
|
sql.append(OFFSET).append(limitOffset).append(ROWS_FETCH_NEXT).append(limitRows).append(ROWS_ONLY);
|
||||||
|
} else if (limitRows != null) {
|
||||||
|
List<QueryOrderBy> orderBys = CPI.getOrderBys(queryWrapper);
|
||||||
|
if (CollectionUtil.isNotEmpty(orderBys)) {
|
||||||
|
sql.append(OFFSET).append(0).append(ROWS_FETCH_NEXT).append(limitRows).append(ROWS_ONLY);
|
||||||
|
} else {
|
||||||
|
sql.insert(6, TOP + limitRows);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return sql;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Informix 的处理器
|
* SqlServer 2005 limit 处理器
|
||||||
* 适合 {@link DbType#INFORMIX}
|
*/
|
||||||
* 文档 {@link <a href="https://www.ibm.com/docs/en/informix-servers/14.10?topic=clause-restricting-return-values-skip-limit-first-options">https://www.ibm.com/docs/en/informix-servers/14.10?topic=clause-restricting-return-values-skip-limit-first-options</a>}
|
LimitOffsetProcessor SQLSERVER_2005 = (dialect, sql, queryWrapper, limitRows, limitOffset) -> {
|
||||||
*/
|
if (limitRows != null) {
|
||||||
LimitOffsetProcessor INFORMIX = (sql, queryWrapper, limitRows, limitOffset) -> {
|
if (limitOffset == null) {
|
||||||
if (limitRows != null && limitOffset != null) {
|
limitOffset = 0;
|
||||||
// SELECT SKIP 2 FIRST 1 * FROM
|
}
|
||||||
sql.insert(6, SKIP + limitOffset + FIRST + limitRows);
|
String orderByString;
|
||||||
} else if (limitRows != null) {
|
List<QueryOrderBy> orderBys = CPI.getOrderBys(queryWrapper);
|
||||||
sql.insert(6, FIRST + limitRows);
|
if (orderBys == null || orderBys.isEmpty()) {
|
||||||
}
|
orderByString = "ORDER BY CURRENT_TIMESTAMP";
|
||||||
return sql;
|
} else {
|
||||||
};
|
StringBuilder orderBySql = new StringBuilder(ORDER_BY);
|
||||||
|
int index = 0;
|
||||||
/**
|
List<QueryTable> queryTables = CPI.getQueryTables(queryWrapper);
|
||||||
* Firebird 的处理器
|
for (QueryOrderBy orderBy : orderBys) {
|
||||||
* 适合 {@link DbType#FIREBIRD}
|
orderBySql.append(orderBy.toSql(queryTables, dialect));
|
||||||
*/
|
if (index != orderBys.size() - 1) {
|
||||||
LimitOffsetProcessor FIREBIRD = (sql, queryWrapper, limitRows, limitOffset) -> {
|
orderBySql.append(DELIMITER);
|
||||||
if (limitRows != null && limitOffset != null) {
|
}
|
||||||
// ROWS 2 TO 3
|
index++;
|
||||||
sql.append(ROWS).append(limitOffset).append(TO).append(limitOffset + limitRows);
|
}
|
||||||
} else if (limitRows != null) {
|
orderByString = orderBySql.toString();
|
||||||
sql.insert(6, FIRST + limitRows);
|
}
|
||||||
}
|
StringBuilder newSql = new StringBuilder("SELECT * FROM (SELECT TEMP_DATAS.*, ROW_NUMBER() OVER(").append(orderByString).append(") AS RN FROM (");
|
||||||
return sql;
|
newSql.append(sql).append(") AS TEMP_DATAS) WHERE RN > ").append(limitOffset).append(" AND RN <= ").append(limitRows + limitRows);
|
||||||
};
|
return newSql;
|
||||||
|
}
|
||||||
/**
|
return sql;
|
||||||
* Oracle11g及以下数据库的处理器
|
};
|
||||||
* 适合 {@link DbType#ORACLE,DbType#DM,DbType#GAUSS}
|
|
||||||
*/
|
|
||||||
LimitOffsetProcessor ORACLE = (sql, queryWrapper, limitRows, limitOffset) -> {
|
/**
|
||||||
if (limitRows != null) {
|
* Informix 的处理器
|
||||||
if (limitOffset == null) {
|
* 适合 {@link DbType#INFORMIX}
|
||||||
limitOffset = 0;
|
* 文档 {@link <a href="https://www.ibm.com/docs/en/informix-servers/14.10?topic=clause-restricting-return-values-skip-limit-first-options">https://www.ibm.com/docs/en/informix-servers/14.10?topic=clause-restricting-return-values-skip-limit-first-options</a>}
|
||||||
}
|
*/
|
||||||
StringBuilder newSql = new StringBuilder("SELECT * FROM (SELECT TEMP_DATAS.*, ROWNUM RN FROM (");
|
LimitOffsetProcessor INFORMIX = (dialect, sql, queryWrapper, limitRows, limitOffset) -> {
|
||||||
newSql.append(sql);
|
if (limitRows != null && limitOffset != null) {
|
||||||
newSql.append(") TEMP_DATAS WHERE ROWNUM <= ").append(limitOffset + limitRows).append(") WHERE RN > ").append(limitOffset);
|
// SELECT SKIP 2 FIRST 1 * FROM
|
||||||
return newSql;
|
sql.insert(6, SKIP + limitOffset + FIRST + limitRows);
|
||||||
}
|
} else if (limitRows != null) {
|
||||||
return sql;
|
sql.insert(6, FIRST + limitRows);
|
||||||
};
|
}
|
||||||
|
return sql;
|
||||||
/**
|
};
|
||||||
* Sybase 处理器
|
|
||||||
* 适合 {@link DbType#SYBASE}
|
/**
|
||||||
*/
|
* Firebird 的处理器
|
||||||
LimitOffsetProcessor SYBASE = (sql, queryWrapper, limitRows, limitOffset) -> {
|
* 适合 {@link DbType#FIREBIRD}
|
||||||
if (limitRows != null && limitOffset != null) {
|
*/
|
||||||
//SELECT TOP 1 START AT 3 * FROM
|
LimitOffsetProcessor FIREBIRD = (dialect, sql, queryWrapper, limitRows, limitOffset) -> {
|
||||||
sql.insert(6, TOP + limitRows + START_AT + (limitOffset + 1));
|
if (limitRows != null && limitOffset != null) {
|
||||||
} else if (limitRows != null) {
|
// ROWS 2 TO 3
|
||||||
sql.insert(6, TOP + limitRows);
|
sql.append(ROWS).append(limitOffset).append(TO).append(limitOffset + limitRows);
|
||||||
}
|
} else if (limitRows != null) {
|
||||||
return sql;
|
sql.insert(6, FIRST + limitRows);
|
||||||
};
|
}
|
||||||
|
return sql;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Oracle11g及以下数据库的处理器
|
||||||
|
* 适合 {@link DbType#ORACLE,DbType#DM,DbType#GAUSS}
|
||||||
|
*/
|
||||||
|
LimitOffsetProcessor ORACLE = (dialect, sql, queryWrapper, limitRows, limitOffset) -> {
|
||||||
|
if (limitRows != null) {
|
||||||
|
if (limitOffset == null) {
|
||||||
|
limitOffset = 0;
|
||||||
|
}
|
||||||
|
StringBuilder newSql = new StringBuilder("SELECT * FROM (SELECT TEMP_DATAS.*, ROWNUM RN FROM (");
|
||||||
|
newSql.append(sql);
|
||||||
|
newSql.append(") TEMP_DATAS WHERE ROWNUM <= ").append(limitOffset + limitRows).append(") WHERE RN > ").append(limitOffset);
|
||||||
|
return newSql;
|
||||||
|
}
|
||||||
|
return sql;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sybase 处理器
|
||||||
|
* 适合 {@link DbType#SYBASE}
|
||||||
|
*/
|
||||||
|
LimitOffsetProcessor SYBASE = (dialect, sql, queryWrapper, limitRows, limitOffset) -> {
|
||||||
|
if (limitRows != null && limitOffset != null) {
|
||||||
|
//SELECT TOP 1 START AT 3 * FROM
|
||||||
|
sql.insert(6, TOP + limitRows + START_AT + (limitOffset + 1));
|
||||||
|
} else if (limitRows != null) {
|
||||||
|
sql.insert(6, TOP + limitRows);
|
||||||
|
}
|
||||||
|
return sql;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 处理构建 limit 和 offset
|
|
||||||
*
|
|
||||||
* @param sql 已经构建的 sql
|
|
||||||
* @param queryWrapper 参数内容
|
|
||||||
* @param limitRows 用户传入的 limit 参数 可能为 null
|
|
||||||
* @param limitOffset 用户传入的 offset 参数,可能为 null
|
|
||||||
*/
|
|
||||||
StringBuilder process(StringBuilder sql, QueryWrapper queryWrapper, Integer limitRows, Integer limitOffset);
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -128,8 +128,8 @@ public class CommonsDialectImpl implements IDialect {
|
|||||||
}
|
}
|
||||||
sql.append(wrap(getRealTable(tableName)));
|
sql.append(wrap(getRealTable(tableName)));
|
||||||
sql.append(BLANK).append(BRACKET_LEFT)
|
sql.append(BLANK).append(BRACKET_LEFT)
|
||||||
.append(fields)
|
.append(fields)
|
||||||
.append(BRACKET_RIGHT).append(BLANK);
|
.append(BRACKET_RIGHT).append(BLANK);
|
||||||
sql.append(VALUES).append(questions);
|
sql.append(VALUES).append(questions);
|
||||||
return sql.toString();
|
return sql.toString();
|
||||||
}
|
}
|
||||||
@ -341,12 +341,12 @@ public class CommonsDialectImpl implements IDialect {
|
|||||||
|
|
||||||
//用户未配置别名的情况下,自动未用户添加别名
|
//用户未配置别名的情况下,自动未用户添加别名
|
||||||
if (selectColumnTable != null
|
if (selectColumnTable != null
|
||||||
&& selectColumnName != null
|
&& selectColumnName != null
|
||||||
&& !"*".equals(selectColumnName)
|
&& !"*".equals(selectColumnName)
|
||||||
&& StringUtil.isBlank(selectColumn.getAlias())
|
&& StringUtil.isBlank(selectColumn.getAlias())
|
||||||
&& !(selectColumnTable instanceof SelectQueryTable)
|
&& !(selectColumnTable instanceof SelectQueryTable)
|
||||||
&& !CPI.isSameTable(firstTable, selectColumnTable)
|
&& !CPI.isSameTable(firstTable, selectColumnTable)
|
||||||
&& ArrayUtil.contains(firstTableColumns, selectColumnName)
|
&& ArrayUtil.contains(firstTableColumns, selectColumnName)
|
||||||
) {
|
) {
|
||||||
QueryColumn newSelectColumn = selectColumn.as(selectColumnTable.getName() + "$" + selectColumnName);
|
QueryColumn newSelectColumn = selectColumn.as(selectColumnTable.getName() + "$" + selectColumnName);
|
||||||
selectColumns.set(i, newSelectColumn);
|
selectColumns.set(i, newSelectColumn);
|
||||||
@ -514,9 +514,9 @@ public class CommonsDialectImpl implements IDialect {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return sql.append(BRACKET_LEFT).append(sqlFields).append(BRACKET_RIGHT)
|
return sql.append(BRACKET_LEFT).append(sqlFields).append(BRACKET_RIGHT)
|
||||||
.append(VALUES)
|
.append(VALUES)
|
||||||
.append(BRACKET_LEFT).append(sqlValues).append(BRACKET_RIGHT)
|
.append(BRACKET_LEFT).append(sqlValues).append(BRACKET_RIGHT)
|
||||||
.toString();
|
.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -542,9 +542,9 @@ public class CommonsDialectImpl implements IDialect {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return sql.append(BRACKET_LEFT).append(sqlFields).append(BRACKET_RIGHT)
|
return sql.append(BRACKET_LEFT).append(sqlFields).append(BRACKET_RIGHT)
|
||||||
.append(VALUES)
|
.append(VALUES)
|
||||||
.append(BRACKET_LEFT).append(sqlValues).append(BRACKET_RIGHT)
|
.append(BRACKET_LEFT).append(sqlValues).append(BRACKET_RIGHT)
|
||||||
.toString();
|
.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -558,8 +558,8 @@ public class CommonsDialectImpl implements IDialect {
|
|||||||
warpedInsertColumns[i] = wrap(insertColumns[i]);
|
warpedInsertColumns[i] = wrap(insertColumns[i]);
|
||||||
}
|
}
|
||||||
sql.append(BRACKET_LEFT)
|
sql.append(BRACKET_LEFT)
|
||||||
.append(StringUtil.join(DELIMITER, warpedInsertColumns))
|
.append(StringUtil.join(DELIMITER, warpedInsertColumns))
|
||||||
.append(BRACKET_RIGHT);
|
.append(BRACKET_RIGHT);
|
||||||
sql.append(VALUES);
|
sql.append(VALUES);
|
||||||
|
|
||||||
Map<String, String> onInsertColumns = tableInfo.getOnInsertColumns();
|
Map<String, String> onInsertColumns = tableInfo.getOnInsertColumns();
|
||||||
@ -782,7 +782,7 @@ public class CommonsDialectImpl implements IDialect {
|
|||||||
Map<String, RawValue> rawValueMap = tableInfo.obtainUpdateRawValueMap(entity);
|
Map<String, RawValue> rawValueMap = tableInfo.obtainUpdateRawValueMap(entity);
|
||||||
|
|
||||||
sql.append(UPDATE).append(forHint(CPI.getHint(queryWrapper)))
|
sql.append(UPDATE).append(forHint(CPI.getHint(queryWrapper)))
|
||||||
.append(tableInfo.getWrapSchemaAndTableName(this)).append(SET);
|
.append(tableInfo.getWrapSchemaAndTableName(this)).append(SET);
|
||||||
|
|
||||||
StringJoiner stringJoiner = new StringJoiner(DELIMITER);
|
StringJoiner stringJoiner = new StringJoiner(DELIMITER);
|
||||||
|
|
||||||
@ -1051,7 +1051,7 @@ public class CommonsDialectImpl implements IDialect {
|
|||||||
* 构建 limit 和 offset 的参数
|
* 构建 limit 和 offset 的参数
|
||||||
*/
|
*/
|
||||||
protected StringBuilder buildLimitOffsetSql(StringBuilder sqlBuilder, QueryWrapper queryWrapper, Integer limitRows, Integer limitOffset) {
|
protected StringBuilder buildLimitOffsetSql(StringBuilder sqlBuilder, QueryWrapper queryWrapper, Integer limitRows, Integer limitOffset) {
|
||||||
return limitOffsetProcessor.process(sqlBuilder, queryWrapper, limitRows, limitOffset);
|
return limitOffsetProcessor.process(this, sqlBuilder, queryWrapper, limitRows, limitOffset);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user