@@ -421,7 +421,8 @@ proc changes*(st: var Database): int =
421
421
proc changes*(st: ref Statement): int =
422
422
sqlite3_changes sqlite3_db_handle st.raw
423
423
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
425
426
sqliteCheck db.raw, sqlite3_prepare_v3(db.raw, sql, sql.len, flags,
426
427
addr result .raw, nil)
427
428
@@ -430,17 +431,15 @@ proc fetchStatement*(db: var Database, sql: string): ref Statement =
430
431
db.stmtcache.withValue(rhash, value) do:
431
432
return value[]
432
433
do:
433
- new result
434
- result [] = db.initStatement(sql, {sp_persistent})
434
+ result = db.newStatement(sql, {sp_persistent})
435
435
db.stmtcache[rhash] = result
436
436
437
437
proc fetchStatement*(db: var Database, sql: static [string ]): ref Statement =
438
438
const chash = sql.compileTimeHash
439
439
db.stmtcache.withValue(chash, value) do:
440
440
return value[]
441
441
do:
442
- new result
443
- result [] = db.initStatement(sql, {sp_persistent})
442
+ result = db.newStatement(sql, {sp_persistent})
444
443
db.stmtcache[chash] = result
445
444
446
445
proc getParameterIndex*(st: ref Statement, name: string ): int =
@@ -518,8 +517,21 @@ proc unpack*[T: tuple](st: ref Statement, _: typedesc[T]): T =
518
517
519
518
{.pop.}
520
519
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)
524
526
if st.step():
525
527
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()
0 commit comments