examples/ em vsql-rust-sdk
vsql_rot13 — Extensão Apenas com Função
A extensão Rust mais simples possível: uma VDF que recebe uma STRING e retorna uma STRING. Uso:Estrutura de Diretórios
Implementação
Arquivo:src/lib.rs
- As VDFs recebem
&[InValue]e retornamVdfReturn, sendo ambos enums seguros do Rust - NULL é uma variante de primeira classe em ambos os lados; faça o pattern-match diretamente
- A macro
extension!gera os pontos de entrada em C que o servidor chama no momento do carregamento func!declara a assinatura SQL; os tipos de argumento e de retorno usamvillagesql::Type::*
Manifesto
Arquivo:manifest.json
vsql_rational — Tipo Personalizado com Aritmética
Um tipo personalizado completo: números racionais armazenados como(numerator, denominator) em forma reduzida, com funções aritméticas, ordenação e hashing.
Uso:
Formato de Armazenamento Binário
rational armazena 16 bytes (little-endian):
- Bytes 0–7: numerador (
i64) - Bytes 8–15: denominador (
i64)
Funções do Sistema de Tipos
Arquivo:src/lib.rs
O tipo registra quatro operações: encode (string → bytes), decode (bytes → string), compare (para ORDER BY) e hash (para indexação).
Implementações de VDF
As VDFs que recebem um tipo personalizado recebemInValue::Custom(&[u8]) e decodificam os bytes por conta própria:
Registro
A macroextension! registra tanto o tipo quanto suas funções em uma única declaração:
villagesql::custom!("name")referencia um tipo personalizado como argumento ou retornocustom_type!registra o tipo junto com suas funções encode/decode/compare/hashdefault: "0/1"é o padrão intrínseco: o servidor chamaencode()nessa string na inicialização do tipo, portanto ela deve ser um valor válidopersisted_lengthdeve corresponder ao comprimento em bytes queencode()retornadeterministic: truepermite que o otimizador dobre chamadas constantes
Padrões Principais de Implementação
Testes
Ambos os exemplos usam MTR (o MySQL Test Runner) assim como as extensões em C++:--record.
Próximos Passos
Criando Extensões em Rust
Instalação do SDK, compilação e a macro extension!
Tipos Personalizados em Rust
Aprofundamento em encode, decode, compare e hash
Referência da API Rust
InValue, VdfReturn e a superfície da macro
Código-Fonte dos Exemplos
Código-fonte completo de vsql_rot13 e vsql_rational

