本文整理自网络,侵删。
目录
- 引言
- 解析Sql的入口
- 解析Sql
- 1. 将 SQL 解析为抽象语法树
- 2. 提取Sql片段
- 3. 填充Sql片段,生成解析结果
- 总结
引言
ShardingSphere的SQL解析,本篇文章源码基于4.0.1版本
ShardingSphere的分片引擎从解析引擎到路由引擎到改写引擎到执行引擎再到归并引擎,一步一步对分片操作进行处理,我们这篇文章先从解析引擎开始,深入分析一下Sql的解析引擎处理流程。
解析Sql的入口
SQLParseEngine这个类是sql解析引擎对应的类,通过看它的parse()方法,我们知道sql解析的过程就是构建SQLStatement对象的过程,方法中调用了SQLParseKernel来创建对象,然后调用它的parse()方法来完成。因此我们把重心放在这个方法上
解析Sql
SQLParseKernel的parse()方法:
public SQLStatement parse() { SQLAST ast = parserEngine.parse(); Collection<SQLSegment> sqlSegments = extractorEngine.extract(ast); Map<ParserRuleContext, Integer> parameterMarkerIndexes = ast.getParameterMarkerIndexes(); return fillerEngine.fill(sqlSegments, parameterMarkerIndexes.size(), ast.getSqlStatementRule()); }
- 将原始SQL通过解析器解析为抽象语法树
- 使用提取器根据提取规则提取Sql片段结合
- 使用填充器根据填充规则填充Sql片段生成SQL解析后的结果并返回
下面将具体看一下这三步
1. 将 SQL 解析为抽象语法树
这一块是对应的SQLParserEngine的parse()方法,这个方法的主要逻辑是利用工厂类SQLParserFactory来创建Sql解析器实例,由于不同的数据库对应的SQL解析器也不相同,所以这一块的逻辑也是利用了Java的SPI机制来创建配置的SQLParserEntry实例对象,根据不同的数据库类型选择不同的Sql解析器,最终会生成SQLAST对象,也就是SQL 的抽象语法树。
2. 提取Sql片段
这一步对应的是SQLSegmentsExtractorEngine的extract()方法,返回的是所有的Sql片段的集合。
相关阅读 >>
asp.net过滤类sqlfilter,防止sql注入 font color=red原创font
更多相关阅读请进入《sql》频道 >>

数据库系统概念 第6版
机械工业出版社
本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。
转载请注明出处:木庄网络博客 » ShardingSphere解析SQL示例详解
相关推荐
评论
管理员已关闭评论功能...