model_postgre.nim 1.3 KB

123456789101112131415161718192021222324252627282930313233343536
  1. import strutils, db_postgres
  2. import model
  3. const qworld = sql"SELECT id, randomNumber FROM World WHERE id = $1"
  4. const qfortunes = sql"SELECT id, message FROM Fortune"
  5. const qupdates = sql"UPDATE World SET randomNumber = $1 WHERE id = $2"
  6. var db {.threadvar.}: TDbConn
  7. var qworld_prepared {.threadvar.}: TSqlPrepared
  8. var qfortunes_prepared {.threadvar.}: TSqlPrepared
  9. var qupdates_prepared {.threadvar.}: TSqlPrepared
  10. proc init_db*() {.procvar.} =
  11. db = open("", "benchmarkdbuser", "benchmarkdbpass",
  12. "host=127.0.0.1 port=5432 dbname=hello_world")
  13. # prepare queries
  14. qworld_prepared = db.prepare("world", qworld, 1)
  15. qfortunes_prepared = db.prepare("fortunes", qfortunes, 0)
  16. qupdates_prepared = db.prepare("updates", qupdates, 2)
  17. proc getWorld*(n: int): TWorld =
  18. #let row = db.getRow(qworld, n)
  19. ## Yes, prepared queries are faster than unprepared ones
  20. let row = db.getRow(qworld_prepared, n)
  21. result.id = parseInt(row[0])
  22. result.randomNumber = parseInt(row[1])
  23. proc updateWorld*(w: TWorld) =
  24. db.exec(qupdates_prepared, $w.randomNumber, $w.id)
  25. proc getAllFortunes*(): seq[TFortune] =
  26. let rows = db.getAllRows(qfortunes_prepared)
  27. result.newSeq(rows.len)
  28. for j, row in rows.pairs:
  29. result[j] = (row[0].parseInt, row[1])