apache / apache/datafusion-sqlparser-rs
MSSQL: Issue with CTE anchors
- 主要言語
- Rust
- スター
- 3.5k
- フォーク
- 772
- 平均マージ
- 4日 9時間
- マージ済み PR(30日)
- 17
説明
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
コントリビューションガイド
このリポジトリのコントリビューションガイドは索引されていません
調査の方向性
まず、提供された MSSQL CTE クエリを sql-parser-rs で再現し、パーサーの CTE 処理をリンク先の Microsoft ドキュメントと比較します。unexpected UNION を報告しているパーサーのエントリポイントを追跡し、その後、クエリが正常にパースされることを示すリグレッションテストを追加します。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- rust, sql
- 領域
- databases
- issue の種類
- バグ
- 難易度
- 3/5
- 見積もり時間
- 1〜2日
- 活発さ
- 停滞
- 明瞭さ
- おおむね明確
- 初心者へのやさしさ
- 48/100