apache / apache/datafusion-sqlparser-rs
MSSQL: Issue with CTE anchors
- Vorherrschende Sprache
- Rust
- Sterne
- 3.5k
- Forks
- 772
- Ø Merge
- 4 T. 9 Std.
- Gemergte PRs (30 T.)
- 17
Beschreibung
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
Beitragsleitfaden
Für dieses Repository ist kein Beitragsleitfaden indexiert
Rechercherichtung
Beginne damit, die bereitgestellte MSSQL-CTE-Abfrage in sql-parser-rs zu reproduzieren und die CTE-Behandlung des Parsers mit der verlinkten Microsoft-Dokumentation zu vergleichen. Verfolge den Parser-Einstiegspunkt, der unexpected UNION meldet, und füge anschließend einen Regressionstest hinzu, der zeigt, dass die Abfrage erfolgreich geparst wird.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- rust, sql
- Bereich
- databases
- Issue-Typ
- Bug
- Schwierigkeit
- 3/5
- Geschätzter Aufwand
- 1-2 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 48/100