01-sql-parser.md で到達した最小 SELECT を土台として、
将来的に SELECT 構文を段階的に広げる。
この計画は、INSERT / UPDATE / DELETE / CREATE TABLE の実装を優先したあとに
着手することを前提にする。
次の機能を SELECT の追加拡張対象とする。
- 結合先
(SELECT ...) AS aliasの安定化 JOIN右辺での派生表対応INNER JOINLEFT OUTER JOINRIGHT OUTER JOINFULL OUTER JOINLIMITOFFSET
必要に応じて、既存対応済みの ORDER BY / GROUP BY / HAVING /
DISTINCT / 関数呼び出し / subquery との整合もここで見直す。
学習用に一度に広げず、次の順で段階的に進める。
JOINの右辺でも(SELECT ...) AS aliasを最小形から読めるようにする- 結合先の AST 表現と parser の分岐を整理し、通常テーブル参照と派生表参照を同じ枠組みで扱う
INNER JOIN、LEFT OUTER JOINなど、既存の join type 判定を壊さずに派生構文を追加するLIMIT/OFFSETをORDER BYの後段で読めるようにし、AST 側に行数制御の保持先を追加する- 既存の
SELECTテストを見直し、句の組み合わせが増えても壊れない回帰テストを追加する
JOINの右辺に派生表を置いた正常系を追加する- join type ごとの差分をテーブルドリブンで固定する
LIMIT/OFFSETの正常系と異常系を追加する- 既存の
ORDER BY/GROUP BY/HAVINGと組み合わせた回帰テストを追加する
次のような SQL を、既存の SELECT 機能を壊さずにパースできることを目標にする。
SELECT u.id FROM users u INNER JOIN orders o ON u.id = o.user_id;
SELECT u.id FROM users u LEFT OUTER JOIN orders o ON u.id = o.user_id;
SELECT id FROM users JOIN (SELECT user_id FROM orders) AS o ON users.id = o.user_id;
SELECT id FROM users ORDER BY id DESC LIMIT 10;
SELECT id FROM users ORDER BY id DESC LIMIT 10 OFFSET 20;