Skip to content

Commit ea99239

Browse files
committed
fix transaction implemention
1 parent 078d41b commit ea99239

File tree

2 files changed

+10
-46
lines changed

2 files changed

+10
-46
lines changed

src/easy_sqlite3/macros.nim

Lines changed: 7 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -209,57 +209,19 @@ proc db_begin() {.importdb: "BEGIN".}
209209
proc db_commit() {.importdb: "COMMIT".}
210210
proc db_rollback() {.importdb: "ROLLBACK".}
211211

212-
# type Transaction* = object
213-
# origin: ptr Database
214-
215-
# proc `=destroy`*(tran: var Transaction) =
216-
# if tran.origin != nil:
217-
# tran.origin[].db_rollback()
218-
219-
# proc `=copy`*(tran: var Transaction, rhs: Transaction) {.error: "You should not copy transaction".}
220-
221-
# proc initTransaction*(db: var Database): Transaction =
222-
# db.db_begin()
223-
# result.origin = addr db
224-
225-
# proc commit*(tran: var Transaction) =
226-
# if tran.origin != nil:
227-
# tran.origin[].db_commit()
228-
# wasMoved(tran)
229-
230-
# proc rollback*(tran: var Transaction) =
231-
# if tran.origin != nil:
232-
# tran.origin[].db_rollback()
233-
# wasMoved(tran)
234-
235212
template transaction*(db: var Database, body: untyped): untyped =
236213
db_begin db
237214
block outer:
238-
var cached_exception: ref Exception
215+
template commit() {.inject, used.} =
216+
db_commit db
217+
break outer
218+
template rollback() {.inject, used.} =
219+
db_rollback db
220+
break outer
239221
block inner:
240222
try:
241-
template commit() {.inject, used.} =
242-
try:
243-
db_commit db
244-
break outer
245-
except:
246-
cached_exception = getCurrentException()
247-
break inner
248-
template rollback() {.inject, used.} =
249-
try:
250-
db_rollback db
251-
break outer
252-
except:
253-
cached_exception = getCurrentException()
254-
break inner
255223
body
256-
try:
257-
commit()
258-
except:
259-
cached_exception = getCurrentException()
260-
break inner
224+
commit()
261225
except:
262226
db_rollback db
263227
raise getCurrentException()
264-
if cached_exception != nil:
265-
raise cached_exception

tests/test_thread.nim

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import std/[tables, random, os, times, strformat]
33
import easy_sqlite3
44
import easy_sqlite3/memfs
55

6-
const useMemFs = true
6+
const useMemFs = not defined(defaultMemoryDB)
77

88
when useMemFs:
99
template retry(body: untyped) = body
@@ -58,6 +58,8 @@ proc worker_fn() {.thread.} =
5858
if val < 1024:
5959
sleep(1)
6060
tdb.insert_data(val)
61+
retry:
62+
commit()
6163

6264
var worker: Thread[void]
6365
createThread(worker, worker_fn)

0 commit comments

Comments
 (0)