跳到主要内容
版本:v0.3.0

SQL 解析

Pisa-Proxy 除了理解 SQL 协议外, 能读懂 SQL 语句也是一个很重要的功能,读写分离,分片等功能也都依赖 SQL 解析,在 Pisa-Proxy 中占着举足轻重的作用。 由于 Pisa-Proxy 支持多种数据源,因此在 Pisa-Proxy 中,每种不同的数据源都要实现各自对应的 SQL 解析,未来我们会支持不同数据源使用 SQL 之间的转换,以实现快速支持新的数据源。

已支持语句

  • SELECT
  • INSERT
  • UPDATE
  • DELETE
  • PREPARE
  • EXECUTE
  • BEGIN
  • SET
  • SHOW
  • CREATE

设计说明

目前 Pisanix 只实现了对 MySQL 的语法的解析。

MySQL 语法

为了最大的程度的兼容原生的 MySQL 语法,Pisanix 采用原生的 MySQL 语法文件,基于 Grmtools 实现了 SQL 语法解析。 Grmtools 是一个用 Rust 写的兼容 Yacc 的语法解析工具,详细信息请参考 Github

AST 说明

Pisanix 中的 SQL 解析不会为所有表达式都生成 AST,只会为 Pisanix 感兴趣的部分生成 AST。 详细信息请参考 Github

测试

目前使用了 MySQL test 框架中能正常运行的 SQL 语句作为测试集来测试。目前只测试了 SELECT 语句,有98%的语句能成功解析, 还在不断完善中。