java.lang.Object
org.miaixz.bus.pager.parsing.DefaultCountSqlParser
- All Implemented Interfaces:
CountSqlParser
sql解析类,提供更智能的count查询sql
- Since:
- Java 17+
- Author:
- Kimi Liu
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final Stringprotected static final net.sf.jsqlparser.expression.AliasFields inherited from interface org.miaixz.bus.pager.parsing.CountSqlParser
AGGREGATE_FUNCTIONS -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptiongetSimpleCountSql(String sql) 获取简单的 COUNT SQL,适用于无法解析或复杂场景。getSimpleCountSql(String sql, String name) 获取简单的 COUNT SQL,指定 COUNT 列名。getSmartCountSql(String sql, String countColumn) 获取智能的 COUNT SQL,自动检测是否需要保留 ORDER BY。booleanisSimpleCount(net.sf.jsqlparser.statement.select.PlainSelect select) 判断是否可以使用简单的 COUNT 查询方式。protected boolean检查是否需要保留 ORDER BY。protected boolean检查是否需要保留子查询的 ORDER BY。booleanorderByHashParameters(List<net.sf.jsqlparser.statement.select.OrderByElement> orderByElements) 判断 ORDER BY 是否包含参数(?)。voidprocessFromItem(net.sf.jsqlparser.statement.select.FromItem fromItem) 处理 FROM 子句中的子查询。voidprocessPlainSelect(net.sf.jsqlparser.statement.select.PlainSelect plainSelect) 处理 PlainSelect 类型的 SELECT 主体。voidprocessSelect(net.sf.jsqlparser.statement.select.Select select) 处理 SELECT 主体,移除不必要的 ORDER BY。voidprocessWithItemsList(List<net.sf.jsqlparser.statement.select.WithItem<?>> withItemsList) 处理 WITH 子句,移除不必要的 ORDER BY。net.sf.jsqlparser.statement.select.SelectsqlToCount(net.sf.jsqlparser.statement.select.Select select, String name) 将sql转换为count查询Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface org.miaixz.bus.pager.parsing.CountSqlParser
getSmartCountSql
-
Field Details
-
KEEP_ORDERBY
- See Also:
-
TABLE_ALIAS
protected static final net.sf.jsqlparser.expression.Alias TABLE_ALIAS
-
-
Constructor Details
-
DefaultCountSqlParser
public DefaultCountSqlParser()
-
-
Method Details
-
getSmartCountSql
获取智能的 COUNT SQL,自动检测是否需要保留 ORDER BY。 优化字符串处理和解析逻辑,减少性能开销。- Specified by:
getSmartCountSqlin interfaceCountSqlParser- Parameters:
sql- 原始 SQL 查询countColumn- COUNT 列名,默认为 "0"- Returns:
- 优化的 COUNT SQL
-
getSimpleCountSql
获取简单的 COUNT SQL,适用于无法解析或复杂场景。- Parameters:
sql- 原查询 SQL- Returns:
- 简单的 COUNT SQL
-
getSimpleCountSql
获取简单的 COUNT SQL,指定 COUNT 列名。 优化 StringBuilder 容量预估,减少扩容。- Parameters:
sql- 原查询 SQLname- COUNT 列名- Returns:
- 简单的 COUNT SQL
-
sqlToCount
public net.sf.jsqlparser.statement.select.Select sqlToCount(net.sf.jsqlparser.statement.select.Select select, String name) 将sql转换为count查询- Parameters:
select- 原查询sqlname- 名称- Returns:
- 返回count查询sql
-
isSimpleCount
public boolean isSimpleCount(net.sf.jsqlparser.statement.select.PlainSelect select) 判断是否可以使用简单的 COUNT 查询方式。 避免使用过时的 Parenthesis 类,改用 ParenthesedExpressionList 或通用 Expression 处理。- Parameters:
select- 查询- Returns:
- 是否为简单 COUNT
-
processSelect
public void processSelect(net.sf.jsqlparser.statement.select.Select select) 处理 SELECT 主体,移除不必要的 ORDER BY。 优化递归处理逻辑,减少重复调用。- Parameters:
select- 查询信息
-
processPlainSelect
public void processPlainSelect(net.sf.jsqlparser.statement.select.PlainSelect plainSelect) 处理 PlainSelect 类型的 SELECT 主体。 优化 JOIN 和 FROM 项处理逻辑。- Parameters:
plainSelect- 查询
-
processWithItemsList
public void processWithItemsList(List<net.sf.jsqlparser.statement.select.WithItem<?>> withItemsList) 处理 WITH 子句,移除不必要的 ORDER BY。- 使用 List<WithItem<?>> 适配 JSqlParser 5.1 的泛型 API。
- 提前检查 keepSubSelectOrderBy 和空列表,减少不必要循环。
- 使用 for-each 循环,减少迭代器创建。
- 提前检查 select 非空,减少无效递归。
- Parameters:
withItemsList- WITH 子句列表
-
processFromItem
public void processFromItem(net.sf.jsqlparser.statement.select.FromItem fromItem) 处理 FROM 子句中的子查询。 优化类型检查和递归逻辑。- Parameters:
fromItem- FROM 子句项
-
keepOrderBy
protected boolean keepOrderBy()检查是否需要保留 ORDER BY。 使用 PageMethod 的配置判断。- Returns:
- 是否保留 ORDER BY
-
keepSubSelectOrderBy
protected boolean keepSubSelectOrderBy()检查是否需要保留子查询的 ORDER BY。- Returns:
- 是否保留子查询 ORDER BY
-
orderByHashParameters
public boolean orderByHashParameters(List<net.sf.jsqlparser.statement.select.OrderByElement> orderByElements) 判断 ORDER BY 是否包含参数(?)。 优化空检查和循环效率。- Parameters:
orderByElements- ORDER BY 元素列表- Returns:
- 是否包含参数
-