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 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.
- 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.
- 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;
- pspeter3
Me pregunto si esto significa que podríamos tener un plugin de Oxfmt para Duck SQL.