apache / apache/datafusion-sqlparser-rs

Support `COLUMNS(* EXLCUDE(col1, col2))` syntax

Offen
#1,972 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
Vorherrschende Sprache
Rust
Sterne
3.5k
Forks
772
Ø Merge
4 T. 9 Std.
Gemergte PRs (30 T.)
17

Beschreibung

DuckDB supports excluding columns via this syntax:

```
SELECT COLUMNS(* EXCLUDE(col1, col2)) FROM tbl
```

Currently this format gives a syntax error:

```
Parse error: sql parser error: Expected: ), found: EXCLUDE at Line: 1, Column: 18
```

More details at: https://duckdb.org/docs/stable/sql/expressions/star.html#columns-expression

Note that other modifiers beyond `EXCLUDE` are supported, such as `REPLACE`, `RENAME`, `LIKE` etc, see the syntax diagram at https://duckdb.org/docs/stable/sql/query_syntax/select.html#syntax (click `star-options` on the digram to expand).

This highly suggests that the general solution for this would be to add a new `Expr::Columns` expression enum with parsing logic somewhat similiar to `Expr::MatchAgainst`, and then add logic in `parse_select_item` to support returning a `SelectItem::UnnamedExpr(Expr::Columns)`.

Beitragsleitfaden

Für dieses Repository ist kein Beitragsleitfaden indexiert

Rechercherichtung

Beginnen Sie bei parse_select_item und vergleichen Sie den Parsing-Pfad für Expr::MatchAgainst. Fügen Sie Unterstützung für einen Expr::Columns-Ausdruck hinzu, der als SelectItem::UnnamedExpr(Expr::Columns) zurückgegeben wird, und überprüfen Sie, dass die dokumentierte Form COLUMNS(* EXCLUDE(...)) sowie die aufgeführten Modifikatoren REPLACE, RENAME und LIKE erfolgreich geparst werden.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
rust, sql
Bereich
compilers
Issue-Typ
Feature
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
45/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.