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)

Reply via email to