]> git.eshelyaron.com Git - emacs.git/commitdiff
Make with-sqlite-transaction mode code efficient
authorLars Ingebrigtsen <larsi@gnus.org>
Sun, 12 Dec 2021 06:22:44 +0000 (07:22 +0100)
committerLars Ingebrigtsen <larsi@gnus.org>
Sun, 12 Dec 2021 06:22:49 +0000 (07:22 +0100)
* lisp/sqlite.el (with-sqlite-transaction): Rewrite to only
include BODY once.

lisp/sqlite.el

index dccdda16ac09be13d09a5c026babce0a17d02489..6d32a0468f3dc3cb416e8a3e227c36ad6738aee8 100644 (file)
 (defmacro with-sqlite-transaction (db &rest body)
   "Execute BODY while holding a transaction for DB."
   (declare (indent 1) (debug (form body)))
-  (let ((db-var (gensym)))
-    `(let ((,db-var ,db))
+  (let ((db-var (gensym))
+        (func-var (gensym)))
+    `(let ((,db-var ,db)
+           (,func-var (lambda () ,@body)))
        (if (sqlite-available-p)
            (unwind-protect
                (progn
                  (sqlite-transaction ,db-var)
-                 ,@body)
+                 (funcall ,func-var))
              (sqlite-commit ,db-var))
-         (progn
-           ,@body)))))
+         (funcall ,func-var)))))
 
 (provide 'sqlite)