Files
Baradb/clients/nim-allographer/tests/baradb/test_query.nim
T
dimgigov 6bfc5b3a3c
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
feat(clients): add nim-allographer client with BaraDB driver support
- 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
2026-05-21 15:49:11 +03:00

83 lines
2.5 KiB
Nim

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