JQuick-SQL AST 解析:从 SQL 文本到强类型节点

JQuick-SQL AST 解析:从 SQL 文本到强类型节点

Meta 描述:使用 JQuickSQLExecutor 将 SQL 解析为 JQuickQueryNode,理解 jquick-sql AST 在 SQL 审计、语句治理和计划生成中的作用。

标签:SQL AST、JQuickSQLExecutor、JQuickQueryNode、SQL 解析、jquick-sql、SQL 审计

官网示例:

前言

字符串截取难以可靠识别嵌套查询、Join 和复杂谓词。jquick-sql 使用解析器生成强类型 AST,使 Java 团队可以按节点检查 SQL 结构,再决定是否继续执行或转换。

一行得到 AST

java 复制代码
import com.github.paohaijiao.ast.JQuickQueryNode;
import com.github.paohaijiao.executor.JQuickSQLExecutor;

JQuickQueryNode ast = new JQuickSQLExecutor().execute(
    "SELECT dept, COUNT(*) FROM emp WHERE salary > 20000 GROUP BY dept"
);
System.out.println(ast);

入口返回 JQuickQueryNode,而不是用正则拆分的字符串片段。

检查 SELECT 子句

README 示例展示了通过强类型访问器读取结构:

java 复制代码
JQuickSelectExpressionNode expression = ast.getSelectStatement().getSelectExpression();
for (JQuickSelectClauseNode clause : expression.getDataSetOp().getSelectClauses()) {
    System.out.println(clause.getNodeType());
    System.out.println(clause.getFromClause() != null);
    System.out.println(clause.getJoinClauses().size());
    System.out.println(clause.getWhereClause() != null);
}

可据此采集表、Join、过滤、分组或排序等信息,构建审计规则。

AST 与计划执行的关系

执行模式下,AST 会经 JQuickASTToLogicalPlanVisitor 转换为逻辑计划,优化后下推为物理计划。仅做 SQL 解析、审计或治理时,不需要注册表,也不会建立数据库连接。

可解析的 SQL 能力

项目 AST 覆盖 SELECT、FROM、JOIN、WHERE、GROUP BY、HAVING、ORDER BY、LIMIT、集合运算、子查询、CTE、CASE WHEN 与函数调用。实际执行支持范围应以 README 为准,例如不支持 FULL OUTER JOIN。

常见问题

**AST 解析会执行 SQL 吗?**不会,JQuickSQLExecutor 只负责解析。

**适合做 SQL 注入防护吗?**可用于结构化检查,但完整安全策略仍应由应用统一实现。

**能直接连库获取元数据吗?**不能,jquick-sql 不提供 JDBC 直连。

总结与拓展

AST 层是 jquick-sql 最适合做治理与二次开发的入口。它为 Java 分布式 SQL 查询引擎的后续逻辑计划、优化和数据集执行提供结构化基础。

Core Advantage

Typed nodes replace fragile string manipulation for SQL understanding.

Applicable Scenarios

SQL auditing, statement classification, governance rules, and custom planning pipelines.

相关推荐
要开心吖ZSH1 小时前
SeaTunnel + Doris + MySQL-CDC 数据同步故障排查个人笔记
数据库·mysql·doris·seatunnel·mysql cdc
泡海椒1 小时前
JQuick-SQL 模块架构:从 SQL AST 到分布式执行
分布式·sql·架构
data analyse 4561 小时前
Session数怎么计算?明确会话切分、超时与跨页规则
java·服务器·数据库
骑着蜗牛撵大象3271 小时前
ToolJet + PostgreSQL:后台表格、查询和流程,一次搭成可远程访问的业务系统
数据库·低代码·docker·postgresql·内部工具·tooljet
先知后行。1 小时前
各种文件系统
linux·服务器·数据库
风若寒892 小时前
MySQL 主从同步,从库中断时间过长,需要主库全量进行覆盖一次
数据库·mysql·主从
l1t2 小时前
duckdb、clickhouse、datafusion、cedardb、tableauhyperapi 5种分析型数据库执行递归求数独SQL比较
数据库·sql·clickhouse
泡海椒2 小时前
JQuick-SQL Worker 生命周期:端口、启动与关闭规范
数据库·sql