[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH] ob-sqlite: Use a transient in-memory database by default
From: |
Rudolf Adamkovič |
Subject: |
[PATCH] ob-sqlite: Use a transient in-memory database by default |
Date: |
Wed, 3 May 2023 14:59:03 +0200 |
* etc/ORG-NEWS (New features): Add a news entry.
* lisp/ob-sqlite.el (org-babel-execute:sqlite): Default ':db' to ":memory:".
* 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 | 6 ++++++
lisp/ob-sqlite.el | 3 +--
testing/lisp/test-ob-sqlite.el | 36 ++++++++++++++++++++++++++++++++--
3 files changed, 41 insertions(+), 4 deletions(-)
diff --git a/etc/ORG-NEWS b/etc/ORG-NEWS
index 03894f128..42bfc2be0 100644
--- a/etc/ORG-NEWS
+++ b/etc/ORG-NEWS
@@ -181,6 +181,12 @@ official
[[https://clojure.org/guides/deps_and_cli][Clojure CLI tools]].
The command can be customized with ~ob-clojure-cli-command~.
** New features
+*** Make =ob-sqlite= use in-database by default
+
+SQLite source blocks with no =:db= argument now execute against a
+transient in-memory database. This makes SQLite source blocks more
+practical, and it matches the default behavior of the =sqlite3= shell.
+
*** 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..60da488f7 100644
--- a/lisp/ob-sqlite.el
+++ b/lisp/ob-sqlite.el
@@ -66,7 +66,7 @@
"Execute a block of Sqlite code with Babel.
This function is called by `org-babel-execute-src-block'."
(let ((result-params (split-string (or (cdr (assq :results params)) "")))
- (db (cdr (assq :db params)))
+ (db (or (cdr (assq :db params)) ":memory:"))
(separator (cdr (assq :separator params)))
(nullvalue (cdr (assq :nullvalue params)))
(headers-p (equal "yes" (cdr (assq :colnames params))))
@@ -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
diff --git a/testing/lisp/test-ob-sqlite.el b/testing/lisp/test-ob-sqlite.el
index 72d75c9b7..b76a82d98 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.40.1
- [PATCH] ob-sqlite: Use a transient in-memory database by default,
Rudolf Adamkovič <=