如果您更喜欢 C++,请参阅 创建扩展,了解 C++ SDK 的操作指南。
villagesql crate 用 Rust 编写 VillageSQL 扩展。SDK 处理所有 FFI 编组 — 您可以使用普通的 Rust 类型,extension! 宏会在加载时生成服务器调用的 C 入口点。
先决条件
您需要:- Rust 稳定工具链 — 在 rustup.rs 上安装
- cargo-vsql — Cargo 的子命令,用于打包、安装和测试扩展
- VillageSQL 构建目录 — 将
VillageSQL_BUILD_DIR设置为服务器的构建路径,以便cargo vsql install和cargo vsql test正常工作
cargo-vsql:
创建一个新的 crate
创建一个新的 Rust 库 crate:Cargo.toml 以设置 crate 类型并添加 villagesql 依赖项:
cdylib crate 类型告诉 Cargo 生成一个共享库(Linux 上的 .so,macOS 上的 .dylib),服务器可以加载它。
编写您的第一个函数
将src/lib.rs 替换为完整的扩展:
func! 宏将 rot13_impl 绑定到 SQL 名称 vsql_rot13,签名是 STRING -> STRING。
函数签名是 fn(&[InValue]) -> VdfReturn。InValue 是服务器传递的 SQL 类型枚举。VdfReturn 是您返回的内容。在访问值之前,检查 args.first() 以处理 NULL 情况和类型错误的情况。
如果您的函数对于相同的输入始终返回相同的输出,请声明为确定性函数 — 优化器可以缓存相同输入的结果:
添加 manifest.json
在 crate 根目录(Cargo.toml 和 manifest.json 旁边)创建 manifest.json:
name 字段必须与您传递给 INSTALL EXTENSION 的内容匹配。
构建和安装
从扩展目录(
Cargo.toml 和 manifest.json 所在的位置)运行 cargo vsql package、cargo vsql install 和 cargo vsql test,而不是从工作区根目录运行。.veb 文件中:
dist/vsql_rot13.veb。要将 VEB 打包并直接复制到您的 VillageSQL 构建目录:
测试
在mysql-test/t/rot13_basic.test 中编写一个测试文件:
cargo vsql test --record 以更新预期的结果,然后运行 cargo vsql test 以确认。
在 SQL 中安装
VEB 位于扩展目录中后,安装它:后续步骤
Rust 中的自定义类型
定义具有二进制存储、排序和哈希的新列类型。
Rust API 参考
InValue、VdfReturn、extension!、func! 和 custom_type! — 所有字段。
C++ SDK(创建扩展)
C++ 路径 — 类型化包装器、构建器 API 和 CMake 设置。
扩展架构
VEB 文件如何加载、生命周期钩子和符号隔离。

