villagesql. Para o tutorial de introdução, consulte Criando Extensões em Rust. Para tipos personalizados, consulte Tipos Personalizados em Rust.
InValue
InValue é o enum que o servidor passa para cada argumento de função. Sua função recebe args: &[InValue] e deve verificar cada argumento antes de usar seu valor.
Sempre faça a correspondência de
Null explicitamente. Chamar .unwrap() ou fazer a correspondência de padrão apenas das variantes de valor é um bug — o NULL do SQL é uma entrada normal, não um erro.
VdfReturn
VdfReturn é o que sua função retorna ao servidor. Construa-o com uma das funções associadas:
Aviso vs. erro:
Use
warning para falhas de validação de entrada do usuário em que faz sentido continuar com o restante do conjunto de resultados. No modo estrito, o MySQL promove avisos a erros em INSERT e UPDATE. Use error para condições em que prosseguir é inseguro: dados armazenados corrompidos, violações de invariantes internas. Um erro fatal aborta a instrução inteira.
macro extension!
extension! gera os pontos de entrada VEF que o servidor chama ao carregar seu arquivo VEB. Ele deve aparecer exatamente uma vez no crate.
types:; uma extensão apenas de tipos omite funcs:. Um bloco extension! vazio (sem funcs, sem types) é válido, mas produz uma extensão que não faz nada.
macro func!
func! declara uma função chamável via SQL. Quatro formas (sem parâmetros, apenas buffer_size, apenas deterministic, ambos):
O parâmetro
buffer_size requer o crate villagesql 0.0.2 ou
posterior. A versão atual do crates.io
(0.0.1) não o expõe — até que o 0.0.2 seja lançado, use as formas sem
buffer_size.
Constantes de tipo para uso em
func!:
macro custom_type!
custom_type! registra um novo tipo de coluna. type_name, persisted_length, max_decode_buffer_length, encode, decode e compare são obrigatórios. hash e default são opcionais, mas recomendados.
O campo
default não é um valor padrão de coluna — é uma sondagem de inicialização. O servidor chama encode(default) ao carregar a extensão para verificar se o callback funciona. Se encode retornar Err para o padrão, a extensão falha ao carregar.
macro custom!
villagesql::custom!("type_name") referencia um tipo personalizado pelo nome em uma declaração func!:
villagesql::Type::* apareceria em uma lista de parâmetros ou posição de tipo de retorno. A string deve corresponder ao type_name declarado no custom_type! correspondente.
campos do manifest.json
Toda extensão precisa de ummanifest.json ao lado de seu Cargo.toml:
Regras de validação de
name: deve começar com uma letra, terminar com uma letra ou dígito, no máximo 64 caracteres. Um manifesto inválido faz com que INSTALL EXTENSION falhe.
