feat: canonical Nim client refactor with typed rows, pool, and allographer wrapper
CI / test (push) Has been cancelled
CI / verify (push) Has been cancelled
Clients CI / build-server (push) Has been cancelled
Clients CI / test-python (push) Has been cancelled
Clients CI / test-javascript (push) Has been cancelled
Clients CI / test-nim (push) Has been cancelled
Clients CI / test-rust (push) Has been cancelled
CI / test (push) Has been cancelled
CI / verify (push) Has been cancelled
Clients CI / build-server (push) Has been cancelled
Clients CI / test-python (push) Has been cancelled
Clients CI / test-javascript (push) Has been cancelled
Clients CI / test-nim (push) Has been cancelled
Clients CI / test-rust (push) Has been cancelled
- Extract wire protocol into clients/nim/src/baradb/wire.nim - Add BaraError exception hierarchy - Refactor BaraClient/SyncClient with typedRows, AsyncLock request queue, timeouts, TLS config - Add BaraPool and optional HTTP fallback - Add mock-server wire and pool unit tests - Bump baradb nimble package to 1.2.0 - Make nim-allographer depend on canonical baradb client - Use typed rows in allographer toJson - Deprecate src/barabadb/client/client.nim - Update docs/en/clients.md and clients/nim/README.md
This commit is contained in:
+58
-1
@@ -15,7 +15,7 @@ Official Nim client for **BaraDB** — a multimodal database engine.
|
||||
Add to your `.nimble` file:
|
||||
|
||||
```nim
|
||||
requires "baradb >= 1.1.6"
|
||||
requires "baradb >= 1.2.0"
|
||||
```
|
||||
|
||||
Or clone locally:
|
||||
@@ -95,6 +95,63 @@ proc main() {.async.} =
|
||||
waitFor main()
|
||||
```
|
||||
|
||||
## Connection Pool
|
||||
|
||||
```nim
|
||||
import asyncdispatch, baradb/client, baradb/pool
|
||||
|
||||
proc main() {.async.} =
|
||||
let cfg = ClientConfig(host: "127.0.0.1", port: 9472)
|
||||
let pool = newBaraPool(cfg, minConnections = 2, maxConnections = 10)
|
||||
withClient(pool):
|
||||
let r = await c.query("SELECT name FROM users WHERE id = ?",
|
||||
@[WireValue(kind: fkInt64, int64Val: 1)])
|
||||
echo r.typedRows
|
||||
|
||||
waitFor main()
|
||||
```
|
||||
|
||||
## Typed Rows
|
||||
|
||||
`QueryResult` now carries both a legacy string view (`rows`) and a typed view (`typedRows`):
|
||||
|
||||
```nim
|
||||
let r = await client.query("SELECT * FROM vectors")
|
||||
for row in r.typedRows:
|
||||
if row[0].kind == fkVector:
|
||||
echo row[0].vecVal
|
||||
```
|
||||
|
||||
## TLS
|
||||
|
||||
TLS for the synchronous client is available via `when defined(ssl)`. The async binary client requires a user-supplied `sslContext` because `asyncnet` does not provide native TLS; alternatively use the HTTP fallback.
|
||||
|
||||
## Error Handling
|
||||
|
||||
All client errors inherit from `BaraError`:
|
||||
|
||||
- `BaraIoError` — connection / timeout issues
|
||||
- `BaraServerError` — server returned an error frame
|
||||
- `BaraAuthError` — authentication failure
|
||||
- `BaraProtocolError` — unexpected wire response
|
||||
- `BaraPoolTimeoutError` — no connection available in time
|
||||
|
||||
## HTTP Fallback
|
||||
|
||||
For environments where only the HTTP port is open:
|
||||
|
||||
```nim
|
||||
import asyncdispatch, baradb/http
|
||||
|
||||
proc main() {.async.} =
|
||||
let c = newBaraHttpClient()
|
||||
let result = await c.query("SELECT * FROM users")
|
||||
echo result
|
||||
c.close()
|
||||
|
||||
waitFor main()
|
||||
```
|
||||
|
||||
## Running Tests
|
||||
|
||||
Unit tests (no server):
|
||||
|
||||
Reference in New Issue
Block a user