Files
Baradb/clients/nim/ormin/tests/tpostgre.nim
T
dimgigov 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
Add Ormin ORM support for BaraDB (Nim client)
2026-05-15 21:49:08 +03:00

131 lines
4.0 KiB
Nim

import unittest, json, strutils, macros, times, os, sequtils
# Postgres connection handled through ormin_postgre backend
from db_connector/db_postgres import exec, getValue
import ormin
import ormin/ormin_postgre as ormin_postgre
# import db_connector/db_postgres as db_postgres
import ormin/db_utils
when defined(macosx):
{.passL: "-Wl,-rpath,/opt/homebrew/lib/postgresql@14".}
importModel(DbBackend.postgre, "model_postgre")
let
db {.global.} = ormin_postgre.open("localhost", "test", "test", "test_ormin")
testDir = currentSourcePath.parentDir()
sqlFile = Path(testDir / "model_postgre.sql")
suite "Test special database types and functions of postgre":
discard
let
dtStr1 = "2018-03-30 01:01:01"
dt1 = parse(dtStr1, "yyyy-MM-dd HH:mm:ss")
dtnStr1 = "2019-03-30 11:02:02+08"
dtn1 = parse(dtnStr1, "yyyy-MM-dd HH:mm:sszz")
dtzStr1 = "2020-03-30 09:03:03Z"
dtz1 = parse(dtzStr1, "yyyy-MM-dd HH:mm:sszz")
dtStr2 = "2018-03-30 01:01:01.123"
dt2 = parse(dtStr2, "yyyy-MM-dd HH:mm:ss\'.\'fff")
dtnStr2 = "2019-03-30 11:02:02.123+08"
dtn2 = parse(dtnStr2, "yyyy-MM-dd HH:mm:ss\'.\'fffzz")
dtzStr2 = "2020-03-30 09:03:03.123Z"
dtz2 = parse(dtzStr2, "yyyy-MM-dd HH:mm:ss\'.\'fffzz")
dtStr3 = "2018-03-30 01:01:01.123456"
dt3 = parse(dtStr3, "yyyy-MM-dd HH:mm:ss\'.\'ffffff")
dtnStr3 = "2019-03-30 11:02:02.123456+08"
dtn3 = parse(dtnStr3, "yyyy-MM-dd HH:mm:ss\'.\'ffffffzz")
dtzStr3 = "2020-03-30 09:03:03.123456Z"
dtz3 = parse(dtzStr3, "yyyy-MM-dd HH:mm:ss\'.\'ffffffzz")
dtjson1 = %*{"dt": dt1.format(jsonTimeFormat),
"dtn": dtn1.format(jsonTimeFormat),
"dtz": dtz1.format(jsonTimeFormat)}
dtjson2 = %*{"dt": dt2.format(jsonTimeFormat),
"dtn": dtn2.format(jsonTimeFormat),
"dtz": dtz2.format(jsonTimeFormat)}
dtjson3 = %*{"dt": dt3.format(jsonTimeFormat),
"dtn": dtn3.format(jsonTimeFormat),
"dtz": dtz3.format(jsonTimeFormat)}
let insertSql = sql"insert into tb_timestamp(dt, dtn, dtz) values (?, ?, ?)"
suite "timestamp_insert":
setup:
db.dropTable(sqlFile, "tb_timestamp")
db.createTable(sqlFile, "tb_timestamp")
test "insert":
query:
insert tb_timestamp(dt = ?dt1, dtn = ?dtn1, dtz = ?dtz1)
check db_postgres.getValue(db, sql"select count(*) from tb_timestamp") == "1"
test "json":
query:
insert tb_timestamp(dt = %dtjson1["dt"],
dtn = %dtjson1["dtn"],
dtz = %dtjson1["dtz"])
check db_postgres.getValue(db, sql"select count(*) from tb_timestamp") == "1"
suite "timestamp":
db.dropTable(sqlFile, "tb_timestamp")
db.createTable(sqlFile, "tb_timestamp")
db_postgres.exec(db, insertSql, dtStr1, dtnStr1, dtzStr1)
db_postgres.exec(db, insertSql, dtStr2, dtnStr2, dtzStr2)
db_postgres.exec(db, insertSql, dtStr3, dtnStr3, dtzStr3)
doAssert db_postgres.getValue(db, sql"select count(*) from tb_timestamp") == "3"
test "query":
let res = query:
select tb_timestamp(dt, dtn, dtz)
check res == [(dt1, dtn1, dtz1),
(dt2, dtn2, dtz2),
(dt3, dtn3, dtz3)]
test "where":
let res = query:
select tb_timestamp(dt)
where dt == ?dt1
check res == [dt1]
test "in":
let
duration = initDuration(hours = 1)
dtStart = dt1 - duration
dtEnd = dt1 + duration
res2 = query:
select tb_timestamp(dt)
where dt in ?dtStart .. ?dtEnd
check res2 == [dt1, dt2, dt3]
test "iter":
createIter iter:
select tb_timestamp(dt)
where dt == ?dt
var res: seq[DateTime]
for it in db.iter(dt1):
res.add(it)
check res == [dt1]
test "proc":
createProc aproc:
select tb_timestamp(dt)
where dt == ?dt
check db.aproc(dt1) == [dt1]
test "json":
let res = query:
select tb_timestamp(dt, dtn, dtz)
produce json
check res == %*[dtjson1, dtjson2, dtjson3]
test "json_where":
let res = query:
select tb_timestamp(dt, dtn, dtz)
where dt == %dtjson1["dt"]
produce json
check res[0] == dtjson1