HeadlinesBriefing HeadlinesBriefing.com

DuckDB v2.0: novo parser SQL baseado em PEG

Hacker News •
×

O DuckDB v2.0 introduz um novo parser SQL baseado em PEG, substituindo o parser derivado do PostgreSQL usado desde o primeiro commit do projeto em 2018. O antigo parser LALR(1) gerado pelo Bison tornou-se cada vez mais difícil de estender devido aos conflitos shift/reduce e reduce/reduce à medida que o Duck SQL evoluía. O novo parser, construído usando Gramáticas de Expressão de Análise (Parsing Expression Grammars), elimina esses conflitos ao ordenar explicitamente as alternativas e permite extensibilidade em tempo de execução.

O parser processa consultas SQL em três estágios: tokenizador, parser e transformador. O tokenizador divide a entrada em tokens como palavras-chave e identificadores. O parser valida a sintaxe contra a gramática do Duck SQL, produzindo uma árvore de análise. O transformador converte isso no AST interno do DuckDB para o binder.

O desenvolvimento começou com um protótipo de pesquisa que lidava apenas com um subconjunto do SQL. Ele foi expandido incrementalmente e introduzido como um recurso experimental no DuckDB v1.5. A gramática completa agora suporta todos os tipos de instruções e expressões, precedência correta de operadores, classificação adequada de palavras-chave e compatibilidade com estruturas AST existentes.

Embora a implementação mude significativamente, o Duck SQL em si permanece inalterado. O novo parser também melhora os relatórios de erros, fornecendo melhor contexto para falhas de sintaxe. Essa transição se alinha a movimentos semelhantes de outros sistemas como o Python 3.9, que também adotou análise baseada em PEG para maior flexibilidade.

Fonte: Hacker News · Resumido por HeadlinesBriefing