apache / apache/datafusion-sqlparser-rs

MSSQL: Issue with CTE anchors

Aperta
#1,537 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

Hi, the following is a valid MSSQL syntax

When parsed with the `sql-parser-rs`

```sql
WITH RecursiveCTE AS (
-- Anchor member
SELECT TOP 1
[ID],
CAST([Amount] AS NUMERIC) AS [Amount],
CAST([Balance] AS NUMERIC) AS [Balance],
(SELECT TOP 1 [FixedValue] FROM [Settings] ORDER BY [ID] DESC) AS [Constant]
FROM [Transactions]
ORDER BY [ID] ASC

UNION ALL

-- Recursive member
SELECT
[ID] + 1 AS [ID],
CAST([Amount] * 0.8 AS NUMERIC) AS [Amount],
CAST(([Amount] * 0.8 - [Constant]) AS NUMERIC) AS [Balance],
[Constant]
FROM RecursiveCTE
WHERE [Balance] > 0
)
SELECT [ID], [Balance]
FROM RecursiveCTE
ORDER BY [ID] ASC;
```

it gives the following error

```bash
sql parser error: Expected: ), found: UNION at Line: 11, Column: 5
```

https://learn.microsoft.com/en-us/sql/t-sql/queries/with-common-table-expression-transact-sql

Guida per i contributori

Nessuna guida per i contributori indicizzata per questo repository

Direzione di ricerca

Inizia riproducendo la query CTE MSSQL fornita in sql-parser-rs e confronta la gestione delle CTE da parte del parser con la documentazione Microsoft collegata. Segui il punto di ingresso del parser che segnala unexpected UNION, quindi aggiungi un test di regressione che dimostri che la query viene analizzata correttamente.

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

Valutazione

Stack tecnologico
rust, sql
Ambito
databases
Tipo di issue
Bug
Difficoltà
3/5
Tempo stimato
1-2 giorni
Stato di attività
Ferma
Chiarezza
Abbastanza chiara
Idoneità per principianti
48/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.