sql5 3.2.18

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

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