引言
PostgreSQL 与 Oracle 的语法差异较大,为兼容 Oracle 语法并保持原生 PostgreSQL 语法,IvorySQL 采用了双 Parser 框架,动态切换不同 Parser,实现 Oracle 兼容语法与 PostgreSQL 原生语法的共存。
双 Parser 架构设计总览
双 Parser 的实现目标是在 SQL 和服务器编程语言两个层面兼容 Oracle。通过端口选择或兼容模式设定,实现 Oracle/PG 语法解析的“热切换”。
涉及到的核心模块包括:
- SQL 解析层,即 Oracle 风格语法树生成;
- 服务器端编程语言层(通过全新的 PL/iSQL 过程语言实现兼容 Oracle 的 PLSQL)
SQL 端词法语法分离
概述
基本做法是新增一套兼容 Oracle 风格的语法和词法,在开启 Oracle 兼容模式时,采用 Oracle 风格的语法分析,生成对应的语法树。
具体实现步骤
在 src/backend/ 目录下新建一个 oracle_Parser 目录,将 src/backend/Parser/ 中的 scan.l 和 gram.y 复制到新目录,并分别重命名为 ora_gram.y 和 ora_scan.l,添加 Oracle 风格的语法和词法分析代码。同时,将 keywords.c 文件复制到该目录,用于存放自定义的关键字。该 oracle_Parser 目录会编译成一个动态库 libParser_oracle.so。当开启 Oracle 兼容模式时,

最低0.47元/天 解锁文章
2922

被折叠的 条评论
为什么被折叠?



