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:

Cesar Gimenes

Última modificação