| name | query-engine-design |
| description | SQL query engine design and implementation guide. Use when the user requests building a SQL engine, query parser, query planner, or query executor โ including in-memory storage, SQL parsing, and query optimization. |
Query Engine Design Skill
SQL ์ฟผ๋ฆฌ ์์ง ์ค๊ณ ๋ฐ ๊ตฌํ ๊ฐ์ด๋
3๋จ๊ณ ํ์ดํ๋ผ์ธ ์ํฌํ๋ก์ฐ
SQL ๋ฌธ์์ด โ [Parser] โ AST โ [Planner] โ ์คํ๊ณํ โ [Executor] โ ๊ฒฐ๊ณผ์
โ
[StorageEngine]
- Parser: SQL ๋ฌธ์์ด์ AST๋ก ๋ณํ (์ฌ๊ท ํ๊ฐ)
- Planner: ๋
ผ๋ฆฌ์ ์คํ ๊ณํ โ ๋ฌผ๋ฆฌ์ ์คํ ๊ณํ
- Executor: ์คํ ๊ณํ์ ์ํํ๋ฉฐ ๊ฒฐ๊ณผ์
์์ฑ
SQL ์ง์ ๋ฒ์ (์ฐ์ ์์)
- CREATE TABLE, DROP TABLE, INSERT INTO
- SELECT (*, columns, aliases)
- WHERE (๋น๊ต, AND/OR, LIKE, IN, BETWEEN, IS NULL)
- ORDER BY, LIMIT/OFFSET
- ์ง๊ณ (COUNT, AVG, SUM, MIN, MAX)
- GROUP BY + HAVING
- JOIN (INNER, LEFT)
- ์๋ธ์ฟผ๋ฆฌ (WHERE IN subquery)
- UPDATE, DELETE
- DISTINCT
NULL 3๊ฐ ๋ก์ง ๊ท์น
NULL = NULL โ NULL (not true)
NULL AND true โ NULL
NULL OR true โ true
IS NULL / IS NOT NULL ๋ก๋ง NULL ๋น๊ต
ํ์ผ ๊ตฌ์กฐ
src/
lexer.js - SQL ํ ํฌ๋์ด์
parser.js - ์ฌ๊ท ํ๊ฐ SQL ํ์
ast.js - SQL AST ๋
ธ๋ ์ ์
planner.js - ๋
ผ๋ฆฌ์ โ ๋ฌผ๋ฆฌ์ ์ฟผ๋ฆฌ ๊ณํ
executor.js - ์ฟผ๋ฆฌ ์คํ๊ธฐ
storage.js - ์ธ๋ฉ๋ชจ๋ฆฌ ํ
์ด๋ธ ์ ์ฅ์ + ์คํค๋ง
expression.js - WHERE ์ / ์ฐ์ ์ ํ๊ฐ๊ธฐ
aggregator.js - ์ง๊ณ ํจ์ (COUNT, AVG, SUM, MIN, MAX)
formatter.js - ๊ฒฐ๊ณผ ํ
์ด๋ธ ํฌ๋งทํฐ
repl.js - ๋ํํ SQL ์คํ
index.js - CLI ์ง์
์
tests/
parser.test.js
executor.test.js
integration.test.js
ํต์ฌ ๊ท์น
- ํ์-ํ๋๋-์คํ๊ธฐ ์์ ๋ถ๋ฆฌ
- ๋์๋ฌธ์ ๋ฌด์ (ํค์๋)
- ์คํค๋ง ํ์
: INT, FLOAT, TEXT
ํ
์คํธ ์ ๋ต
- Parser: ๊ฐ SQL ๋ฌธ๋ฒ๋ณ AST ์์ฑ ํ์ธ
- Executor: ๋จ์ SELECT โ WHERE โ ORDER BY โ ์ง๊ณ โ GROUP BY โ JOIN โ ์๋ธ์ฟผ๋ฆฌ ์์
- Integration: ๊ฒ์ฆ ์ฟผ๋ฆฌ 2๊ฐ (๋ถ์๋ณ ํต๊ณ + JOIN ์๋ธ์ฟผ๋ฆฌ)
- Edge Cases: NULL ์ฒ๋ฆฌ, ๋น ํ
์ด๋ธ, ์กด์ฌํ์ง ์๋ ์ปฌ๋ผ