一、介绍 SQL 解析引擎(官方)
1 历史
1 SQL 解析作为分库分表类产品的核心,其性能和兼容性是最重要的衡量指标。ShardingSphere 的 SQL 解 析器经历了 3 代产品的更新迭代。
2 第一代 SQL 解析器为了追求性能与快速实现,在 1.4.x 之前的版本使用 Druid 作为 SQL 解析器。经实际 测试,它的性能远超其它解析器。
3 第二代 SQL 解析器从 1.5.x 版本开始,ShardingSphere 采用完全自研的 SQL 解析引擎。由于目的不同, ShardingSphere 并不需要将 SQL 转为一颗完全的抽象语法树,也无需通过访问器模式进行二次遍历。它 采用对 SQL 半理解的方式,仅提炼数据分片需要关注的上下文,因此 SQL 解析的性能和兼容性得到了进 一步的提高。
4 第三代 SQL 解析器从 3.0.x 版本开始,尝试使用 ANTLR 作为 SQL 解析引擎的生成器,并采用 Visit 的方 式从 AST 中获取 SQL Statement。从 5.0.x 版本开始,解析引擎的架构已完成重构调整,同时通过将第一 次解析的得到的 AST 放入缓存,方便下次直接获取相同 SQL 的解析结果,来提高解析效率。因此我们建 议用户采用 PreparedStatement 这种 SQL 预编译的方式来提升性能。
2 功能点
1) 提供独立的 SQL 解析功能
2) 可以非常方便的对语法规则进行扩充和修改(使用了 ANTLR)
3 )支持多种方言的 SQL 解析
| 数据库 | 支持状态 | |
|---|---|---|
| MySQL | 支持,完善 | |
| PostgreSQL | 支持,完善 | |
| SQLServer | 支持 | |
| Oracle | 支持 | |
| SQL92 | 支持 |
4) 提供 SQL 格式化功能(开发中)
5 ) 提供 SQL 模板化功能(开发中)
二、单独使用
<dependency><groupId>org.apache.shardingsphere</groupId><artifactId>shardingsphere-sql-parser-engine</artifactId><version>${project.version}</version></dependency><!-- 根据需要引入指定方言的解析模块(以 MySQL 为例),可以添加所有支持的方言,也可以只添加使用到的--><dependency><groupId>org.apache.shardingsphere</groupId><artifactId>shardingsphere-sql-parser-mysql</artifactId><version>${project.version}</version></dependency>
1 SQLStatement解析工厂

2 解析引擎
3 Statement解析执行器
4 解析引擎
5 SQLParserExecutor

6 解析Facade
7 SQLParserFactory
�
8 SQL 语法解析器
9 语法解析器实现
MySQLStatementParser 是动态编译生成的

10 ParseASTNode
�
11 antlr(ANother Tool for Language Recognition) 的语法解析树 (ParseTree)
Github
12 默认多表解析
三、流程图


