SQL 解析器是数据库引擎的”咽喉”——每条 SQL 必须先被拆解成语法树,才能进入后续的改写、优化和执行阶段。本文解读 OceanBase 中 ob_sql_parser.cpp 这个文件,它虽然只有 124 行,却是连接 C++ 上层框架与 bison/flex 生成的 C 解析器的关键桥梁,也是理解整个解析器架构的最佳切入点。
OceanBase源码解读:SQL改写阶段总入口 ob_transformer_impl
OceanBase源码解读:SQL改写阶段总入口 ob_transformer_impl
一条 SQL 从客户端进入 Observer 进程后,会先后经历「解析 → 改写 → 优化 → 代码生成」四个阶段。其中改写阶段(Rewrite)的核心目标是:在不改变 SQL 语义的前提下,把语句对象(ObDMLStmt)”重塑”成更易于优化器(CBO)处理的形态。本文聚焦 1247 行的 ob_transformer_impl.cpp——它把 30 余种改写规则(视图合并、子查询去关联、OR 展开、谓词下推、count 转 exists 等)收敛到一个统一的调度框架内,是改写阶段的总指挥。
OceanBase源码解读:SQL语义解析总入口 ob_resolver
在 OceanBase 的 SQL 编译流水线中,Parser 负责把 SQL 文本切成一棵 ParseNode 语法树;紧接其后的 Resolver 阶段则把这棵语法树”翻译”成带有 schema/类型/列引用信息的 ObStmt 语义树。src/sql/resolver/ob_resolver.cpp 就是这个语义解析阶段的总入口:所有 DML、DDL、DCL、TCL、命令语句(SHOW/SET/KILL 等)以及 PL 编译预处理都要经过它。
OceanBase源码解读:SQL总入口ob_sql.cpp
如果把 OceanBase 的 SQL 引擎比作一条流水线,src/sql/ob_sql.cpp 就是流水线的大门。所有外部 SQL——无论是普通文本协议、Prepared Statement,还是 PL 块里的内嵌 SQL——最终都会先汇聚到 ObSql 这个类,再被分发到解析器、解析器、改写器、优化器、代码生成器,最后拿到可执行的物理计划。本文聚焦这一”总入口”,把它的职责、核心数据结构、以及一条 SQL 从进门到出门的完整流程讲清楚。
OceanBase源码解读:observer启动流程
引言
本系列文章是对 OceanBase v4.3.5_CE_BP6 开源源码的逐模块深度解读。本文解读 observer 进程的启动流程,覆盖 main.cpp 和 ob_server.cpp 两个核心文件。
oceanbase v4.2.5 mysql模式租户各种数据类型说明
Oceanbase SQL相关操作记录
oceanbase SQL 晚期物化 执行计划
物理备份恢复问题排查相关
本文针对的群体,是已经对备份恢复的基本原理了解的用户群。笔者从内部使用,外部用户等渠道收集的相关备份和恢复过程比较常见的问题,进行了相关的排查经验梳理。对于刚接触备份恢复的用户,建议先去开源官网了解相关知识:OceanBase 备份与恢复 29
继续阅读物理备份恢复问题排查相关oceanbase SQL查询改写
1、SQL改写系列一:OceanBase 查询改写实践
继续阅读oceanbase SQL查询改写