netbadb-types
共享 ID、物理类型与语义类型
架构
NetbaDB 将应用语言相关问题限制在前端边界。Go、Rust 或未来的 schema 前端均应生成同一份 Canonical Schema IR。核心不检查 Go 类型,也不读取应用侧 Rust 结构体。
以下流水线为稳定的架构界面:
Application language schema
↓
Language frontend / SDK
↓
Canonical Schema IR
↓
Parser → HIR + type checking
↓
Typed Relational IR
↓
Optimizer / Planner
↓
Executor
↓
Transaction boundary
↓
Storage当前路径为同步执行。查询语言是有限的原生子集,不提供完整 SQL 兼容。核心不依赖 Go、网络运行时、JSON 执行 IR,或应用特有的 Rust 结构体。
Rust Schema API
↓
SELECT / JOIN / ORDER BY / GROUP BY + typed DML
↓
Typed HIR
↓
Logical query / DML statement plan
↓
Scan + nested-loop join + sort + grouped aggregate
↓
Join / filter / sort / aggregate / projection / limit + mutation
↓
Heap
↓
Transaction lifecycle + versioned WAL
↓
Buffer pool (guards, pinning, dirty writeback)
↓
Slotted pages
↓
Page manager / database filenetbadb-schema 用显式 Rust 结构保存数据库含义,独立于任何应用语言。一列包含稳定 ColumnId、名字、TypeSpec(物理类型 + 可选语义名)、可空性与主键元数据。
Schema::new 是可失败的构造路径,并委托 Schema::validate。校验拒绝重复的表 / 列 ID 与名字、空名字,以及空的语义类型名。规范名是前端无关的 UTF-8 身份,相等性精确且区分大小写。
每张通过校验的 TableDef 都有规范编码版本 1:以 NBTS 开头,然后是显式小端版本、表身份与按声明顺序的列。这些字节上的 SHA-256 就是 32 字节 SchemaFingerprint。Rust 枚举判别值、结构布局、Debug 输出或 map 迭代顺序都不参与。
当前查询子集按以下阶段编译:
source → AST → resolved / type-checked HIR → logical plan → physical plan
HIR 拥有源级解析与语义类型检查。关系 IR 拥有关系含义与列出处。规划器选择顺序扫描,以及正确性优先的 nested-loop 来实现逻辑 INNER JOIN。执行器对存储返回的行求值类型化表达式。
层与层之间传递标识符与所有权值,不会将页、帧或元组的长生命周期引用传入规划器、执行器或目录。
图中 A → B 表示 A 依赖 B。下层不得依赖上层策略。尤其是存储不得依赖规划器或执行器,执行器不得依赖 SDK。
共享 ID、物理类型与语义类型
语言无关的 Canonical Schema IR
小型 typed-query AST 与解析器
名字解析与名义类型检查
类型化逻辑关系 IR
AST → HIR → 逻辑计划
逻辑计划 → 物理计划,含 IndexScan
SDK Schema Spec v1 解析与指纹
稳定的、由 schema 驱动的 SQL 诊断
目录与计划检查 DTO
Protocol v1 二进制线协议
同步 Protocol v1 远程客户端
会话、授权与阻塞式 TCP 运行时
Schema Spec 校验与 Go 源码生成
类型化 B+Tree 排序、节点、编解码与分裂
事务、WAL、页、缓冲池、堆与持久 B+Tree
同步物理计划执行
原生嵌入式 Database API
嵌入式与远程应用门面
由清单驱动的独立 TCP 服务器
离线本地检查 CLI
Go 是应用语言,不是实现语言。支持边界如下:
Rust: 原生核心、嵌入式 SDK 与 Protocol v1 远程客户端 Go: 独立 Protocol v1 客户端与生成的类型化绑定
sdk/go 是独立的标准库客户端。生成绑定会校验结果顺序、名称、物理 / 语义类型与可空性,但不生成 SQL 或查询构建 API。
正确性、显式不变量与类型安全优先于便利性。功能以完整、可测试的垂直切片引入。未实现的组件不以完成 API 的形式呈现。