# sql5 v1.7 版本說明(已完成)
## 版本資訊
- **版本**:1.7
- **日期**:2026-05-03
- **名稱**:集合運算子與查詢增強
## 新增功能
### 1. UNION / UNION ALL
- `SELECT ... UNION SELECT ...` - 合併結果並去除重複
- `SELECT ... UNION ALL SELECT ...` - 合併結果(含重複)
### 2. 子查詢增強
- 支援子查詢在 WHERE 子句:`SELECT * FROM t WHERE id IN (SELECT id FROM t2)`
- 支援子查詢在 FROM 子句:`SELECT * FROM (SELECT * FROM t) AS subq`
### 3. EXISTS 子查詢
- `SELECT * FROM t WHERE EXISTS (SELECT 1 FROM t2 WHERE t2.id = t.id)`
### 4. Scalar Subquery
- `SELECT (SELECT MAX(id) FROM t) AS max_id FROM t2`
### 5. 聚合函式增強
- `SELECT COUNT(DISTINCT col) FROM t` - DISTINCT 在聚合中
## 使用方式
```sql
-- UNION
SELECT id FROM t1 UNION SELECT id FROM t2;
-- UNION ALL
SELECT id FROM t1 UNION ALL SELECT id FROM t2;
-- 子查詢在 IN
SELECT * FROM users WHERE id IN (SELECT user_id FROM orders);
-- EXISTS
SELECT * FROM users u WHERE EXISTS (SELECT 1 FROM orders o WHERE o.user_id = u.id);
-- Scalar 子查詢
SELECT name, (SELECT COUNT(*) FROM orders WHERE user_id = u.id) AS order_count FROM users u;
-- COUNT DISTINCT
SELECT COUNT(DISTINCT category) FROM products;
```
## 架構
```
┌─────────────────────────────────────────┐
│ Planner │
│ ┌─────────────────────────────────┐ │
│ │ SetOperation (UNION/UNION ALL) │ │ ← 新增
│ └─────────────────────────────────┘ │
└─────────────────────────────────────────┘
```
## 實作重點
### Plan 擴充
```rust
pub enum Plan {
// ... existing ...
SetOperation {
left: Box<Plan>,
right: Box<Plan>,
op: SetOp, // Union, UnionAll, Intersect, Except
},
}
pub enum SetOp {
Union,
UnionAll,
Intersect,
Except,
}
```
### 子查詢處理
- 在 planner 中展開子查詢為獨立的 plan
- 支援將子查詢結果作為臨時 CTE 或 virtual table
## 測試計畫
1. `UNION basic` - 基本 UNION
2. `UNION ALL` - UNION ALL 含重複
3. `UNION with WHERE` - UNION + WHERE 條件
4. `Subquery IN` - 子查詢在 IN 中
5. `EXISTS subquery` - EXISTS 子查詢
6. `Scalar subquery` - 純量子查詢
7. `COUNT DISTINCT` - COUNT(DISTINCT)
## 已知限制
1. **TRIGGERs 尚未支援** - 觸發器
2. **ATTACH/DETACH** - 多資料庫尚未支援
3. **VACUUM** - 資料庫壓縮尚未支援
4. **B+Tree 快取** - UPDATE + ROLLBACK 同一列時,B+Tree 可能仍返回修改後的值
5. **VIEW 查詢展開** - 視圖使用 Debug 格式,無法正確展開
## 下一步
1. **TRIGGERs 支援** - 觸發器
2. **ATTACH DATABASE** - 多資料庫
3. **VACUUM** - 資料庫壓縮
## 對應 SQLite 相容性
| DDL (CREATE/DROP TABLE) | ✅ 完成 |
| DML (INSERT/UPDATE/DELETE) | ✅ 完成 |
| SELECT with WHERE, JOIN | ✅ 完成 |
| Aggregate (COUNT/SUM/AVG/MIN/MAX) | ✅ 完成 |
| Transactions | ✅ 完成 |
| AUTOINCREMENT | ✅ 完成 |
| FOREIGN KEY | ✅ 完成 |
| FTS5 (CJK) | ✅ 完成 |
| CREATE/DROP INDEX | ✅ 完成 (v1.3) |
| PRAGMA | ✅ 完成 (v1.3) |
| ALTER TABLE | ✅ 完成 (v1.3) |
| EXPLAIN | ✅ 完成 (v1.3) |
| WAL Mode | ✅ 完成 (v1.4) |
| CREATE/DROP VIEW | ✅ 完成 (v1.5) |
| REINDEX | ✅ 完成 (v1.5) |
| ANALYZE | ✅ 完成 (v1.5) |
| sqlite_master | ✅ 完成 (v1.6) |
| PRAGMA table_info/index_list/index_info | ✅ 完成 (v1.6) |
| **UNION / UNION ALL** | ✅ 新增 (v1.7) |
| **子查詢增強** | ✅ 新增 (v1.7) |
| **EXISTS** | ✅ 新增 (v1.7) |
| **COUNT DISTINCT** | ✅ 新增 (v1.7) |
| TRIGGERs | ❌ 待支援 |
| ATTACH | ❌ 待支援 |
| VACUUM | ❌ 待支援 |
| CHECK constraints | ❌ 待支援 |