apache / apache/datafusion-sqlparser-rs

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

Aperta
#1,972 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub
Lingua principale
Rust
Stelle
3.5k
Fork
772
Merge medio
4g 9h
PR unite (30g)
17

Descrizione

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)`.

Guida per i contributori

Nessuna guida per i contributori indicizzata per questo repository

Direzione di ricerca

Inizia da parse_select_item e confronta il percorso di parsing per Expr::MatchAgainst. Aggiungi il supporto per un’espressione Expr::Columns restituita come SelectItem::UnnamedExpr(Expr::Columns), quindi verifica che la forma documentata COLUMNS(* EXCLUDE(...)) e i modificatori elencati REPLACE, RENAME e LIKE vengano analizzati correttamente.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
rust, sql
Ambito
compilers
Tipo di issue
Funzionalità
Difficoltà
4/5
Tempo stimato
3-5 giorni
Stato di attività
Ferma
Chiarezza
Abbastanza chiara
Idoneità per principianti
45/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.