db, db.sqlite: If we are in a transaction, don't start another transaction. Add a unit test. Fixes #631. Fixes #623.

db4
Doug Coleman 2013-03-29 17:29:25 -07:00
parent a1ef43a42f
commit 5759f72745
2 changed files with 18 additions and 4 deletions

View File

@ -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

View File

@ -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