HeadlinesBriefing HeadlinesBriefing.com

DuckDB v2.0 : nouveau parseur SQL basé sur PEG

Hacker News •
×

DuckDB v2.0 introduit un nouveau parseur SQL basé sur PEG, remplaçant le parseur dérivé de PostgreSQL utilisé depuis le premier commit du projet en 2018. L'ancien parseur LALR(1) généré avec Bison devenait de plus en plus difficile à étendre en raison des conflits shift/reduce et reduce/reduce à mesure que Duck SQL évoluait. Le nouveau parseur, construit à l'aide de grammaires d'expressions d'analyse (Parsing Expression Grammars), élimine ces conflits en ordonnant explicitement les alternatives et permet l'extensibilité à l'exécution.

Le parseur traite les requêtes SQL en trois étapes : le tokenizer, le parseur et le transformateur. Le tokenizer divise l'entrée en tokens tels que les mots-clés et les identifiants. Le parseur valide la syntaxe par rapport à la grammaire de Duck SQL, produisant un arbre d'analyse. Le transformateur le convertit en AST interne de DuckDB pour le binder.

Le développement a commencé avec un prototype de recherche qui ne gérait qu'un sous-ensemble de SQL. Il a été progressivement étendu et introduit comme fonctionnalité expérimentale dans DuckDB v1.5. La grammaire complète prend désormais en charge tous les types d'instructions et d'expressions, la précédence correcte des opérateurs, une classification appropriée des mots-clés et la compatibilité avec les structures AST existantes.

Bien que l'implémentation change considérablement, Duck SQL lui-même reste inchangé. Le nouveau parseur améliore également les rapports d'erreurs, offrant un meilleur contexte pour les échecs de syntaxe. Cette transition s'aligne sur des mouvements similaires d'autres systèmes comme Python 3.9, qui a également adopté l'analyse basée sur PEG pour plus de flexibilité.

Source: Hacker News · Résumé par HeadlinesBriefing