From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: "J.P." Newsgroups: gmane.emacs.bugs Subject: bug#67142: 29.1; with-sqlite-transaction commits on exception rather than rolling back Date: Sun, 03 Mar 2024 06:04:48 -0800 Message-ID: <87wmqjtnr3.fsf@neverwas.me> References: <83pm09pz2n.fsf@gnu.org> <831qcoq0py.fsf@gnu.org> <87a5rc4vwy.fsf@gmail.com> <83leavmjnu.fsf@gnu.org> Mime-Version: 1.0 Content-Type: text/plain Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="1450"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Gnus/5.13 (Gnus v5.13) Cc: Eli Zaretskii , visuweshm@gmail.com, 67142@debbugs.gnu.org To: Vasilij Schneidermann Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Sun Mar 03 15:05:57 2024 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1rgmTT-00009J-Tj for geb-bug-gnu-emacs@m.gmane-mx.org; Sun, 03 Mar 2024 15:05:56 +0100 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rgmT9-00006N-J1; Sun, 03 Mar 2024 09:05:35 -0500 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rgmT8-00005x-0N for bug-gnu-emacs@gnu.org; Sun, 03 Mar 2024 09:05:34 -0500 Original-Received: from debbugs.gnu.org ([2001:470:142:5::43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1rgmT7-0003E3-O9 for bug-gnu-emacs@gnu.org; Sun, 03 Mar 2024 09:05:33 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1rgmTa-0001TM-Co for bug-gnu-emacs@gnu.org; Sun, 03 Mar 2024 09:06:02 -0500 X-Loop: help-debbugs@gnu.org Resent-From: "J.P." Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sun, 03 Mar 2024 14:06:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 67142 X-GNU-PR-Package: emacs Original-Received: via spool by 67142-submit@debbugs.gnu.org id=B67142.17094747275609 (code B ref 67142); Sun, 03 Mar 2024 14:06:02 +0000 Original-Received: (at 67142) by debbugs.gnu.org; 3 Mar 2024 14:05:27 +0000 Original-Received: from localhost ([127.0.0.1]:39904 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1rgmT0-0001SP-Li for submit@debbugs.gnu.org; Sun, 03 Mar 2024 09:05:26 -0500 Original-Received: from mail-108-mta204.mxroute.com ([136.175.108.204]:36317) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1rgmSx-0001SC-Ts for 67142@debbugs.gnu.org; Sun, 03 Mar 2024 09:05:25 -0500 Original-Received: from filter006.mxroute.com ([136.175.111.2] filter006.mxroute.com) (Authenticated sender: mN4UYu2MZsgR) by mail-108-mta204.mxroute.com (ZoneMTA) with ESMTPSA id 18e04a1be470003bea.001 for <67142@debbugs.gnu.org> (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384); Sun, 03 Mar 2024 14:04:52 +0000 X-Zone-Loop: 6f1c5b7fb94913e9ac9d75f27cb41dec63d9da7eb8fa X-Originating-IP: [136.175.111.2] DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=neverwas.me ; s=x; h=Content-Type:MIME-Version:Message-ID:Date:References:In-Reply-To: Subject:Cc:To:From:Sender:Reply-To:Content-Transfer-Encoding:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=kuTbdzEIjvjA6NpwoDB/+GJdweoL3ukyDgq8DO++nNE=; b=Vum4R7Ys57KGCHMDiYsap6tV+A 2eKweP7VkBQuENxz9R4nzWd8/b25AhzQgZI3wnwJw1aBQebt9qVgZH95MTs5/LPxj3GC93N4Avc4R svGukks0CHPFXwCyeeMAjuFmzzHs6oTxZ8bh2uQH0DkHsub0gUqou8zESqglrGCDpJXT4Yhy7TAwG sPO15TZuxd9J2om8ItbWQtOgR2sYD98Cl/e+HNDJfxQV7IjbrQDzaPjpUqn07DjtRcQ6QKnj1z5vU FhPup/KRSBi6XULpPHyxlZpeErcx/sQIjv3onWeE58e9V9UREcJxvaGOx2SRQSHxMSJaskkkl/pN5 alEcbfGw==; In-Reply-To: (Vasilij Schneidermann's message of "Mon, 20 Nov 2023 22:14:00 +0100") X-Authenticated-Id: masked@neverwas.me X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.bugs:280935 Archived-At: Vasilij Schneidermann writes: >> OK, how about the below? >> >> diff --git a/lisp/sqlite.el b/lisp/sqlite.el >> index aad0aa4..8a52573 100644 >> --- a/lisp/sqlite.el >> +++ b/lisp/sqlite.el >> @@ -24,19 +24,28 @@ >> ;;; Code: >> >> (defmacro with-sqlite-transaction (db &rest body) >> - "Execute BODY while holding a transaction for DB." >> + "Execute BODY while holding a transaction for DB. >> +If BODY completes normally, commit the changes and return >> +the value of BODY. >> +If BODY signals an error, or transaction commit fails, roll >> +back the transaction changes." >> (declare (indent 1) (debug (form body))) >> (let ((db-var (gensym)) >> - (func-var (gensym))) >> + (func-var (gensym)) >> + (res-var (gensym)) >> + (commit-var (gensym))) >> `(let ((,db-var ,db) >> - (,func-var (lambda () ,@body))) >> + (,func-var (lambda () ,@body)) >> + ,res-var ,commit-var) >> (if (sqlite-available-p) >> (unwind-protect >> (progn >> (sqlite-transaction ,db-var) >> - (funcall ,func-var)) >> - (sqlite-commit ,db-var)) >> - (funcall ,func-var))))) >> + (setq ,res-var (funcall ,func-var)) >> + (setq ,commit-var (sqlite-commit ,db-var)) >> + ,res-var) >> + (or ,commit-var (sqlite-rollback ,db-var)))) >> + (funcall ,func-var)))) >> >> (provide 'sqlite) > > Thank you, this looks very good. I've tested it on my own code using the > SQLite support and there don't appear to be any (obvious issues). Not obvious on account of the indentation, but it seems the second (funcall ,func-var) snuck outside the `if' form with that fix, making body run twice if you have SQLite.