feat(clients): professional clients with tests, CI/CD, and examples

- Python: pyproject.toml, pytest suite (unit + integration), README, examples
- JavaScript: package.json, TypeScript definitions, node:test suite, README, examples
- Nim: integration tests, examples, README, improved nimble tasks
- Rust: fixed nodelay/localhost IPv6 bug, integration tests, examples, README
- Added GitHub Actions CI for all 4 clients against Docker server
- Added docker-compose.test.yml for local integration testing
- Added .gitignore for each client
This commit is contained in:
2026-05-08 00:18:34 +03:00
parent e9d3c7e9de
commit ae2e07e626
31 changed files with 2651 additions and 12 deletions
+96
View File
@@ -0,0 +1,96 @@
## BaraDB Nim Client — Basic Examples
## Make sure BaraDB is running on localhost:9472
import std/asyncdispatch
import std/strutils
import baradb/client
proc exampleConnection() {.async.} =
echo "=== Connection ==="
let client = newClient()
await client.connect()
echo "Connected: ", client.isConnected
echo "Ping: ", await client.ping()
client.close()
echo "Connected after close: ", client.isConnected
echo ""
proc exampleSimpleQuery() {.async.} =
echo "=== Simple Query ==="
let client = newClient()
await client.connect()
let result = await client.query("SELECT 42 as answer, 'BaraDB' as db")
echo "Columns: ", result.columns
echo "Row count: ", result.rowCount
for row in result.rows:
echo " ", row.join(", ")
client.close()
echo ""
proc exampleParameterizedQuery() {.async.} =
echo "=== Parameterized Query ==="
let client = newClient()
await client.connect()
let result = await client.query(
"SELECT $1 as num, $2 as txt",
@[
WireValue(kind: fkInt64, int64Val: 123),
WireValue(kind: fkString, strVal: "hello world"),
]
)
for row in result.rows:
echo " ", row.join(", ")
client.close()
echo ""
proc exampleQueryBuilder() {.async.} =
echo "=== Query Builder ==="
let client = newClient()
await client.connect()
let sql = newQueryBuilder(client)
.select("id", "name")
.from("users")
.where("active = true")
.orderBy("name", "ASC")
.limit(5)
.build()
echo "Generated SQL: ", sql
client.close()
echo ""
proc exampleDdlDml() {.async.} =
echo "=== DDL & DML ==="
let client = newClient()
await client.connect()
try:
discard await client.exec("DROP TABLE IF EXISTS demo_products")
except:
discard
discard await client.exec("CREATE TABLE demo_products (id INT PRIMARY KEY, name STRING, price FLOAT)")
let affected = await client.exec("INSERT INTO demo_products (id, name, price) VALUES (1, 'Widget', 9.99)")
echo "Insert affected rows: ", affected
let result = await client.query("SELECT * FROM demo_products")
echo "Select returned ", result.rowCount, " row(s)"
for row in result.rows:
echo " ", row.join(", ")
discard await client.exec("DROP TABLE demo_products")
echo "Table dropped"
client.close()
echo ""
proc main() {.async.} =
echo "BaraDB Nim Client Examples"
echo "Make sure BaraDB is running on localhost:9472"
echo ""
await exampleConnection()
await exampleSimpleQuery()
await exampleParameterizedQuery()
await exampleQueryBuilder()
await exampleDdlDml()
waitFor main()