LQS: Uma Ferramenta Prática para Testar e Debugar SQL
É muito comum precisarmos inserir strings com código SQL no fonte de outras linguagens, o problema desse SQL é uma linguagem interpretada e portanto só pode conter erros que só vamos perceber em tempo de execução.
Testando SQL
O LQS foi criado para trabalhar junto com o Neovim e permitir testar o SQL durante a edição, sem copiar e colar para outro arquivo ou cliente SQL.
-
Testar SQL com metadados embutidos: Insira configurações direto no seu script SQL, como a string de conexão, opção de saída em JSON, ou até mesmo uma query extra para gerar parâmetros. Exemplo:
-- DB: sqlite://:memory: -- JSON: TRUE SELECT sqlite_version();
-
Integrar scripts Lua: Precisa de parâmetros dinâmicos? Insira código Lua no próprio script. O retorno do Lua substitui os placeholders na sua consulta. Exemplo:
-- DB: $ENV_DB_CONNECTION_STRING -- LUA: return 42, "Alice", 1.99 SELECT * FROM test WHERE id = $1 AND user = $2 AND value < $3;
-
Executar query auxiliar para parâmetros: Use a linha
-- SQL:
para rodar uma consulta e usar seus resultados como argumentos, seja para o Lua ou para a query principal.-- DB: sqlite://:memory: -- SQL: SELECT 10, "Bob" -- LUA: print(arg[1], arg[2]) \ -- return arg[1], arg[2] SELECT * FROM users WHERE id = $1 AND name = $2;
-
Saída em JSON: Com o parâmetro
-- JSON: TRUE
você pode formatar a saída em JSON, facilitando a integração com outras ferramentas ou APIs.
Integração com o Neovim
A integração com Neovim é simples, apenas uma função. Permite selecionar parte do seu script SQL no editor e, com um comando rápido, executar a query e visualizar o resultado num buffer novo. Essa automação deixa o desenvolvimento muito mais fluido. Caso ocorra um erro a mensagem de erro será exibida.
No lqs.lua você encontra um exemplo de como criar um comando customizado no Neovim para capturar a seleção, salvar num arquivo temporário e rodar o LQS automaticamente.
Como Funciona
O LQS lê o arquivo SQL e processa cada linha para extrair os parâmetros:
- Configuração da conexão: A linha
-- DB:
define o banco de dados. - Script Lua: A linha
-- LUA:
permite incluir e, se necessário, continuar em múltiplas linhas com a barra invertida (\
). - Parâmetros dinâmicos via SQL: A linha
-- SQL:
executa uma query para fornecer parâmetros que podem ser usados tanto pelo script Lua quanto na consulta principal. - Formato da saída: O parâmetro
-- JSON:
define se o resultado será em JSON ou em um formato mais humano.
Conclusão
Se você trabalha com SQL embutido ou precisa testar queries de forma rápida, experimente o LQS. Ele permite detectar erros de SQL conforme você edita seu código e pode também ser uma boa forma de documentação, uma forma simples de literate programing.
E sim, LQS é SQL de trás pra frente, não se deve deixar programadores nomear coisas.
Referências:
Vídeo com a demonstração do código: