DuckDB v2.0 reemplaza su parser SQL por uno basado en PEG y extensible en tiempo de ejecución

DuckDB V2 PEG-based SQL parser

DuckDB v2.0 reemplaza su parser SQL por uno basado en PEG y extensible en tiempo de ejecución

DuckDB v2.0 sustituye su parser SQL derivado de PostgreSQL por un parser basado en PEG (Parsing Expression Grammar) que es más fácil de evolucionar y puede extenderse en tiempo de ejecución. El nuevo parser, que ya era experimental en v1.5, ahora es el predeterminado y resuelve problemas de rendimiento con packrat parsing: una consulta malformada con 19 paréntesis sin cerrar pasó de 10,640 segundos a 0,001 segundos. La nueva gramática permite añadir sintaxis como expression statements, la sentencia CONNECT y extensiones de recursos externos.

El parser determina si una consulta es sintácticamente válida, mientras que el binder determina si las tablas, columnas y funciones a las que se refiere existen realmente.
  1. zcw100

    Me entusiasma esto y ya tengo algunos casos de uso en mente, pero me preocupa continuamente un caos gramatical y colisiones a medida que cada autor de extensiones intente modificar la gramática. Espero que ya tengan algo previsto para eso y simplemente no lo haya leído todavía. Me preocupa que puedas cargar una extensión y de alguna manera alterar la interpretación de la sintaxis. Dos extensiones de autores distintos podrían legítimamente querer analizadores conflictivos y no hay una forma fácil de descargar una extensión en DuckDB. Algo como un explícito "GRAMMAR SQL" o "GRAMMAR GGSQL", etc., sería agradable.

  2. tofflos

    > Las publicaciones de blog anteriores han cubierto el SQL amigable de DuckDB, incluido GROUP BY ALL y la selección de columnas usando SELECT * EXCLUDE (...).

    Me encanta la idea del SQL amigable. A menudo creo vistas con la misma forma y me encantaría que UNION y UNION ALL aceptaran una lista. Pero no está en el estándar, así que he perdido la esperanza de que alguna vez suceda en PostgreSQL.

    select * from view1 union all view2, view3, view4;

  3. pspeter3

    Me pregunto si esto significa que podríamos tener un plugin de Oxfmt para Duck SQL.

Más de este día

2026-08-21