实用指南:babelfish for postgresql 分析--todo

news/2025/10/4 18:35:41/文章来源:https://www.cnblogs.com/lxjshuju/p/19125813

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 驱动脚本,批量执行、结果比对、升级验证等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/927429.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySql的存储过程以及JDBC实战 - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

安徽合肥建设银行招聘网站万维网包括哪些网站

springboot745简历系统 获取源码——》公主号:计算机专业毕设大全

做外贸营销型网站浅谈博物馆网站建设意义

目录 基本查找*: 二分查找*: 数据单调递增: 数据单调递减: 总结规律: 插值查找*: 斐波那契查找(了解原理):以后补 分块 查找*: 特殊 情况&#xff0…

深圳哪家做网站最好辽宁建设工程信息网ca锁激活

本文目录 本系列文章从新开始为啥要用TypeScript官方文档程序框架从package.json开始tsconfig.jsonJest的配置 jest.config.js服务的实现自动化测试setup.ts文件夹integration 执行及测试对应代码及branch 本系列文章 SAP CAP篇一: 快速创建一个Service,基于Java的…

阿里云万网域名关键词优化排名软件

1. Json 数据解析和绑定 客户端传参,后端接收并解析到结构体 package mainimport ("github.com/gin-gonic/gin""net/http" )// 定义接收数据的结构体 type Login struct {// binding:"required"修饰的字段,若接收为空值…

NFC 贴卡自动拨打微信视频电话

思路来源:b站的视频教程: https://www.bilibili.com/video/BV1Vo3izgEDT/ 文字教程: 下面的操作均在需要贴卡自动拨打微信电话的手机进行:1)下载 NFC Tasks 、NFC Tools、自动脚本精灵,权限打开通知、辅助功能、…

请人建网站wordpress 不做SEO

在项目正式上线之前,我们通常需要通过压测来评估当前系统能够支撑的请求量、排查可能存在的隐藏bug;压力测试(压测)是确保系统在高负载情况下仍能稳定运行的重要步骤。通过模拟高并发场景,可以评估系统的性能瓶颈、可靠…

实用指南:d-分离:图模型中的条件独立性判定准则

实用指南:d-分离:图模型中的条件独立性判定准则pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas",…

微信嵌入手机网站浙江建设继续教育网站首页

题目背景 思路解析:很经典的贪心问题,把物品按照从便宜到贵的顺序排好序,然后按照富贵程度排人,直接暴力会tle所以这里采用双指针. #include<iostream> #include<algorithm> #include<cstring> #include<cmath> #include<string> using namesp…

win7可以做网站吗宠物网站模板下载

几年的时间&#xff0c;从OneNote到为知笔记&#xff0c;再到印象笔记&#xff0c;再回到为知笔记和OneNote&#xff0c;用下来感觉各有优势&#xff0c;也有不爽的地方。 早年间OneNote的同步很有问题&#xff0c;一次同步冲突导致失去了几乎所有笔记本。心灰意冷之下就离开了…

[MCP] 监听资源更新

有两种形式:资源列表变化 资源内容变化资源列表变化 用于监听资源目录是否发生增删改。 工作机制 当服务器上的资源列表发生变化时(例如 resources/list 中的项发生增删),服务器主动发送通知: notifications/reso…

详细介绍:Sentinel 深度解析:限流与熔断降级的微服务稳定性保障实践

详细介绍:Sentinel 深度解析:限流与熔断降级的微服务稳定性保障实践2025-10-04 18:15 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto…

GitHub 使用技巧 - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

[RAG] 基础知识

RAG基础知识 基本介绍 RAG,全称 Retrieval-Augmented Generation,中文:检索增强生成 核心思想:为大模型补充来自于外部的相关数据与上下文,从而帮助大模型生成更丰富、更准确、更可靠的内容。 也就是 临时给大模型…

CF1408F Two Different

关键是要想到可以“借数”CF1408F Two Different 挺好的一道思维题。 手玩几个例子之后发现以下性质: 1、直接变的话,只能同时把 \(2^k\) 个数变成一样的,次数大概是 \(2^{k - 1} \times k\)。 2、零散的小堆可以向…

青岛住房和城乡建设部网站网站登录不了

在Cocos Creator中&#xff0c;脚本代码文件分为模块和插件两种方式&#xff1a; 模块一般就是项目的脚本&#xff0c;包含项目中创建的代码、引擎模块、第三方模块。 插件脚本&#xff0c;是指从 Cocos Creator 属性检查器中导入的插件&#xff0c;一般是引入第三方引入库文件…

区块链网站用vue.js做怎么样早8晚5双休的工作

TimeStamp 更新操作可能伴随数据冲突&#xff0c;我们可以通过并发处理妥善解决这一方面的问题。避免数据冲突比较方便的做法是自动加入字节数组&#xff08;byte[]&#xff09;类型的TimeStamp属性&#xff0c;对应到数据表中的rowvewsion类型字段&#xff0c;自动监控数据的…

数据结构 - 字典树 Trie

字典树(Trie)是一种树形数据结构,主要用于高效地存储和检索字符串集合。它通过利用字符串的公共前缀来节省存储空间,常用于词典查询、自动补全等场景。 1. 什么是字典树 字典树的每条边代表一个字符,从根节点到某…

激活函数实现

激活函数实现 1.1:创建激活函数工程目录 创建激活函数目录- src (存放源代码)- testbench (存放测试文件)- docs (存放文档)- lut_data (存放查找表数据)- python_utils (存放Python辅助脚本…

漏洞赏金入门指南:从零开始的实战方法论

本文详细介绍了漏洞赏金猎人的入门方法论,包括基础知识学习、时间分配策略、持续学习的重要性,以及如何保持动力和专注度。文章打破了"快速致富"的迷思,为初学者提供了切实可行的成长路径。漏洞赏金入门指…