apache / apache/datafusion-sqlparser-rs
MSSQL: Issue with CTE anchors
- Langage dominant
- Rust
- Étoiles
- 3.5k
- Forks
- 772
- Merge moyen
- 4 j 9 h
- PR mergées (30 j)
- 17
Description
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
Guide de contribution
Aucun guide de contribution indexé pour ce dépôt
Piste de recherche
Commencez par reproduire la requête CTE MSSQL fournie dans sql-parser-rs et comparez la gestion des CTE par le parser avec la documentation Microsoft liée. Suivez le point d’entrée du parser qui signale unexpected UNION, puis ajoutez un test de régression montrant que la requête est analysée avec succès.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- rust, sql
- Domaine
- databases
- Type d'issue
- Bug
- Difficulté
- 3/5
- Temps estimé
- 1-2 jours
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 48/100