Rust SDK 的版本为 0.0.1。
villagesql crate API 的参考。有关入门教程,请参阅 在 Rust 中构建扩展。有关自定义类型,请参阅 Rust 中的自定义类型。
InValue
InValue 是服务器为每个函数参数传递的枚举。您的函数接收 args: &[InValue],并且必须在使用其值之前检查每个参数。
始终显式匹配
Null。调用 .unwrap() 或仅模式匹配值变体是一种错误——SQL NULL 是一种正常的输入,而不是错误。
VdfReturn
VdfReturn 是您的函数返回给服务器的内容。使用以下关联函数之一构造它:
警告与错误:
对于用户输入验证失败的情况,如果继续处理其余结果集是有意义的,请使用
warning。在严格模式下,MySQL 会在 INSERT 和 UPDATE 上将警告升级为错误。对于继续操作不安全的情况(损坏存储的数据、内部不变性违规),请使用 error。致命错误会中止整个语句。
extension! 宏
extension! 生成服务器在加载 VEB 文件时调用的 VEF 入口点。它必须在 crate 中出现一次。
types;仅类型扩展省略 funcs。一个空的 extension! 块(没有函数,也没有类型)是有效的,但会生成一个不执行任何操作的扩展。
func! 宏
func! 声明一个可从 SQL 调用的函数。位置参数:
用于在
func! 中使用的 类型常量:
custom_type! 宏
custom_type! 注册一个新的列类型。type_name、persisted_length、max_decode_buffer_length、encode、decode 和 compare 是必需的。hash 和 default 是可选的,但建议使用。
default 字段不是列的默认值——它是一个启动探测。服务器在加载扩展时调用 encode(default) 以验证回调是否正常工作。如果 encode 返回 Err,则扩展将无法加载。
custom! 宏
villagesql::custom!("type_name") 在 func! 声明中引用一个自定义类型:
villagesql::Type::* 的参数列表或返回类型位置中使用它。该字符串必须与相应的 custom_type! 中声明的 type_name 匹配。
manifest.json 字段
每个扩展都需要一个与Cargo.toml 位于同一位置的 manifest.json 文件:
name 验证规则:必须以字母开头,以字母或数字结尾,最大长度为 64 个字符。无效的清单会导致 INSTALL EXTENSION 失败。
