db, db.sqlite: If we are in a transaction, don't start another transaction. Add a unit test. Fixes #631. Fixes #623.
parent
a1ef43a42f
commit
5759f72745
|
@ -146,7 +146,11 @@ M: db-connection rollback-transaction ( -- ) "ROLLBACK" sql-command ;
|
|||
: in-transaction? ( -- ? ) in-transaction get ;
|
||||
|
||||
: with-transaction ( quot -- )
|
||||
t in-transaction [
|
||||
begin-transaction
|
||||
[ ] [ rollback-transaction ] cleanup commit-transaction
|
||||
] with-variable ; inline
|
||||
in-transaction? [
|
||||
call
|
||||
] [
|
||||
t in-transaction [
|
||||
begin-transaction
|
||||
[ ] [ rollback-transaction ] cleanup commit-transaction
|
||||
] with-variable
|
||||
] if ; inline
|
||||
|
|
|
@ -162,3 +162,13 @@ watch "WATCH" {
|
|||
user>> f user boa select-tuple
|
||||
] with-db
|
||||
] unit-test
|
||||
|
||||
{ } [
|
||||
test.db [ [
|
||||
user ensure-table [
|
||||
"mew" "foo" user boa insert-tuple
|
||||
"denny" "kitty" user boa insert-tuple
|
||||
] with-transaction
|
||||
] with-transaction
|
||||
] with-db
|
||||
] unit-test
|
||||
|
|
Loading…
Reference in New Issue