sql5 4.1.0

SQLite compatible database with CJK FTS5 full-text search and vector similarity
Documentation
# 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 相容性

| SQLite 功能 | sql5 v1.7 狀態 |
|------------|---------------|
| 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 | ❌ 待支援 |