Se você prefere C++, consulte Criando Extensões em C++ para o guia passo a passo do SDK C++.
villagesql. O SDK cuida de todo o marshaling de FFI — você trabalha com tipos Rust comuns e a macro extension! gera os pontos de entrada C que o servidor chama no momento do carregamento.
Pré-requisitos
Antes de começar, compile o VillageSQL a partir do código-fonte — as extensões são vinculadas à árvore de compilação do servidor. Siga primeiro o guia Compilar a Partir do Código-Fonte. Você também precisa de:- Toolchain estável do Rust — instale em rustup.rs
- Git — para clonar o SDK e o repositório da sua extensão
- cargo-vsql — o subcomando do Cargo para empacotar, instalar e testar extensões
- Diretório de compilação do VillageSQL — defina
VillageSQL_BUILD_DIRcomo o caminho de compilação do seu servidor paracargo vsql installecargo vsql test - Conhecimento básico de Rust — familiaridade com Cargo, enums e correspondência de padrões
cargo-vsql a partir do repositório do SDK:
Crie uma nova crate
Crie uma nova crate de biblioteca Rust:Cargo.toml para definir o tipo da crate e adicionar a dependência villagesql:
cdylib diz ao Cargo para produzir uma biblioteca compartilhada (.so no Linux, .dylib no macOS) que o servidor pode carregar.
Escreva sua primeira função
Substituasrc/lib.rs por uma extensão completa:
func! conecta rot13_impl ao nome SQL vsql_rot13 com uma assinatura STRING -> STRING.
A assinatura da função é fn(&[InValue]) -> VdfReturn. InValue é um enum sobre os tipos SQL que o servidor passa. VdfReturn é o que você retorna. Verifique args.first() para tratar tanto o caso NULL quanto o caso de tipo incorreto antes de acessar o valor.
Se a sua função sempre retorna a mesma saída para as mesmas entradas, declare-a como determinística — o otimizador pode então armazenar em cache os resultados para entradas idênticas:
Adicione o manifest.json
Crie omanifest.json na raiz da crate (ao lado do Cargo.toml):
name deve corresponder ao que você passa para INSTALL EXTENSION.
Compile e instale
Execute
cargo vsql package, cargo vsql install e cargo vsql test de dentro do diretório da extensão (onde ficam o Cargo.toml e o manifest.json), não da raiz do workspace..veb:
dist/vsql_rot13.veb. Para empacotar e copiar o VEB diretamente para o seu diretório de compilação do VillageSQL:
--config KEY=VALUE (repetível):
Teste
Escreva um arquivo de teste emmysql-test/t/rot13_basic.test:
cargo vsql test --record para atualizar os resultados esperados e, em seguida, cargo vsql test para confirmar.
Instale em SQL
Assim que o VEB estiver no diretório de extensões, instale-o:Próximos passos
Tipos Personalizados em Rust
Defina novos tipos de coluna com armazenamento binário, ordenação e hashing.
Referência da API Rust
InValue, VdfReturn, extension!, func! e custom_type! — todos os campos.
SDK C++ (Criando Extensões em C++)
O caminho C++ — wrappers tipados, API de builder e configuração do CMake.
Arquitetura de Extensões
Como os arquivos VEB são carregados, hooks de ciclo de vida e isolamento de símbolos.
Testando Extensões Dependentes de Rede
Padrões de porta do MTR para extensões que iniciam servidores HTTP ou listeners externos — aplica-se igualmente a extensões Rust e C++.

