From 5759f72745293940124f1176eedea128ddb83665 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Fri, 29 Mar 2013 17:29:25 -0700 Subject: [PATCH] db, db.sqlite: If we are in a transaction, don't start another transaction. Add a unit test. Fixes #631. Fixes #623. --- basis/db/db.factor | 12 ++++++++---- basis/db/sqlite/sqlite-tests.factor | 10 ++++++++++ 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/basis/db/db.factor b/basis/db/db.factor index 3c924e4698..f5d73b917b 100644 --- a/basis/db/db.factor +++ b/basis/db/db.factor @@ -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 diff --git a/basis/db/sqlite/sqlite-tests.factor b/basis/db/sqlite/sqlite-tests.factor index e5680a1d0a..b389847fc9 100644 --- a/basis/db/sqlite/sqlite-tests.factor +++ b/basis/db/sqlite/sqlite-tests.factor @@ -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