# sql5 v1.18 版本說明(已完成)
## 版本資訊
- **版本**:1.18
- **日期**:2026-05-04
- **名稱**:ATTACH DATABASE(多資料庫支援)
## 已實作功能
### ATTACH DATABASE
```sql
ATTACH DATABASE 'filename' AS alias;
DETACH DATABASE alias;
```
**支援情况:**
- ✅ `ATTACH DATABASE 'path' AS alias` — 開啟並掛載附屬資料庫
- ✅ `DETACH DATABASE alias` — 卸載附屬資料庫
- ✅ `SELECT * FROM alias.table` — 讀取附屬資料庫的表
- ✅ Parser 支援 `alias.table` 語法
## 架構變化
**附屬資料庫管理(直接整合於 Executor):**
```rust
struct AttachedDb {
alias: String,
storage: SharedStorage,
catalog: Catalog<SharedStorage>,
tables: HashMap<String, Table<SharedStorage>>,
}
pub struct Executor {
// ... existing fields ...
attached: HashMap<String, AttachedDb>,
}
```
**Parser 變化:**
- `parse_table_ref()` 現在支援 `alias.table` 語法
- 新增 `Token::Attach`, `Token::Detach`, `Token::Database`
- 新增 `Statement::Attach` 和 `Statement::Detach`
**Planner 變化:**
- `Plan::Attach { path, alias }` 和 `Plan::Detach { alias }`
**Executor 變化:**
- `exec_attach()` — 開啟資料庫檔案,建立 storage + catalog
- `exec_detach()` — 移除附屬資料庫
- `get_table()` — 支援 `alias.table` 格式
- `col_names()` — 支援附屬資料庫的欄位查詢
## 當前限制
- `CREATE TABLE alias.table` — **不支援**(仍會在 main DB 建立)
- `INSERT/UPDATE/DELETE` on `alias.table` — **可能不完全支援**
- 跨庫 JOIN (`main.t1 JOIN alias.t2`) — **未測試**
- 同一附屬資料庫內的 DML — 需要驗證
- `DETACH` 時附屬資料庫的 tables 快取未清除
## SQLite 相容性
| ATTACH DATABASE | 🔧 基本讀取支援(v1.18) |
| DETACH DATABASE | 🔧 基本支援(v1.18) |
| 跨庫查詢 | ⚠️ 部分支援,待驗證 |
| VACUUM | ❌ 待支援 |