A fronteira da ABI
As extensões do VillageSQL interagem com o servidor por meio de uma interface binária (ABI) com uma separação clara de responsabilidades entre a extensão e o servidor. O servidor controla:- Armazenamento: o InnoDB lê e grava bytes; ele não os interpreta
- Esquema: os metadados do tipo de coluna e qual extensão registrou cada tipo são armazenados nas tabelas de sistema do VillageSQL e persistem entre reinicializações
- Recuperação, replicação e backups: essas operações atuam sobre bytes brutos, da mesma forma que com qualquer tipo de coluna nativo
- Registro de extensões: nomes, versões e registros de funções/tipos são recarregados das tabelas de sistema do VillageSQL na inicialização
- Formato binário: a função de codificação
from_stringdefine o que é gravado em disco;to_stringfaz a leitura de volta durante a saída - Regras de negócio: validação, comparação, hashing e tratamento de erros
- Estado: as extensões não persistem nada além dos bytes que o servidor armazena para elas
villagesql/sdk/include/villagesql/abi/types.h no repositório do servidor.
Como os tipos personalizados são armazenados
Quando você declara uma coluna comoUUID (como exemplo do vsql-uuid), o servidor armazena um bloco de bytes brutos de tamanho fixo por linha. A forma legível por humanos, como d7d665f3-bb13-4c2f-b10f-d2126eb40cba, existe apenas nas fronteiras: from_string a codifica em binário na gravação e to_string a decodifica de volta na leitura. Tudo o que está no meio (armazenamento, redo log, recuperação de falhas, binary log) atua sobre esses bytes sem interpretá-los.
Recuperação de falhas
As extensões são recarregadas automaticamente ao reiniciar o servidor — nenhuma intervenção manual é necessária. Você pode verificar isso por meio deINFORMATION_SCHEMA.EXTENSION_REGISTRATION, que mostra a mesma entrada de registro após a reinicialização que antes dela.
Os dados das linhas sobrevivem à recuperação de falhas normal do InnoDB. O formato binário da extensão nunca recebe tratamento especial — o InnoDB lida com uma coluna UUID exatamente como faz com uma coluna VARBINARY.
Formato do binary log
Na replicação em formato de linha (o padrão), os valores de tipos personalizados trafegam como binário bruto no binary log. Não há etapa de recodificação: ofrom_string da extensão não é chamado ao gravar o binlog, e o to_string é chamado apenas quando um cliente lê o valor de volta.
Uma entrada de binary log em nível de linha para uma coluna UUID tem esta aparência:
to_string; um sem ela (um pipeline de CDC externo ou um leitor de binlog) vê apenas os bytes brutos.
Restauração
Restaurar um servidor VillageSQL funciona da mesma forma que a recuperação de falhas: o servidor inicializa, lê seus registros de extensões e carrega cada extensão automaticamente. Nenhum tratamento especial é necessário para colunas com tipo de extensão — os bytes brutos estão no backup, e as extensões os decodificam sob demanda. As extensões não são armazenadas dentro do banco de dados — elas residem como arquivos.veb em veb_dir no disco. Se o arquivo VEB estiver ausente quando o servidor inicializar na instância restaurada, a inicialização é abortada com VEB file not found. O .veb_expansion_cache não substitui o próprio .veb. Ao distribuir sua extensão, certifique-se de que seus usuários saibam que devem incluir o veb_dir em qualquer backup ou migração de servidor, junto com o diretório de dados.
Operações de esquema
ALTER TABLE em tabelas com colunas de tipo de extensão se comporta exatamente como para tipos nativos. O servidor rastreia a vinculação da coluna à extensão em seus metadados de esquema, e essa vinculação sobrevive à reconstrução da tabela. Adicionar ou modificar outras colunas em uma tabela com uma coluna id do vsql-uuid deixa os dados UUID intactos.
