Skip to main content
Rust SDK 的版本为 0.0.1。
本页是 villagesql crate API 的参考。有关入门教程,请参阅 在 Rust 中构建扩展。有关自定义类型,请参阅 Rust 中的自定义类型

InValue

InValue 是服务器为每个函数参数传递的枚举。您的函数接收 args: &[InValue],并且必须在使用其值之前检查每个参数。
始终显式匹配 Null。调用 .unwrap() 或仅模式匹配值变体是一种错误——SQL NULL 是一种正常的输入,而不是错误。

VdfReturn

VdfReturn 是您的函数返回给服务器的内容。使用以下关联函数之一构造它: 警告与错误: 对于用户输入验证失败的情况,如果继续处理其余结果集是有意义的,请使用 warning。在严格模式下,MySQL 会在 INSERTUPDATE 上将警告升级为错误。对于继续操作不安全的情况(损坏存储的数据、内部不变性违规),请使用 error。致命错误会中止整个语句。

extension! 宏

extension! 生成服务器在加载 VEB 文件时调用的 VEF 入口点。它必须在 crate 中出现一次。
两个部分都是可选的。纯函数扩展省略 types;仅类型扩展省略 funcs。一个空的 extension! 块(没有函数,也没有类型)是有效的,但会生成一个不执行任何操作的扩展。

func! 宏

func! 声明一个可从 SQL 调用的函数。位置参数:
用于在 func! 中使用的 类型常量

custom_type! 宏

custom_type! 注册一个新的列类型。type_namepersisted_lengthmax_decode_buffer_lengthencodedecodecompare 是必需的。hashdefault 是可选的,但建议使用。
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 失败。