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
131 lines
4.0 KiB
Nim
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
|