sql5 3.2.17

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

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