examples/
vsql_rot13 — 仅包含函数的扩展
最简单的 Rust 扩展:一个接受 STRING 并返回 STRING 的 VDF。 用法:目录结构
实现
文件:src/lib.rs
- VDF 接收
&[InValue]并返回VdfReturn——两者都是安全的 Rust 枚举 - NULL 在两端都是一等变体;直接对其进行模式匹配
extension!宏生成服务器在加载时调用的 C 入口点func!声明 SQL 签名;参数和返回类型使用villagesql::Type::*
清单
文件:manifest.json
vsql_rational — 带算术运算的自定义类型
一个完整的自定义类型:以约分形式(numerator, denominator) 存储有理数,并带有算术函数、排序和哈希。
用法:
二进制存储格式
rational 存储 16 字节(小端序):
- 字节 0–7:分子(
i64) - 字节 8–15:分母(
i64)
类型系统函数
文件:src/lib.rs
该类型注册了四个操作:编码(字符串 → 字节)、解码(字节 → 字符串)、比较(用于 ORDER BY)和哈希(用于索引)。
VDF 实现
接受自定义类型的 VDF 会接收InValue::Custom(&[u8]),并自行解码这些字节:
注册
extension! 宏在单个声明中同时注册类型及其函数:
villagesql::custom!("name")用于以参数或返回值的形式引用自定义类型custom_type!注册类型及其 encode/decode/compare/hash 函数default: "0/1"是内建默认值——服务器在类型初始化时会对该字符串调用encode(),因此它必须是一个有效值persisted_length必须与encode()返回的字节长度匹配deterministic: true让优化器可以折叠常量调用
关键实现模式
测试
这两个示例都像 C++ 扩展一样使用 MTR(MySQL Test Runner):--record 生成或更新预期结果。
后续步骤
在 Rust 中创建扩展
SDK 安装、构建以及 extension! 宏
Rust 自定义类型
深入了解 encode、decode、compare 和 hash
Rust API 参考
InValue、VdfReturn 以及宏接口
示例源码
vsql_rot13 和 vsql_rational 的完整源码

