"sqlite suport is not available" with Emacs 29 on Windows

Emacs 29 does have builtin-sqlite support. But maybe I misunderstand that?

I tried to run Emacs 29 (from here) Windows 10. But I got the error “sqlite support is not available”.

I didn’t install anything sqlite relevant componten in that Windows because I assume Emacs 29 now can handle that by itself because sqlite is inbuild now.

This is my minimal config I loaded via “-q -l”.

;; === Package setup ===
(require 'package)

(setq package-archives '(("melpa" . "https://melpa.org/packages/")
             ;("org" . "https://orgmode.org/elpa/")
             ("elpa" . "https://elpa.gnu.org/packages/")))
;; Initializes the package infrastructure
(package-initialize)

;; === use-package ==
;; use-package to simplify the config file
(unless (package-installed-p 'use-package)
  (package-refresh-contents)
  (package-install 'use-package))

(require 'use-package)
(setq use-package-always-ensure 't)

;; === EVIL
(use-package evil
  :init
  (setq evil-want-integration t)
  (setq evil-want-keybinding nil)
  (setq evil-want-C-i-jump nil)
  :config
  (evil-mode 1)
  ;; Use visual line motions even outside of visual-line-mode buffers
  (evil-global-set-key 'motion "j" 'evil-next-visual-line)
  (evil-global-set-key 'motion "k" 'evil-previous-visual-line)
  ;; Set "normal" vi-mode in specific buffers
  (evil-set-initial-state 'messages-buffer-mode 'normal)
  (evil-set-initial-state 'dashboard-mode 'normal)
  )

(use-package evil-collection
  :after evil
  :config
  (evil-collection-init)
  )

;; =============
;; === ORG mode
;; =============

(use-package emacsql-sqlite-builtin)
(use-package org-roam
  :init  ; is called before the package is loaded
  (setq org-roam-v2-ack t)  ; do not show migration warning after startup
  :custom
  (org-roam-directory "my.org-roam")
  :bind (("C-c n l" . org-roam-buffer-toggle)
     ("C-c n f" . org-roam-node-find)
     ("C-c n i" . org-roam-node-insert)
     :map org-mode-map
     ("C-M-i" . completion-at-point)
     )
  ;; :config
  ;; (org-roam-db-autosync-mode)
  )

SQLite3 support is a compilation option, so these binaries may not have it in. Have a look at variable system-configuration-features; if SQLITE3 does not appear, your Emacs binary does not have it.

I believe you could ask Eli (one of the maintainers) to do so via emacs development mailing list.

1 Like

The value of “system-configuration-features” is

“ACL GIF GMP GNUTLS HARFBUZZ JPEG JSON LCMS2 LIBXML2 MODULES NATIVE_COMP NOTIFY W32NOTIFY PDUMPER PNG RSVG SOUND SQLITE3 THREADS TIFF TOOLKIT_SCROLL_BARS WEBP XPM ZLIB”

Seems OK, or not?
What could it be then?

Then I would say you needed to install the package as described in the document string.

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.

sqlite-builtin is the deault connector on Emacs29. No need for anything. That is why I do test it with Emacs 29. :wink:

I assume the sqlite library is not installed on windows. But I don’t know where to copy the dlls into. Because sqlite doesn’t come with an installer.

Is an elisp package that is available on ELPA or MELPA (please check) — I think it’s part of emacsql on MELPA. No need for dll i believe

The only difference is you don’t need to compile a C file (a sqlite file) . You still need the Elisp package that utilizes built-in sqlite for Org-roam. I don’t know my description of English language is precise, but that’s what the documentation says and what I do for Linux, which works.

I still do (use-package emacsql-sqlite-builtin). Please see my init file in my initial post.

Then I have run out of ideas. I will try version 29 on Windows when I get back to my computer.

If the built-in function sqlite-mode-open-file does not let you inspect ~/.emacs.d/org-roam.db, then the built-in SQLite may not be working properly, and you might like to report it to emacs development mailing list.

Tried emacs-29.0.60-installer.exe (2023-02-19 12:55 75M) from the site you referred to above.

Function sqlite-available-p returns nil, so no built-in sqlite support is available in this binary.

1 Like

Hi there!

I create and publish the Windows binary installers/zips of Emacs currently.

I agree that there’s no sqlite DLL provided with the current Emacs 29 pre-release snapshot. I do plan to try updating the packaging environment and process to build that along with the rest of the DLLs that end up in emacs-*-deps.zip (meaning it also would be included in the full zip and self-installer).

To do this requires some updates in the build environment. I plan to hold off on that until after the Emacs 28.3 is released (currently Emacs 28.3 rc1 is available for testing).

Beside the change of screwing up during the updates and uncovering bugs related to new depenancy versions, updating the build environment before I build the 28.3 release would mean 28.3 would have different deps vs the other release in the Emacs 28 series.

Once 28.3 Windows binaries are published, I’ll update MSYS etc, get sqlite installed on the build env, and have a go at making a new set of snapshot binaries from the emacs-29 branch. I’ll try to remember to follow up here but welcome to ping me via private email Email or CC in messages to emacs-devel or the org mode mailing lists. (I do look at the lists but am way more likely to see messages where I’m CCd.)

Finally, until I have tried building with sqlite support myself I won’t be entirely sure, but… It’s very likely that you can copy a sqlite DLL from (e.g.) the MSYS32/MINGW64 sqlite package but (based on some mailing list comments from Eli), you may have to rename the DLL as well as copying it to the bin folder under your Emacs instalation/unpack location. If you have success trying that I’d love to hear about it.

corwin (at) bru (dot) st

2 Likes

Dear corwin,
thanks a lot for your work here.

Is there a ticket/issue we can subscribe to and monitor your process?

Kind
Christian

1 Like

It’s my pleasure! Glad to contribute after being a user for many, many years!

There’s not, so far. If you want to open a bug report (e.g. with M-x report-emacs-bug) feel free to copy me and/or reference this conversation.

@buhtz

I just tried this newly compiled installer. sqlite-available-p returns t. On my end, the sqlite-builtin org-roam-database-connector works :slight_smile:
emacs-29.0.60_1-installer.exe 2023-03-10 13:25 69M

@corwin , thank you – it will be a big help for Emacs users on Windows for Org-roam.

1 Like

I can confirm that org-roam now works out of the box.
Great!

2 Likes

That’s great news! Thanks for confirming!

1 Like

Dear Corwin,
can you please give me a hint which switches I do need for sqlite3 support building Emacs29 from git repo (via make)? I can build Emacs29 but sqlite isn’t in it.

Responded to another thread. If your question is for Windows, then corwin might be able to assist; my experience is Ubuntu.

I recently posted my build command for making snapshots from the emacs-29 branch, here: https://corwin.bru.st/2023-03-21-my-build-command-for-emacs-29-snapshots/

The command is right at the top of this too-long post, but the TL;DR is:

Once you have sqlite3 installed via pacman then there should not be any special flags you need to pass to enable building with sqlite support under Windows (MINGW64).