# sql5 v1.8 版本說明(已完成)
## 版本資訊
- **版本**:1.8
- **日期**:2026-05-03
- **名稱**:CHECK 約束與預設值
## 新增功能
### 1. CHECK 約束
- `CREATE TABLE t (id INTEGER CHECK (id > 0))`
- 插入/更新時自動驗證條件
- 違反時返回錯誤
### 2. DEFAULT 值
- `CREATE TABLE t (id INTEGER DEFAULT 0)`
- 插入時未指定欄位使用預設值
- 支援 `DEFAULT (expression)`
### 3. NOT NULL 約束增強
- 確保欄位不允許 NULL 值
### 4. PRAGMA 增強
- `PRAGMA encoding` - 資料庫編碼
- `PRAGMA schema_version` - schema 版本
- `PRAGMA user_version` - 使用者版本
### 5. 簡單 CASE 表達式
- `CASE col WHEN 'A' THEN 1 WHEN 'B' THEN 2 END`
## 使用方式
```sql
-- CHECK 約束
CREATE TABLE t (
id INTEGER CHECK (id > 0),
age INTEGER CHECK (age >= 0 AND age <= 150)
);
INSERT INTO t VALUES (-1, 25); -- Error
-- DEFAULT 值
CREATE TABLE t (
id INTEGER DEFAULT 0,
name TEXT DEFAULT 'unknown'
);
INSERT INTO t (name) VALUES ('Alice'); -- id 會是 0
-- CASE 表達式
SELECT CASE status WHEN 'active' THEN 1 ELSE 0 END FROM t;
```
## 架構變更
```
┌─────────────────────────────────────────┐
│ Planner │
│ ┌─────────────────────────────────┐ │
│ │ Constraint Validation │ │ ← 新增
│ └─────────────────────────────────┘ │
└─────────────────────────────────────────┘
```
## 實作重點
### Constraint 驗證
```rust
// 插入/更新前檢查 CHECK 約束
fn validate_constraints(row: &Row, constraints: &[Constraint]) -> Result<(), String>
```
### Default 值處理
```rust
// 插入時填充預設值
fn apply_defaults(columns: &[Column], values: &mut Vec<Value>)
```
## 測試計畫
1. `CHECK constraint` - CHECK 約束驗證
2. `CHECK violation` - 違反 CHECK 返回錯誤
3. `DEFAULT integer` - 整數欄位預設值
4. `DEFAULT text` - 字串欄位預設值
5. `NOT NULL violation` - NOT NULL 約束
6. `CASE basic` - 基本 CASE 表達式
## 已知限制
1. **TRIGGERs 尚未支援** - 觸發器
2. **ATTACH/DETACH** - 多資料庫尚未支援
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) |
| UNION / UNION ALL | ✅ 完成 (v1.7) |
| 子查詢 (IN/EXISTS/Scalar) | ✅ 完成 (v1.7) |
| COUNT DISTINCT | ✅ 完成 (v1.7) |
| **CHECK 約束** | ✅ 新增 (v1.8) |
| **DEFAULT 值** | ✅ 新增 (v1.8) |
| **CASE 表達式** | ✅ 新增 (v1.8) |
| TRIGGERs | ❌ 待支援 |
| ATTACH | ❌ 待支援 |
| VACUUM | ❌ 待支援 |