4e54075078
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
3.2 KiB
3.2 KiB
Ormin + BaraDB
This is a fork of Ormin (prepared SQL statement generator for Nim) with added support for BaraDB — a multimodal database engine with a binary wire protocol.
What changed?
- Added
DbBackend.baradbto the backend enum. - Added
ImportTarget.baradbfor schema import. - New backend file
ormin/ormin_baradb.nimthat bridges Ormin's compile-time query DSL to the BaraDB Nim client (baradb/client).
Installation
Install both the BaraDB client and this Ormin fork:
# Install BaraDB client (from barabadb/clients/nim)
cd clients/nim
nimble install
# Install Ormin with BaraDB support
cd ormin
nimble install
Quick Start
1. Write your schema
Create a file named model.sql:
CREATE TABLE users (
id SERIAL PRIMARY KEY,
name VARCHAR(255) NOT NULL,
email VARCHAR(255),
age INT
);
2. Use Ormin DSL in Nim
import json
import ormin
importModel(DbBackend.baradb, "model")
let db {.global.} = open("127.0.0.1:9472", "admin", "", "default")
# Select tuples
proc listUsers() =
let rows = query:
select users(id, name, email)
orderby id
for r in rows:
echo "User #", r.id, ": ", r.name
# Parameterized query
proc findUser(name: string) =
let row = query:
select users(id, name, email)
where name == ?name
limit 1
echo row
# Insert
proc addUser(name, email: string; age: int) =
query:
insert users(name = ?name, email = ?email, age = ?age)
# JSON output
proc usersAsJson(): seq[JsonNode] =
result = query:
select users(id, name)
produce json
when isMainModule:
listUsers()
Compile with:
nim c -r myapp.nim
Connection string format
open(host:port, username, password, database)
let db = open("127.0.0.1:9472", "admin", "", "default")
If you omit the port, the default 9472 is used.
Supported Ormin features
| Feature | Status |
|---|---|
select |
✅ |
where |
✅ |
join / leftjoin |
✅ |
insert |
✅ |
update |
✅ |
delete |
✅ |
orderby |
✅ |
limit / offset |
✅ |
? placeholders |
✅ |
% JSON params |
✅ |
produce json |
✅ |
query(T) typed |
✅ |
createProc |
✅ |
createIter |
✅ |
transaction |
⚠️ (relies on server support) |
returning |
⚠️ (single-row limit works) |
Limitations
- Wire protocol strings: BaraDB returns all column values as strings over the wire. The backend parses them at runtime. This is slightly less efficient than native SQLite/PostgreSQL bindings but keeps the implementation simple and portable.
getLastId: Currently returns0. If BaraDB supportsRETURNING id, uselimit 1queries instead.- Async: Ormin's DSL is synchronous by design. This backend uses
SyncClientunder the hood. If you need async, use the rawbaradb/clientasync API directly.
Running the example
cd clients/nim/ormin/examples
nim c -r baradb_basic.nim
(Requires a BaraDB server on localhost:9472.)
License
Same as upstream Ormin — MIT.