babelfish for postgresql 分析--todo

babelfish的架构

支持TDS协议 可以默认通过1433端口连接,支持pl/t-sql的存储过程

插件目录结构

contrib/babelfishpg_tsql(T-SQL 扩展,提供处理 T-SQL 语法所需的代码)

antlr/

TSqlLexer.g4, TSqlParser.g4:T-SQL 语法定义(ANTLR)。

cmake-dir/FindANTLR.cmake:构建支持。

src/(核心代码,重点)

tsqlIface.cpp / tsqlIface.hpp:ANTLR 解析驱动与两遍遍历(Mutator→Builder)、批级语句直通、SLL→LL 回退等。

backend_parser/:Bison/Flex 路径的入口与词法过滤器(例如 parser.c 中的 babelfishpg_tsql_raw_parser、pgtsql_base_yylex)。

pl_.c/.h(pl_comp、pl_exec、pl_funcs、pl_handler 等):PL/tsql 的编译、执行、内置函数与处理器;与 PostgreSQL SPI/执行器衔接。
tsql_analyze.c/.h:T-SQL 语义分析与重写(对象名、函数/类型映射、特性改写)。
analyzer.c/.h:进一步的分析/重写辅助。
hooks.c/.h:注册 PG 钩子(解析、计划、执行期适配)。
guc.c/.h:GUC 配置项(如启用详细日志、SLL 模式开关等)。
catalog.c/.h、multidb.c/.h:逻辑数据库与模式映射、对象目录适配(db.schema.object)。
permissions/rolecmds/schemacmds:权限/角色/模式相关命令适配。
linked_servers.c/.h:Linked Server 支持。
pltsql_
:类型/转换(pltsql_coerce)、分区、权限、规则工具、utils 等。

iterative_exec.c/.h:迭代执行器与异常处理(TRY/CATCH 等)。

stmt_walker.c/.h:语句树遍历工具。

fts_scan.l, fts_parser.y, fts.c:全文检索相关解析/实现。

json_funcs.c:FOR JSON/JSON 相关。

table_variable_mvcc.c/.h:表变量的 MVCC 语义支撑。

prepare.c、procedures.c、session.c:准备/过程/会话管理。

codegen.c/.h:可能的生成/代码片段处理。

pl_explain.c/.h:EXPLAIN 集成与解析耗时(例如 antlr_parse_time)。

sql/ 与 sql/upgrades/ 安装 SQL、sys.* 视图、信息架构、函数与升级脚本(版本跨度很全)。

runtime/

runtime/basic.sql, functions.c:运行时支持例程。

expected/test/ 基础回归测试输出。

//todo
babelfish for postgresql 分析--babelfishpg_tsql

contrib/babelfishpg_tds(TDS 协议扩展,实现 TDS 客户端-服务器协议)

src/backend/tds/

tds.c/tds_srv.c/tdsprotocol.c/tdsresponse.c/...:TDS 协议解析、登录、批处理、RPC、结果封包、事务映射、类型 I/O、BulkLoad 等。

tdslogin.c, tdscomm.c, tdssecure.c, tds-secure-openssl.c:连接、通信与安全层。

tdsprinttup.c:将 PG 元组打印为 TDS 行格式。

tdsxact.c:事务桥接。

src/include/

tds_*.h 与公共头:协议结构、类型码、I/O 映射、错误/时间戳工具等。

src/backend/fault_injection:故障注入框架与测试。

src/backend/utils/adt/{numeric,varchar,xml}.c:针对 TDS 的特定适配/重载实现。

SQL 控制/安装文件与自测 test/。

babelfish for postgresql 分析--babelfishpg_tds

contrib/babelfishpg_common(SQL Server 数据类型,提供模拟 SQL Server 行为的特定数据类型)

src/

类型与运算:datetime/datetime2/datetimeoffset/smalldatetime、numeric/bit/varbinary/varchar、sqlvariant、uniqueidentifier 等实现与头文件。

collation.c/.h:排序/比较适配。

spatialtypes.c/.h + geo_parser.y/geo_scan.l:空间类型支持(geometry/geography)。

encoding/:多种字符集转换(utf8 与 gbk/sjis/uhc/win/big5 等)。

instr.、logical.h/typecode.:内部工具与类型编码。

sql/ 与 sql/upgrades/:安装与升级脚本、money 子模块脚本、字符串/运算/强制转换等。

contrib/babelfishpg_money(货币数据类型,实现精确数值类型的货币数据类型)

fixeddecimal.c/.h、smallmoney.c 以及对应 SQL 脚本(包含聚合、BRIN 索引支持等)和测试用例。

contrib/babelfishpg_unit(单元测试扩展)

提供辅助 C 扩展与 SQL 安装脚本,用于内部单元测试/示例。

test(端到端与多客户端生态测试)

dotnet/:.NET 测试(输入、期望输出、驱动源码)。

JDBC/:Maven 项目,JDBC 测试套(expected/input/src/utils 等)。

odbc/:ODBC 相关测试脚本与配置。

python/:Python 驱动脚本,批量执行、结果比对、升级验证等。

相关推荐
知识分享小能手18 分钟前
SQL Server 2019入门学习教程,从入门到精通,SQL Server 2019数据库的操作(2)
数据库·学习·sqlserver
踩坑小念1 小时前
秒杀场景下如何处理redis扣除状态不一致问题
数据库·redis·分布式·缓存·秒杀
萧曵 丶2 小时前
MySQL 语句书写顺序与执行顺序对比速记表
数据库·mysql
Wiktok3 小时前
MySQL的常用数据类型
数据库·mysql
曹牧3 小时前
Oracle 表闪回(Flashback Table)
数据库·oracle
J_liaty3 小时前
Redis 超详细入门教程:从零基础到实战精通
数据库·redis·缓存
m0_706653233 小时前
用Python批量处理Excel和CSV文件
jvm·数据库·python
山岚的运维笔记3 小时前
SQL Server笔记 -- 第15章:INSERT INTO
java·数据库·笔记·sql·microsoft·sqlserver
Lw老王要学习4 小时前
CentOS 7.9达梦数据库安装全流程解析
linux·运维·数据库·centos·达梦
qq_423233904 小时前
Python深度学习入门:TensorFlow 2.0/Keras实战
jvm·数据库·python