Package org.aoju.bus.pager.parser
Class SqlServerParser
java.lang.Object
org.aoju.bus.pager.parser.SqlServerParser
将sqlserver查询语句转换为分页语句
注意事项:
- 请先保证你的SQL可以执行
- sql中最好直接包含order by,可以自动从sql提取
- 如果没有order by,可以通过入参提供,但是需要自己保证正确
- 如果sql有order by,可以通过orderby参数覆盖sql中的order by
- order by的列名不能使用别名
- 表和列使用别名的时候不要使用单引号(')
- Since:
- Java 17+
- Author:
- Kimi Liu
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected static final String别名前缀protected static final String行号protected static final net.sf.jsqlparser.schema.Column行号列static final String结束行号static final net.sf.jsqlparser.expression.Aliasprotectedprotected static final String表别名名字static final String开始行号protected static final net.sf.jsqlparser.statement.select.TopTOP 100 PERCENTprotected static final String外层包装表 -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprotected net.sf.jsqlparser.statement.select.SelectItemaddRowNumber(net.sf.jsqlparser.statement.select.PlainSelect plainSelect, List<net.sf.jsqlparser.statement.select.SelectItem> autoItems) 获取 ROW_NUMBER() 列protected net.sf.jsqlparser.statement.select.OrderByElementcloneOrderByElement(net.sf.jsqlparser.statement.select.OrderByElement orig, String alias) 复制 OrderByElementprotected net.sf.jsqlparser.statement.select.OrderByElementcloneOrderByElement(net.sf.jsqlparser.statement.select.OrderByElement orig, net.sf.jsqlparser.expression.Expression expression) 复制 OrderByElementconvertToPageSql(String sql) 转换为分页语句convertToPageSql(String sql, Integer offset, Integer limit) 转换为分页语句protected List<net.sf.jsqlparser.statement.select.OrderByElement> getOrderByElements(net.sf.jsqlparser.statement.select.PlainSelect plainSelect, List<net.sf.jsqlparser.statement.select.SelectItem> autoItems) 获取新的排序列表protected net.sf.jsqlparser.statement.select.SelectgetPageSelect(net.sf.jsqlparser.statement.select.Select select) 获取一个外层包装的TOP查询protected List<net.sf.jsqlparser.statement.select.SelectItem> getSelectItems(net.sf.jsqlparser.statement.select.PlainSelect plainSelect) 获取查询列booleanisNotEmptyList(List<?> list) List不空protected voidprocessFromItem(net.sf.jsqlparser.statement.select.FromItem fromItem, int level) 处理子查询protected voidprocessPlainSelect(net.sf.jsqlparser.statement.select.PlainSelect plainSelect, int level) 处理PlainSelect类型的selectBodyprotected voidprocessSelectBody(net.sf.jsqlparser.statement.select.SelectBody selectBody, int level) 处理selectBody去除Order byprotected net.sf.jsqlparser.statement.select.SelectBodywrapSetOperationList(net.sf.jsqlparser.statement.select.SetOperationList setOperationList) 包装SetOperationList
-
Field Details
-
START_ROW
开始行号 -
PAGE_SIZE
结束行号 -
WRAP_TABLE
-
PAGE_TABLE_NAME
-
PAGE_TABLE_ALIAS
public static final net.sf.jsqlparser.expression.Alias PAGE_TABLE_ALIASprotected -
PAGE_ROW_NUMBER
-
PAGE_ROW_NUMBER_COLUMN
protected static final net.sf.jsqlparser.schema.Column PAGE_ROW_NUMBER_COLUMN行号列 -
TOP100_PERCENT
protected static final net.sf.jsqlparser.statement.select.Top TOP100_PERCENTTOP 100 PERCENT -
PAGE_COLUMN_ALIAS_PREFIX
-
-
Constructor Details
-
SqlServerParser
public SqlServerParser() -
SqlServerParser
-
-
Method Details
-
convertToPageSql
-
convertToPageSql
-
getPageSelect
protected net.sf.jsqlparser.statement.select.Select getPageSelect(net.sf.jsqlparser.statement.select.Select select) 获取一个外层包装的TOP查询- Parameters:
select- Select- Returns:
- the select
-
wrapSetOperationList
protected net.sf.jsqlparser.statement.select.SelectBody wrapSetOperationList(net.sf.jsqlparser.statement.select.SetOperationList setOperationList) 包装SetOperationList- Parameters:
setOperationList- SetOperationList- Returns:
- the selectBody
-
getSelectItems
protected List<net.sf.jsqlparser.statement.select.SelectItem> getSelectItems(net.sf.jsqlparser.statement.select.PlainSelect plainSelect) 获取查询列- Parameters:
plainSelect- PlainSelect- Returns:
- 结果
-
addRowNumber
protected net.sf.jsqlparser.statement.select.SelectItem addRowNumber(net.sf.jsqlparser.statement.select.PlainSelect plainSelect, List<net.sf.jsqlparser.statement.select.SelectItem> autoItems) 获取 ROW_NUMBER() 列- Parameters:
plainSelect- 原查询autoItems- 自动生成的查询列- Returns:
- ROW_NUMBER() 列
-
processSelectBody
protected void processSelectBody(net.sf.jsqlparser.statement.select.SelectBody selectBody, int level) 处理selectBody去除Order by- Parameters:
selectBody- 获取bodylevel- int
-
processPlainSelect
protected void processPlainSelect(net.sf.jsqlparser.statement.select.PlainSelect plainSelect, int level) 处理PlainSelect类型的selectBody- Parameters:
plainSelect- 获取bodylevel- int
-
processFromItem
protected void processFromItem(net.sf.jsqlparser.statement.select.FromItem fromItem, int level) 处理子查询- Parameters:
fromItem- FromItemlevel- int
-
isNotEmptyList
-
cloneOrderByElement
protected net.sf.jsqlparser.statement.select.OrderByElement cloneOrderByElement(net.sf.jsqlparser.statement.select.OrderByElement orig, String alias) 复制 OrderByElement- Parameters:
orig- 原 OrderByElementalias- 新 OrderByElement 的排序要素- Returns:
- 复制的新 OrderByElement
-
cloneOrderByElement
protected net.sf.jsqlparser.statement.select.OrderByElement cloneOrderByElement(net.sf.jsqlparser.statement.select.OrderByElement orig, net.sf.jsqlparser.expression.Expression expression) 复制 OrderByElement- Parameters:
orig- 原 OrderByElementexpression- 新 OrderByElement 的排序要素- Returns:
- 复制的新 OrderByElement
-
getOrderByElements
-