# sql5 v3.0 - WebSocket Server Support
## Overview
v3.0 新增 WebSocket server 模式,支援多 client 連線:
```
┌─────────────────┐ ┌─────────────────┐
│ Python client │ subprocess (default) │ Rust server │
│ sql5.connect() │ ←─ JSON over stdio ─────→│ sql5 --server │
└─────────────────┘ └─────────────────┘
┌─────────────────┐ ┌─────────────────┐
│ Python client │ WebSocket │ Rust server │
│ sql5.connect( │ ←─ WS ───────────────────→│ sql5 --websocket
│ transport= │ │ 8080 │
│ "websocket") │ └─────────────────┘
└─────────────────┘
```
## Server Modes
| REPL | `sql5` or `sql5 db.db` | Interactive CLI |
| stdio server | `sql5 --server [db]` | JSON over stdin/stdout (subprocess mode) |
| WebSocket server | `sql5 --websocket <port> [db]` | WebSocket server (multi-client) |
### WebSocket Usage
```bash
# Start WebSocket server on default port 8080
sql5 --websocket 8080
# Start with database file
sql5 --websocket 8080 mydb.db
# Custom port
sql5 --websocket 9000
```
### Python Client
```python
import sql5
# Default: subprocess mode (v2.0 compatible)
conn = sql5.connect("mydb.db")
# WebSocket mode (v3.0 new)
conn = sql5.connect(
path="mydb.db",
transport="websocket",
host="127.0.0.1",
port=8080
)
# Execute queries
cursor = conn.execute("SELECT * FROM users")
rows = cursor.fetchall()
conn.close()
```
### Protocol
WebSocket server 使用相同的 JSON protocol:
```json
// Request
{"method": "execute", "sql": "SELECT 1"}
// Response
{"ok": true, "columns": ["1"], "rows": [[1]], "affected": 0}
// Error
{"ok": false, "error": "table not found"}
```
## Changes from v2.0
- **New**: WebSocket server mode (`--websocket`)
- **New**: Python client supports `transport` parameter
- **New**: Added `websocket-client` dependency for WebSocket mode
- **Version**: 3.0.0
## Installation
```bash
pip install sql5
```
Or install from source:
```bash
cd sql5_pypi
pip install -e .
```