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 처리, 빈 테이블, 존재하지 않는 컬럼
1---2name: query-engine-design3description: 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.4---56# Query Engine Design Skill78SQL 쿼리 엔진 설계 및 구현 가이드910## 3단계 파이프라인 워크플로우1112```13SQL 문자열 → [Parser] → AST → [Planner] → 실행계획 → [Executor] → 결과셋14 ↑15 [StorageEngine]16```17181. **Parser**: SQL 문자열을 AST로 변환 (재귀 하강)192. **Planner**: 논리적 실행 계획 → 물리적 실행 계획203. **Executor**: 실행 계획을 순회하며 결과셋 생성2122## SQL 지원 범위 (우선순위)23241. CREATE TABLE, DROP TABLE, INSERT INTO252. SELECT (*, columns, aliases)263. WHERE (비교, AND/OR, LIKE, IN, BETWEEN, IS NULL)274. ORDER BY, LIMIT/OFFSET285. 집계 (COUNT, AVG, SUM, MIN, MAX)296. GROUP BY + HAVING307. JOIN (INNER, LEFT)318. 서브쿼리 (WHERE IN subquery)329. UPDATE, DELETE3310. DISTINCT3435## NULL 3값 로직 규칙3637- `NULL = NULL` → NULL (not true)38- `NULL AND true` → NULL39- `NULL OR true` → true40- `IS NULL` / `IS NOT NULL` 로만 NULL 비교4142## 파일 구조4344```45src/46 lexer.js - SQL 토크나이저47 parser.js - 재귀 하강 SQL 파서48 ast.js - SQL AST 노드 정의49 planner.js - 논리적 → 물리적 쿼리 계획50 executor.js - 쿼리 실행기51 storage.js - 인메모리 테이블 저장소 + 스키마52 expression.js - WHERE 절 / 산술식 평가기53 aggregator.js - 집계 함수 (COUNT, AVG, SUM, MIN, MAX)54 formatter.js - 결과 테이블 포맷터55 repl.js - 대화형 SQL 실행56 index.js - CLI 진입점57tests/58 parser.test.js59 executor.test.js60 integration.test.js61```6263## 핵심 규칙6465- 파서-플래너-실행기 완전 분리66- 대소문자 무시 (키워드)67- 스키마 타입: INT, FLOAT, TEXT6869## 테스트 전략7071- **Parser**: 각 SQL 문법별 AST 생성 확인72- **Executor**: 단순 SELECT → WHERE → ORDER BY → 집계 → GROUP BY → JOIN → 서브쿼리 순서73- **Integration**: 검증 쿼리 2개 (부서별 통계 + JOIN 서브쿼리)74- **Edge Cases**: NULL 처리, 빈 테이블, 존재하지 않는 컬럼