# sql5 v1.5 版本說明(已完成)
## 版本資訊
- **版本**:1.5
- **日期**:2026-05-03
- **名稱**:VIEW 虛擬表支援
## 新增功能
### 1. CREATE VIEW / DROP VIEW ✅ 完成
- `CREATE VIEW name AS select_stmt` - 建立視圖
- `CREATE TEMP VIEW name AS select_stmt` - 建立暫時視圖
- `DROP VIEW name` - 刪除視圖
- `DROP VIEW IF EXISTS name` - 安全刪除
### 2. VIEW 查詢支援 ✅ 完成
### 3. sqlite_master 系統表 ✅ 完成
### 4. REINDEX 命令 ✅ 完成
### 5. ANALYZE 命令 ✅ 完成
- `ANALYZE` - 收集資料庫統計資訊
- 供查詢規劃器優化使用
## 使用方式
```bash
# 建立視圖
CREATE VIEW active_users AS
SELECT id, name FROM users WHERE active = 1;
# 查詢視圖
SELECT * FROM active_users;
# 刪除視圖
DROP VIEW active_users;
# REINDEX
REINDEX;
# ANALYZE
ANALYZE;
```
## 架構
```
┌─────────────────────────────────────────┐
│ REPL Interface │
└─────────────────┬───────────────────────┘
│
┌─────────────────▼───────────────────────┐
│ Executor + Planner │
│ ┌─────────────────────────────────┐ │
│ │ Catalog │ │
│ │ - tables: HashMap<name, Meta> │ │
│ │ - views: HashMap<name, ViewDef>│ │ ← 新增
│ └─────────────────────────────────┘ │
└─────────────────┬───────────────────────┘
```
## SQLite 語法支援
```sql
-- CREATE VIEW 語法
CREATE [TEMPORARY|TEMP] VIEW [IF NOT EXISTS] view_name AS select_stmt;
-- DROP VIEW 語法
DROP VIEW [IF EXISTS] view_name;
```
## 實作細節
### ViewMeta 結構
```rust
pub struct ViewMeta {
pub name: String,
pub query: SelectStmt, // 原始 SELECT 語句
pub temp: bool, // 是否為 TEMP VIEW
}
```
### 查詢展開
- 在 planner 中,当 FROM 子句引用 VIEW 時,自動展開為底層 SELECT
- 支援巢狀視圖遞迴展開
## 測試計畫
1. `CREATE VIEW basic` - 基本視圖建立
2. `CREATE VIEW with complex query` - 複雜查詢視圖
3. `CREATE TEMP VIEW` - 暫時視圖
4. `CREATE VIEW IF NOT EXISTS` - 避免重複錯誤
5. `DROP VIEW` - 刪除視圖
6. `DROP VIEW IF EXISTS` - 安全刪除
7. `SELECT FROM view` - 查詢視圖
8. `JOIN view with table` - 視圖與表 JOIN
9. `REINDEX` - 索引重建
10. `ANALYZE` - 統計資訊收集
## 已知限制
1. **TRIGGERs 尚未支援** - 觸發器
2. **ATTACH/DETACH** - 多資料庫尚未支援
3. **VACUUM** - 資料庫壓縮尚未支援
4. **B+Tree 快取** - UPDATE + ROLLBACK 同一列時,B+Tree 可能仍返回修改後的值
## 下一步
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) |
| TRIGGERs | ❌ 待支援 |
| ATTACH | ❌ 待支援 |
| VACUUM | ❌ 待支援 |