Parser 和 Resolver 分别用于完成语法解析和语义分析工作,在OceanBase里,Parser 和 Resolver 是兼容 Mysql 特性最重要的两个部分,也是 SQL 引擎对外表现最直观的部分。
Parser 把用户的查询字符串解析成一个一个的 Token,根据这些 Token 所代表的语法含义进行初步的合法性检查,并最终生成一个合法的语法树(Parse Tree)。Parse Tree 不包含任何的语义信息,是对查询字符串的字面意义上的形式化表达。
Resolver 通过访问全局 Schema 分析 Parse Tree 各个节点的含义,把 ParseTree 从字面意义解析成为一个具有数据库逻辑语义的语句(Statement)或称查询树(Query Tree),所有数据库语义相关的检查都在这一阶段完成。Statement 是对查询的逻辑表达,用户最初的字面意义,如表名、列名在这里都由表ID、列ID 表达,同时 Resolver会生成必要的信息供查询重写和查询优化阶段使用。