java.lang.Object
org.miaixz.bus.pager.parsing.DefaultSqlServerSqlParser
- All Implemented Interfaces:
SqlServerSqlParser
Default implementation of
SqlServerSqlParser for converting SQL Server queries to paginated statements.
Important considerations:
- Ensure your SQL is executable first.
- It's best to include an ORDER BY clause directly in the SQL, which can be automatically extracted.
- If there is no ORDER BY, you can provide it as a parameter, but you must ensure its correctness.
- If the SQL has an ORDER BY, it can be overridden by the `orderby` parameter.
- Column names in the ORDER BY clause cannot be aliases.
- Do not use single quotes (') for table and column aliases.
- Since:
- Java 17+
- Author:
- Kimi Liu
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected static final StringAlias prefix for generated columns.protected static final StringRow number column name.protected static final net.sf.jsqlparser.schema.ColumnRow number column object.static final StringPage size placeholder.static final net.sf.jsqlparser.expression.AliasAlias for the page table.protected static final StringTable alias name.static final StringStart row number placeholder.protected static final net.sf.jsqlparser.statement.select.TopTOP 100 PERCENT clause.protected static final StringOuter wrapper table name. -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprotected net.sf.jsqlparser.statement.select.SelectItem<?> addRowNumber(net.sf.jsqlparser.statement.select.PlainSelect plainSelect, List<net.sf.jsqlparser.statement.select.SelectItem<?>> autoItems) Gets the ROW_NUMBER() column.protected net.sf.jsqlparser.statement.select.OrderByElementcloneOrderByElement(net.sf.jsqlparser.statement.select.OrderByElement orig, String alias) Clones an OrderByElement.protected net.sf.jsqlparser.statement.select.OrderByElementcloneOrderByElement(net.sf.jsqlparser.statement.select.OrderByElement orig, net.sf.jsqlparser.expression.Expression expression) Clones an OrderByElement.convertToPageSql(String sql) Converts a SQL statement to a paginated statement.convertToPageSql(String sql, Integer offset, Integer limit) Converts a SQL statement to a paginated statement.protected List<net.sf.jsqlparser.statement.select.OrderByElement> getOrderByElements(net.sf.jsqlparser.statement.select.PlainSelect plainSelect, List<net.sf.jsqlparser.statement.select.SelectItem<?>> autoItems) Gets the new sorting list.protected net.sf.jsqlparser.statement.select.SelectgetPageSelect(net.sf.jsqlparser.statement.select.Select select) Gets an outer wrapped TOP query.protected List<net.sf.jsqlparser.statement.select.SelectItem<?>> getSelectItems(net.sf.jsqlparser.statement.select.PlainSelect plainSelect) Gets the query columns.booleanisNotEmptyList(List<?> list) Checks if a list is not empty.protected voidprocessFromItem(net.sf.jsqlparser.statement.select.FromItem fromItem, int level) Processes a subquery.protected voidprocessPlainSelect(net.sf.jsqlparser.statement.select.PlainSelect plainSelect, int level) Processes a PlainSelect type of select.protected voidprocessSelectBody(Object select, int level) Processes the selectBody to remove Order by.protected net.sf.jsqlparser.statement.select.SelectwrapSetOperationList(net.sf.jsqlparser.statement.select.SetOperationList setOperationList) Wraps a SetOperationList.
-
Field Details
-
START_ROW
Start row number placeholder. -
PAGE_SIZE
Page size placeholder. -
WRAP_TABLE
Outer wrapper table name.- See Also:
-
PAGE_TABLE_NAME
Table alias name.- See Also:
-
PAGE_TABLE_ALIAS
public static final net.sf.jsqlparser.expression.Alias PAGE_TABLE_ALIASAlias for the page table. -
PAGE_ROW_NUMBER
Row number column name.- See Also:
-
PAGE_ROW_NUMBER_COLUMN
protected static final net.sf.jsqlparser.schema.Column PAGE_ROW_NUMBER_COLUMNRow number column object. -
TOP100_PERCENT
protected static final net.sf.jsqlparser.statement.select.Top TOP100_PERCENTTOP 100 PERCENT clause. -
PAGE_COLUMN_ALIAS_PREFIX
Alias prefix for generated columns.- See Also:
-
-
Constructor Details
-
DefaultSqlServerSqlParser
public DefaultSqlServerSqlParser()
-
-
Method Details
-
convertToPageSql
Converts a SQL statement to a paginated statement.- Parameters:
sql- the SQL statement- Returns:
- the paginated SQL string
-
convertToPageSql
Converts a SQL statement to a paginated statement.- Specified by:
convertToPageSqlin interfaceSqlServerSqlParser- Parameters:
sql- the SQL statementoffset- the starting positionlimit- the ending position- Returns:
- the paginated SQL string
-
getPageSelect
protected net.sf.jsqlparser.statement.select.Select getPageSelect(net.sf.jsqlparser.statement.select.Select select) Gets an outer wrapped TOP query.- Parameters:
select- the Select statement- Returns:
- the wrapped Select statement
-
wrapSetOperationList
protected net.sf.jsqlparser.statement.select.Select wrapSetOperationList(net.sf.jsqlparser.statement.select.SetOperationList setOperationList) Wraps a SetOperationList.- Parameters:
setOperationList- the SetOperationList- Returns:
- the wrapped Select statement
-
getSelectItems
protected List<net.sf.jsqlparser.statement.select.SelectItem<?>> getSelectItems(net.sf.jsqlparser.statement.select.PlainSelect plainSelect) Gets the query columns.- Parameters:
plainSelect- the PlainSelect statement- Returns:
- the list of select items
-
addRowNumber
protected net.sf.jsqlparser.statement.select.SelectItem<?> addRowNumber(net.sf.jsqlparser.statement.select.PlainSelect plainSelect, List<net.sf.jsqlparser.statement.select.SelectItem<?>> autoItems) Gets the ROW_NUMBER() column.- Parameters:
plainSelect- the original queryautoItems- auto-generated query columns- Returns:
- the ROW_NUMBER() column
-
processSelectBody
Processes the selectBody to remove Order by.- Parameters:
select- the querylevel- the level of nesting
-
processPlainSelect
protected void processPlainSelect(net.sf.jsqlparser.statement.select.PlainSelect plainSelect, int level) Processes a PlainSelect type of select.- Parameters:
plainSelect- the querylevel- the level of nesting
-
processFromItem
protected void processFromItem(net.sf.jsqlparser.statement.select.FromItem fromItem, int level) Processes a subquery.- Parameters:
fromItem- the FromItemlevel- the level of nesting
-
isNotEmptyList
Checks if a list is not empty.- Parameters:
list- the list- Returns:
- true if the list is not empty, false otherwise
-
cloneOrderByElement
protected net.sf.jsqlparser.statement.select.OrderByElement cloneOrderByElement(net.sf.jsqlparser.statement.select.OrderByElement orig, String alias) Clones an OrderByElement.- Parameters:
orig- the original OrderByElementalias- the new sorting element for the OrderByElement- Returns:
- the cloned new OrderByElement
-
cloneOrderByElement
protected net.sf.jsqlparser.statement.select.OrderByElement cloneOrderByElement(net.sf.jsqlparser.statement.select.OrderByElement orig, net.sf.jsqlparser.expression.Expression expression) Clones an OrderByElement.- Parameters:
orig- the original OrderByElementexpression- the new sorting element for the OrderByElement- Returns:
- the cloned new OrderByElement
-
getOrderByElements
protected List<net.sf.jsqlparser.statement.select.OrderByElement> getOrderByElements(net.sf.jsqlparser.statement.select.PlainSelect plainSelect, List<net.sf.jsqlparser.statement.select.SelectItem<?>> autoItems) Gets the new sorting list.- Parameters:
plainSelect- the original queryautoItems- the newly generated query elements- Returns:
- the new sorting list
-