# sql5 v1.6 版本說明(已完成)
## 版本資訊
- **版本**:1.6
- **日期**:2026-05-03
- **名稱**:系統表與 Schema 查詢增強
## 新增功能
### 1. sqlite_master 系統表
- `sqlite_master` 表自動維護資料庫所有物件的 schema 資訊
- 儲存類型:TABLE, INDEX, VIEW, TRIGGER
- 欄位:type, name, tbl_name, rootpage, sql
- 支援 `SELECT * FROM sqlite_master WHERE type='table'`
### 2. .schema 命令增強
- `.schema` - 顯示所有物件的建立語句
- `.schema table_name` - 顯示特定物件的建立語句
- 從 sqlite_master 讀取 schema 資訊
### 3. .tables 增強
- 顯示所有 TABLE 和 VIEW 名稱
- LIKE 模式匹配支援
### 4. PRAGMA table_info / index_list / index_info
- `PRAGMA table_info(table_name)` - 顯示欄位資訊
- `PRAGMA index_list(table_name)` - 顯示表的索引
- `PRAGMA index_info(index_name)` - 顯示索引的欄位
### 5. INSERT ... ON CONFLICT (UPSERT)
- `INSERT ... ON CONFLICT DO NOTHING` - 衝突時略過
- `INSERT ... ON CONFLICT DO UPDATE` - 衝突時更新
## 使用方式
```sql
-- 查看所有 TABLE
SELECT name FROM sqlite_master WHERE type='table';
-- 查看物件 schema
SELECT sql FROM sqlite_master WHERE name = 'users';
-- 查看欄位資訊
PRAGMA table_info('users');
-- 查看表的索引
PRAGMA index_list('users');
-- UPSERT 範例
INSERT INTO users (id, name) VALUES (1, 'Alice')
ON CONFLICT(id) DO UPDATE SET name = excluded.name;
```
## 架構
```
┌─────────────────────────────────────────┐
│ REPL Interface │
│ .schema / .tables / PRAGMA commands │
└─────────────────┬───────────────────────┘
│
┌─────────────────▼───────────────────────┐
│ Catalog + Meta │
│ ┌─────────────────────────────────┐ │
│ │ sqlite_master │ │ ← 新增
│ │ (system table for schema) │ │
│ └─────────────────────────────────┘ │
└─────────────────────────────────────────┘
```
## SQLite 語法支援
```sql
-- sqlite_master 查詢
SELECT * FROM sqlite_master WHERE type = 'table';
-- PRAGMA
PRAGMA table_info('table_name');
PRAGMA index_list('table_name');
PRAGMA index_info('index_name');
-- UPSERT
INSERT INTO table (key, value) VALUES (1, 'x')
ON CONFLICT(key) DO UPDATE SET value = excluded.value;
```
## 實作細節
### sqlite_master 結構
```rust
pub struct SqliteMasterRow {
pub type_: String, // "table", "index", "view", "trigger"
pub name: String, // 物件名稱
pub tbl_name: String, // 關聯的表名
pub rootpage: i32, // B+Tree 根頁號
pub sql: String, // 建立語句
}
```
## 測試計畫
1. `SELECT FROM sqlite_master` - 系統表查詢
2. `.schema` - 顯示所有 schema
3. `.schema table_name` - 顯示特定 table schema
4. `.tables` - 顯示所有表和視圖
5. `PRAGMA table_info` - 欄位資訊
6. `PRAGMA index_list` - 索引列表
7. `INSERT ... ON CONFLICT DO NOTHING` - 衝突略過
8. `INSERT ... ON CONFLICT DO UPDATE` - 衝突更新
## 已知限制
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) |
| **sqlite_master** | ✅ 新增 (v1.6) |
| **.schema enhanced** | ✅ 新增 (v1.6) |
| **PRAGMA table_info** | ✅ 新增 (v1.6) |
| **UPSERT (ON CONFLICT)** | ✅ 新增 (v1.6) |
| TRIGGERs | ❌ 待支援 |
| ATTACH | ❌ 待支援 |
| VACUUM | ❌ 待支援 |