sql5 4.1.0

SQLite compatible database with CJK FTS5 full-text search and vector similarity
Documentation
# v3.7 - SQLite 相容性提升

## 日期:2026-05-10

## 主要功能

### SQLite API 相容性提升

本版本致力於提升 sql5 Python 客戶端與原生 sqlite3 模組的 API 相容性,確保兩者返回相同的資料結構。

### 新增功能

1. **ResultSet 結構擴充**
   - `affected`: 受影響的行數(INSERT/UPDATE/DELETE)
   - `lastrowid`: 最後插入行的 ID(AUTOINCREMENT)

2. **Python Cursor 類別增強**
   - `description`: 符合 DB-API 2.0 標準
   - `rowcount`: 返回受影響行數
   - `lastrowid`: 返回最後插入行 ID

3. **FTS5 格式修正**
   - FTS5 查詢結果格式與 sqlite3 一致

4. **記憶體模式修正**
   - `:memory:` 不再建立磁碟檔案

---

## API 相容性對照

| 項目 | sqlite3 | sql5 v3.7 |
|------|---------|-----------|
| INSERT affected | N | N ✅ |
| INSERT lastrowid | id | id ✅ |
| INSERT columns | None | [] ✅ |
| UPDATE affected | N | N ✅ |
| DELETE affected | N | N ✅ |
| cursor.description || 有 ✅ |
| cursor.rowcount | -1/N | -1/N ✅ |

---

## 測試

### 比較測試(22 tests)

```
tests/test_compare_sqlite.py::TestCursorDescription ... PASSED
tests/test_compare_sqlite.py::TestRowTypes ... PASSED
tests/test_compare_sqlite.py::TestRowCount ... PASSED
tests/test_compare_sqlite.py::TestLastRowId ... PASSED
tests/test_compare_sqlite.py::TestAffectedRows ... PASSED
tests/test_compare_sqlite.py::TestNullHandling ... PASSED
tests/test_compare_sqlite.py::TestDataTypes ... PASSED
tests/test_compare_sqlite.py::TestEmptyResults ... PASSED
tests/test_compare_sqlite.py::TestCursorAttributes ... PASSED
tests/test_compare_sqlite.py::TestIterateCursor ... PASSED
tests/test_compare_sqlite.py::TestFTS5Format ... PASSED

22 passed
```

### 完整測試(test.sh)

```
[PASS] Rust unit tests (cargo test)      — 353 passed
[PASS] CLI integration tests (shtest.sh) — 114 passed
[PASS] Python pytest tests               — 48 passed, 5 skipped
[PASS] Python client test (subprocess)   — PASSED
[PASS] WebSocket test (v3.0)             — PASSED
```

---

## 技術細節

### ResultSet 結構

```rust
pub struct ResultSet {
    pub columns: Vec<String>,     // 欄位名稱列表
    pub rows:    Vec<Vec<Value>>, // 查詢結果列
    pub affected: i64,            // 受影響的行數
    pub lastrowid: Option<i64>,   // 最後插入行的 ID
}
```

### JSON 回應格式

```json
{
  "ok": true,
  "columns": ["id", "name"],
  "rows": [[1, "Alice"]],
  "affected": 1,
  "lastrowid": 1
}
```

---

## 已知限制

1. **多列 INSERT**: `INSERT INTO t VALUES (1), (2), (3)` 需分開執行
2. **JOIN**: 尚未完整支援

---

## 修訂歷史

- 2026-05-10:v3.7 初始版本