ae2e07e626
- 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
97 lines
2.5 KiB
Nim
97 lines
2.5 KiB
Nim
## 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()
|