nim
import db_connector/[db_sqlite, sqlite3]
type
TRow = StringTableRef
TRows = seq[TRow]
var db:PSqlite3
proc dbOpen*(dbpath: string) {.exportpy.} =
try:
discard open(dbpath, db)
var ret = db.create_function("powx", 2, SQLITE_UTF8, nil, powx,
nil, nil)
ret = db.create_function("squareRoot", 1, SQLITE_UTF8, nil,
squareRoot, nil, nil)
except:
stderr.writeLine(getCurrentExceptionMsg())
proc dbClose*() =
discard sqlite3.close db
proc dbGetRowsCb(arr: pointer; colCount: int32; values, columns:
cstringArray): int32 {.cdecl.} =
var row:Trow = newStringTable()
for i in 0..<colCount:
row[$columns[i]] = $values[i]
cast[ptr TRows](arr)[].add(row)
return 0
proc dbGetRows*(q:string): TRows =
var err:cstring=""
discard db.exec(q, dbGetRowsCb, result.addr, err)
if err != "":
echo err
free err
Run
That's how i did it, I used the loww level interface because i encountered some
problems with the high level one(don't remember what, it's been a while now)