# sql5 v1.9 版本說明(規劃中)
## 版本資訊
- **版本**:1.9
- **日期**:2026-05-03
- **名稱**:TRIGGER 支援
## 新增功能
### 1. CREATE TRIGGER
```sql
CREATE TRIGGER trigger_name AFTER INSERT ON table_name
BEGIN
INSERT INTO log_table VALUES (new.id);
END;
```
### 2. DROP TRIGGER
```sql
DROP TRIGGER trigger_name;
```
### 3. 行級觸發器
- BEFORE INSERT
- AFTER INSERT
- BEFORE UPDATE
- AFTER UPDATE
- BEFORE DELETE
- AFTER DELETE
### 4. 觸發器中的 NEW 和 OLD 引用
- `NEW.column` - 新插入/更新的值
- `OLD.column` - 舊值(UPDATE/DELETE)
### 5. 多語句觸發器
```sql
CREATE TRIGGER after_insert AFTER INSERT ON users
BEGIN
INSERT INTO log (msg) VALUES ('new user added');
UPDATE stats SET count = count + 1;
END;
```
## 使用方式
```sql
-- 建立日誌表
CREATE TABLE log (id INTEGER, action TEXT, ts TEXT);
-- 建立觸發器
CREATE TRIGGER after_user_insert AFTER INSERT ON users
BEGIN
INSERT INTO log VALUES (NEW.id, 'INSERT', datetime('now'));
END;
-- 測試
INSERT INTO users (name) VALUES ('Alice');
-- 自動寫入 log 表
```
## 架構
```
┌─────────────────────────────────────────┐
│ Executor │
│ ┌─────────────────────────────────┐ │
│ │ Trigger Executor │ │ ← 新增
│ │ - 解析觸發器主體 │ │
│ │ - 執行觸發 SQL │ │
│ └─────────────────────────────────┘ │
└─────────────────────────────────────────┘
```
## 實作重點
### TriggerMeta 結構
```rust
pub struct TriggerMeta {
pub name: String,
pub table: String,
pub timing: TriggerTiming, // BEFORE/AFTER
pub event: TriggerEvent, // INSERT/UPDATE/DELETE
pub body: Vec<Statement>, // 觸發器內的 SQL 語句
}
```
### 執行流程
1. INSERT/UPDATE/DELETE 時檢查是否有對應觸發器
2. 若有,在主語句執行前/後執行觸發器主體
3. 觸發器主體作為獨立語句執行
## 測試計畫
1. `CREATE TRIGGER basic` - 基本觸發器建立
2. `AFTER INSERT trigger` - 插入後觸發
3. `BEFORE DELETE trigger` - 刪除前觸發
4. `DROP TRIGGER` - 刪除觸發器
5. `NEW/OLD reference` - 引用新舊值
## 對應 SQLite 相容性
| DDL (CREATE/DROP TABLE) | ✅ 完成 |
| DML (INSERT/UPDATE/DELETE) | ✅ 完成 |
| SELECT with WHERE, JOIN | ✅ 完成 |
| Aggregate | ✅ 完成 |
| 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) |
| **CREATE/DROP TRIGGER** | ✅ 新增 (v1.9) |
| ATTACH | ❌ 待支援 |
| VACUUM | ❌ 待支援 |