feat(clients): add nim-allographer client with BaraDB driver support
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
- Pure Nim wire protocol client (async + sync, no C FFI) - Query Builder: fluent API, SQL generator, execution, transactions - Schema Builder: create/alter/drop tables, column operations - Connection pool with aging and timeout handling - ORM integration via compile-time DB_BARADB switch - Tests: test_open, test_query - Documentation: README.md, PLAN_BARADB.md
This commit is contained in:
@@ -0,0 +1,82 @@
|
||||
discard """
|
||||
cmd: "nim c -r $file"
|
||||
"""
|
||||
|
||||
import std/unittest
|
||||
import std/asyncdispatch
|
||||
import std/json
|
||||
import std/options
|
||||
import std/strformat
|
||||
import ../../src/allographer/query_builder
|
||||
import ./connections
|
||||
|
||||
|
||||
let rdb = baradb
|
||||
|
||||
suite("Baradb query"):
|
||||
test("create table raw"):
|
||||
let sql = """
|
||||
CREATE TABLE IF NOT EXISTS "users" (
|
||||
"id" SERIAL PRIMARY KEY,
|
||||
"name" VARCHAR(255),
|
||||
"email" VARCHAR(255),
|
||||
"age" INTEGER
|
||||
)
|
||||
"""
|
||||
waitFor rdb.raw(sql).exec()
|
||||
check true
|
||||
|
||||
test("insert"):
|
||||
waitFor rdb.table("users").insert(%*{ "name": "Alice", "email": "alice@example.com", "age": 30 })
|
||||
waitFor rdb.table("users").insert(%*{ "name": "Bob", "email": "bob@example.com", "age": 25 })
|
||||
check true
|
||||
|
||||
test("get"):
|
||||
let users = waitFor rdb.select("id", "name", "email", "age").table("users").orderBy("id", Asc).get()
|
||||
check users.len >= 2
|
||||
check users[0]["name"].getStr == "Alice"
|
||||
check users[0]["email"].getStr == "alice@example.com"
|
||||
check users[0]["age"].getInt == 30
|
||||
|
||||
test("first"):
|
||||
let user = waitFor rdb.table("users").where("name", "=", "Alice").first()
|
||||
check user.isSome
|
||||
check user.get["name"].getStr == "Alice"
|
||||
|
||||
test("find"):
|
||||
let user = waitFor rdb.table("users").find(1)
|
||||
check user.isSome
|
||||
check user.get["id"].getInt == 1
|
||||
|
||||
test("update"):
|
||||
waitFor rdb.table("users").where("name", "=", "Alice").update(%*{ "age": 31 })
|
||||
let user = waitFor rdb.table("users").where("name", "=", "Alice").first()
|
||||
check user.isSome
|
||||
check user.get["age"].getInt == 31
|
||||
|
||||
test("delete"):
|
||||
waitFor rdb.table("users").where("name", "=", "Bob").delete()
|
||||
let user = waitFor rdb.table("users").where("name", "=", "Bob").first()
|
||||
check user.isNone
|
||||
|
||||
test("count"):
|
||||
let cnt = waitFor rdb.table("users").count()
|
||||
check cnt >= 1
|
||||
|
||||
test("transaction rollback"):
|
||||
waitFor rdb.begin()
|
||||
waitFor rdb.table("users").insert(%*{ "name": "Charlie", "email": "charlie@example.com", "age": 40 })
|
||||
waitFor rdb.rollback()
|
||||
let user = waitFor rdb.table("users").where("name", "=", "Charlie").first()
|
||||
check user.isNone
|
||||
|
||||
test("transaction commit"):
|
||||
waitFor rdb.begin()
|
||||
waitFor rdb.table("users").insert(%*{ "name": "Dave", "email": "dave@example.com", "age": 50 })
|
||||
waitFor rdb.commit()
|
||||
let user = waitFor rdb.table("users").where("name", "=", "Dave").first()
|
||||
check user.isSome
|
||||
|
||||
test("raw select"):
|
||||
let users = waitFor rdb.raw("SELECT * FROM \"users\" WHERE \"age\" > 20").get()
|
||||
check users.len >= 1
|
||||
Reference in New Issue
Block a user