From 064e2f358705080563d4faf20cd0a724c8c85bac Mon Sep 17 00:00:00 2001 From: Kevin Rosenberg Date: Fri, 4 Sep 2009 12:22:52 -0600 Subject: [PATCH] Improved handlining of nested transactions --- ChangeLog | 2 ++ sql/transaction.lisp | 16 ++++++++-------- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/ChangeLog b/ChangeLog index a8cf358..2164c6b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -10,6 +10,8 @@ (thanks to Stephen Compall) * sql/database.lisp: Have database-type default be *default-database-type* (thanks to Desmond O. Chang) + * sql/transactions.lisp: Improved handlining of nested + transactions (thanks to Eli Naeher) 31 Aug 2009 Kevin Rosenberg * sql/db-interface.lisp: Fix spelling error (thanks to diff --git a/sql/transaction.lisp b/sql/transaction.lisp index 1c6e98b..a9d94c9 100644 --- a/sql/transaction.lisp +++ b/sql/transaction.lisp @@ -1,8 +1,6 @@ ;;;; -*- Mode: LISP; Syntax: ANSI-Common-Lisp; Base: 10 -*- ;;;; ************************************************************************* ;;;; -;;;; $Id$ -;;;; ;;;; Transaction support ;;;; ;;;; This file is part of CLSQL. @@ -60,12 +58,14 @@ is called on DATABASE which defaults to *DEFAULT-DATABASE*." (defmethod database-commit-transaction ((database database)) (with-slots (transaction transaction-level autocommit) database (if (plusp transaction-level) - (when (zerop (decf transaction-level)) - (case (database-underlying-type database) - (:mssql (execute-command "COMMIT TRANSACTION" :database database)) - (t (execute-command "COMMIT" :database database))) - (setf autocommit (previous-autocommit transaction)) - (map nil #'funcall (commit-hooks transaction))) + (if (zerop (decf transaction-level)) + (progn + (case (database-underlying-type database) + (:mssql (execute-command "COMMIT TRANSACTION" :database database)) + (t (execute-command "COMMIT" :database database))) + (setf autocommit (previous-autocommit transaction)) + (map nil #'funcall (commit-hooks transaction))) + (setf (transaction-status (transaction database)) nil)) (warn 'sql-warning :message (format nil "Cannot commit transaction against ~A because there is no transaction in progress." -- 2.11.4.GIT