Skip to content

Commit 1639954

Browse files
committed
add execM
1 parent dc32581 commit 1639954

File tree

3 files changed

+25
-15
lines changed

3 files changed

+25
-15
lines changed

src/easy_sqlite3.nim

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
import easy_sqlite3/[bindings,macros]
22
export macros
33

4-
export raw, len, toOpenArray, SQLiteError, SQLiteBlob, Statement, Database, OpenFlag, enableSharedCache, initDatabase, exec, changes, lastInsertRowid, `[]=`, reset, step, withColumnBlob, getParameterIndex, getColumnType, getColumn, unpack, `=destroy`
4+
export raw, len, toOpenArray, SQLiteError, SQLiteBlob, Statement, Database, OpenFlag, enableSharedCache, initDatabase, exec, execM, changes, lastInsertRowid, `[]=`, reset, step, withColumnBlob, getParameterIndex, getColumnType, getColumn, unpack, `=destroy`

src/easy_sqlite3/bindings.nim

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -421,7 +421,8 @@ proc changes*(st: var Database): int =
421421
proc changes*(st: ref Statement): int =
422422
sqlite3_changes sqlite3_db_handle st.raw
423423
424-
proc initStatement*(db: var Database, sql: string, flags: PrepareFlags = {}): Statement =
424+
proc newStatement*(db: var Database, sql: string, flags: PrepareFlags = {}): ref Statement =
425+
new result
425426
sqliteCheck db.raw, sqlite3_prepare_v3(db.raw, sql, sql.len, flags,
426427
addr result.raw, nil)
427428
@@ -430,17 +431,15 @@ proc fetchStatement*(db: var Database, sql: string): ref Statement =
430431
db.stmtcache.withValue(rhash, value) do:
431432
return value[]
432433
do:
433-
new result
434-
result[] = db.initStatement(sql, {sp_persistent})
434+
result = db.newStatement(sql, {sp_persistent})
435435
db.stmtcache[rhash] = result
436436
437437
proc fetchStatement*(db: var Database, sql: static[string]): ref Statement =
438438
const chash = sql.compileTimeHash
439439
db.stmtcache.withValue(chash, value) do:
440440
return value[]
441441
do:
442-
new result
443-
result[] = db.initStatement(sql, {sp_persistent})
442+
result = db.newStatement(sql, {sp_persistent})
444443
db.stmtcache[chash] = result
445444
446445
proc getParameterIndex*(st: ref Statement, name: string): int =
@@ -518,8 +517,21 @@ proc unpack*[T: tuple](st: ref Statement, _: typedesc[T]): T =
518517
519518
{.pop.}
520519
521-
proc exec*(db: var Database, sql: string): int {.discardable.} =
522-
var st = db.fetchStatement(sql)
523-
defer: st.reset()
520+
proc exec*(db: var Database, sql: string, cache: static bool = true): int {.discardable.} =
521+
when cache:
522+
let st = db.fetchStatement(sql)
523+
defer: st.reset()
524+
else:
525+
let st = db.newStatement(sql)
524526
if st.step():
525527
result = st.getColumn(0, int)
528+
529+
proc execM*(db: var Database, sqls: varargs[string]) {.discardable.} =
530+
discard db.exec "BEGIN IMMEDIATE"
531+
try:
532+
for sql in sqls:
533+
discard db.exec(sql, cache = false)
534+
discard db.exec "COMMIT"
535+
except:
536+
discard db.exec "ROLLBACK"
537+
raise getCurrentException()

tests/test_basic.nim

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,6 @@ import easy_sqlite3/[memfs, logfs]
55

66
proc select_1(arg: int): tuple[value: int] {.importdb: "SELECT $arg".}
77

8-
proc create_table() {.importdb: """
9-
CREATE TABLE mydata(name TEXT PRIMARY KEY NOT NULL, value INT NOT NULL) WITHOUT ROWID;
10-
""".}
11-
128
proc insert_data(name: string, value: int) {.importdb: """
139
INSERT INTO mydata(name, value) VALUES ($name, $value);
1410
""".}
@@ -31,8 +27,10 @@ test "full":
3127
"D": 3,
3228
}.toTable
3329
var db = initDatabase("test")
34-
db.exec "PRAGMA journal_mode=DELETE"
35-
db.create_table()
30+
db.execM(
31+
"PRAGMA journal_mode=DELETE",
32+
"CREATE TABLE mydata(name TEXT PRIMARY KEY NOT NULL, value INT NOT NULL) WITHOUT ROWID;"
33+
)
3634
db.transaction:
3735
for name, value in dataset:
3836
db.insert_data name, value

0 commit comments

Comments
 (0)