From 34f28236366affb510bfdb70a3577e765d9e0abb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rudolf=20Adamkovi=C4=8D?= Date: Wed, 3 May 2023 14:59:03 +0200 Subject: [PATCH] ob-sqlite: Use a transient in-memory database by default * etc/ORG-NEWS (New features): Add a news entry. * lisp/ob-sqlite.el (org-babel-execute:sqlite): Default ':db' to ":memory:" instead of throwing an error. * testing/lisp/test-ob-sqlite.el (ob-sqlite/in-file): Test the old behavior. * testing/lisp/test-ob-sqlite.el (ob-sqlite/in-memory): Test the new behavior. --- etc/ORG-NEWS | 8 ++++++++ lisp/ob-sqlite.el | 3 +-- testing/lisp/test-ob-sqlite.el | 36 ++++++++++++++++++++++++++++++++-- 3 files changed, 43 insertions(+), 4 deletions(-) diff --git a/etc/ORG-NEWS b/etc/ORG-NEWS index 4f16eda24..3426a5bc0 100644 --- a/etc/ORG-NEWS +++ b/etc/ORG-NEWS @@ -489,6 +489,14 @@ Final hooks are added to the following commands: The prefix arguments are passed to ~org-insert-todo-heading~. +*** Make ~ob-sqlite~ use in-memory databases by default + +~sqlite~ source blocks with no ~:db~ header argument now make SQLite +use a temporary in-memory database instead of throwing an error, +matching the behavior of the official ~sqlite3~ shell. As a result, +~sqlite~ source blocks are now usable out of the box, that is with no +header arguments. + *** Add support for ~logind~ idle time in ~org-user-idle-seconds~ When Emacs is built with =dbus= support and diff --git a/lisp/ob-sqlite.el b/lisp/ob-sqlite.el index 526b73ebd..7510e5158 100644 --- a/lisp/ob-sqlite.el +++ b/lisp/ob-sqlite.el @@ -74,7 +74,6 @@ This function is called by `org-babel-execute-src-block'." (lambda (arg) (car (assq arg params))) (list :header :echo :bail :column :csv :html :line :list))))) - (unless db (error "ob-sqlite: can't evaluate without a database")) (with-temp-buffer (insert (org-babel-eval @@ -97,7 +96,7 @@ This function is called by `org-babel-execute-src-block'." (member :html others) separator) "" "-csv")) - (cons "db " db))) + (cons "db" (or db "")))) ;; body of the code block (org-babel-expand-body:sqlite body params))) (org-babel-result-cond result-params diff --git a/testing/lisp/test-ob-sqlite.el b/testing/lisp/test-ob-sqlite.el index 72d75c9b7..621a11b0b 100644 --- a/testing/lisp/test-ob-sqlite.el +++ b/testing/lisp/test-ob-sqlite.el @@ -39,8 +39,40 @@ .import $tb TestTable select * from TestTable; #+end_src" - (org-babel-next-src-block) - (org-babel-execute-src-block))))) + (org-babel-next-src-block) + (org-babel-execute-src-block))))) + +(ert-deftest ob-sqlite/in-memory () + "Test in-memory temporariness." + (should + (equal 0 + (progn + (org-test-with-temp-text + "#+BEGIN_SRC sqlite +PRAGMA user_version = 1; +#+END_SRC" + (org-babel-execute-src-block)) + (org-test-with-temp-text + "#+BEGIN_SRC sqlite +PRAGMA user_version; +#+END_SRC" + (org-babel-execute-src-block)))))) + +(ert-deftest ob-sqlite/in-file () + "Test in-file permanency." + (should + (equal 1 + (let ((file (org-babel-temp-file "test" ".sqlite"))) + (org-test-with-temp-text + (format "#+BEGIN_SRC sqlite :db %s +PRAGMA user_version = 1; +#+END_SRC" file) + (org-babel-execute-src-block)) + (org-test-with-temp-text + (format "#+BEGIN_SRC sqlite :db %s +PRAGMA user_version; +#+END_SRC" file) + (org-babel-execute-src-block)))))) (provide 'test-ob-sqlite) ;;; test-ob-sqlite.el ends here -- 2.37.1 (Apple Git-137.1)