diff --git a/CHANGELOG.md b/CHANGELOG.md index 2d462a4..2bf3776 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ ### Breaking ### Added - [#2138](https://github.com/org-roam/org-roam/pull/2138) export: add new module +- [#2158](https://github.com/org-roam/org-roam/pull/2158) db: support emacsql-sqlite-builtin and emacsql-sqlite-module ### Removed ### Fixed diff --git a/org-roam-db.el b/org-roam-db.el index b70a107..d1622a5 100644 --- a/org-roam-db.el +++ b/org-roam-db.el @@ -36,23 +36,35 @@ ;;; Options (defcustom org-roam-database-connector 'sqlite "The database connector used by Org-roam. -This must be set before `org-roam' is loaded. To use an -alternative connector you must install the respective package -explicitly. When `sqlite', then use the `emacsql-sqlite' library +This must be set before `org-roam' is loaded. To use an alternative +connector you must install the respective package explicitly. +The default is `sqlite', which uses the `emacsql-sqlite' library that is being maintained in the same repository as `emacsql' -itself. When `libsqlite3', then use the `emacsql-libsqlite3' -library, which itself uses a module provided by the `sqlite3' -package. This is still experimental. When `sqlite3', then use the -`emacsql-sqlite3' library, which uses the official `sqlite3' cli -tool, which is not recommended because it is not suitable to be -used like this, but has the advantage that you likely don't need -a compiler. See https://nullprogram.com/blog/2014/02/06/." - :package-version '(org-roam . "2.2.0") - :group 'org-roam +itself. +If you are using Emacs 29, then the recommended connector is +`sqlite-builtin', which uses the new builtin support for SQLite. +You need to install the `emacsql-sqlite-builtin' package to use +this connector. +If you are using an older Emacs release, then the recommended +connector is `sqlite-module', which uses the module provided by +the `sqlite3' package. This is very similar to the previous +connector and the built-in support in Emacs 29 derives from this +module. You need to install the `emacsql-sqlite-module' package +to use this connector. +For the time being `libsqlite3' is still supported. Do not use +this, it is an older version of the `sqlite-module' connector +from before the connector and the package were renamed. +For the time being `sqlite3' is also supported. Do not use this. +This uses the third-party `emacsql-sqlite3' package, which uses +the official `sqlite3' cli tool, which is not intended +to be used like this. See https://nullprogram.com/blog/2014/02/06/." + :package-version '(forge . "0.3.0") + :group 'forge :type '(choice (const sqlite) - (const libsqlite3) - (const sqlite3) - (symbol :tag "other"))) + (const sqlite-builtin) + (const sqlite-module) + (const :tag "libsqlite3 (OBSOLETE)" libsqlite3) + (const :tag "sqlite3 (BROKEN)" sqlite3))) (defcustom org-roam-db-location (locate-user-emacs-file "org-roam.db") "The path to file where the Org-roam database is stored. @@ -137,8 +149,10 @@ ROAM_REFS." org-roam-db--connection)) (declare-function emacsql-sqlite "ext:emacsql-sqlite") -(declare-function emacsql-libsqlite3 "ext:emacsql-libsqlite3") (declare-function emacsql-sqlite3 "ext:emacsql-sqlite3") +(declare-function emacsql-libsqlite3 "ext:emacsql-libsqlite3") +(declare-function emacsql-sqlite-builtin "ext:emacsql-sqlite-builtin") +(declare-function emacsql-sqlite-module "ext:emacsql-sqlite-module") (defun org-roam-db--conn-fn () "Return the function for creating the database connection." @@ -147,6 +161,14 @@ ROAM_REFS." (progn (require 'emacsql-sqlite) #'emacsql-sqlite)) + (sqlite-builtin + (progn + (require 'emacs-sqlite-builtin) + #'emacsql-sqlite-builtin)) + (sqlite-module + (progn + (require 'emacs-sqlite-module) + #'emacsql-sqlite-module)) (libsqlite3 (progn (require 'emacsql-libsqlite3)