GNU bug report logs - #65274
29.0.91; [feature request] Readonly argument for emacs built-in sqlite support.

Previous Next

Package: emacs;

Reported by: Nicolas Graves <ngraves <at> ngraves.fr>

Date: Sun, 13 Aug 2023 20:36:02 UTC

Severity: wishlist

Tags: patch

Found in version 29.0.91

Done: Eli Zaretskii <eliz <at> gnu.org>

Bug is archived. No further changes may be made.

To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 65274 in the body.
You can then email your comments to 65274 AT debbugs.gnu.org in the normal way.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to bug-gnu-emacs <at> gnu.org:
bug#65274; Package emacs. (Sun, 13 Aug 2023 20:36:02 GMT) Full text and rfc822 format available.

Acknowledgement sent to Nicolas Graves <ngraves <at> ngraves.fr>:
New bug report received and forwarded. Copy sent to bug-gnu-emacs <at> gnu.org. (Sun, 13 Aug 2023 20:36:02 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Nicolas Graves <ngraves <at> ngraves.fr>
To: bug-gnu-emacs <at> gnu.org
Subject: 29.0.91; [feature request] Readonly argument for emacs built-in
 sqlite support.
Date: Sun, 13 Aug 2023 22:35:17 +0200
From: Nicolas Graves <ngraves <at> ngraves.fr>
To: bug-gnu-emacs <at> gnu.org
Subject: 29.0.91; [feature request] Readonly argument for emacs built-in
 sqlite support.
Date: Wed, 19 Jul 2023 10:41:53 +0200
(email originally sent on the 19th of July, somehow wasnt recognized
properly by the bug tracker).

The sqlite3 cli tool has an option -readonly, which doesn't seem to be
available in Emacs for now. This means that if someone wants to inspect
a locked database, we would necessarily need to make a copy, while the
-readonly flag would be enough using a shell-command.

In GNU Emacs 29.0.91 (build 1, x86_64-pc-linux-gnu, GTK+ Version
3.24.37, cairo version 1.16.0)
System Description: Guix System

Configured using:
 'configure
 CONFIG_SHELL=/gnu/store/rib9g2ig1xf3kclyl076w28parmncg4k-bash-minimal-5.1.16/bin/bash
 SHELL=/gnu/store/rib9g2ig1xf3kclyl076w28parmncg4k-bash-minimal-5.1.16/bin/bash
 --prefix=/gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91
 --enable-fast-install --with-pgtk --with-modules --with-cairo
 --with-native-compilation --disable-build-details'

Configured features:
ACL CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GPM GSETTINGS HARFBUZZ JPEG
JSON LCMS2 LIBOTF LIBSELINUX LIBSYSTEMD LIBXML2 MODULES NATIVE_COMP
NOTIFY INOTIFY PDUMPER PGTK PNG RSVG SECCOMP SOUND SQLITE3 THREADS TIFF
TOOLKIT_SCROLL_BARS TREE_SITTER XIM GTK3 ZLIB

Important settings:
  value of $EMACSLOADPATH: /home/graves/.guix-home/profile/share/emacs/site-lisp:/gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp:/gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp
  value of $EMACSNATIVELOADPATH: /home/graves/.guix-home/profile/lib/emacs/native-site-lisp
  value of $LANG: fr_FR.utf8
  locale-coding-system: utf-8-unix

Major mode: Lisp Interaction

Minor modes in effect:
  info-manual+node-buffer-name-mode: t
  Info-persist-history-mode: t
  show-smartparens-global-mode: t
  show-smartparens-mode: t
  citar-embark-mode: t
  global-evil-surround-mode: t
  evil-surround-mode: t
  evil-commentary-mode: t
  global-evil-collection-unimpaired-mode: t
  evil-collection-unimpaired-mode: t
  shell-dirtrack-mode: t
  evil-mode: t
  evil-local-mode: t
  windmove-mode: t
  global-tempel-abbrev-mode: t
  tempel-abbrev-mode: t
  rde-org-agenda-appt-mode: t
  global-org-modern-mode: t
  all-the-icons-completion-mode: t
  global-guix-prettify-mode: t
  guix-prettify-mode: t
  which-key-mode: t
  persp-mode: t
  vertico-multiform-mode: t
  vertico-mode: t
  corfu-doc-mode: t
  global-corfu-mode: t
  corfu-mode: t
  marginalia-mode: t
  minions-mode: t
  global-auto-revert-mode: t
  subword-mode: t
  save-place-mode: t
  savehist-mode: t
  recentf-mode: t
  server-mode: t
  cl-old-struct-compat-mode: 1
  tooltip-mode: t
  global-eldoc-mode: t
  eldoc-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  window-divider-mode: t
  column-number-mode: t
  line-number-mode: t
  transient-mark-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t

Load-path shadows:
/gnu/store/j1qf5zl8pysg608l7szwan0qk25925wg-emacs-transient-0.4.1/share/emacs/site-lisp/transient-0.4.1/transient hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/transient
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/ox hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/ox
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/ox-texinfo hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/ox-texinfo
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/ox-publish hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/ox-publish
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/ox-org hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/ox-org
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/ox-odt hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/ox-odt
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/ox-md hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/ox-md
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/ox-man hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/ox-man
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/ox-latex hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/ox-latex
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/ox-koma-letter hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/ox-koma-letter
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/ox-icalendar hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/ox-icalendar
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/ox-html hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/ox-html
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/ox-beamer hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/ox-beamer
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/ox-ascii hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/ox-ascii
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/org hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/org
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/org-version hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/org-version
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/org-timer hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/org-timer
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/org-tempo hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/org-tempo
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/org-table hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/org-table
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/org-src hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/org-src
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/org-refile hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/org-refile
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/org-protocol hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/org-protocol
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/org-plot hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/org-plot
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/org-persist hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/org-persist
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/org-pcomplete hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/org-pcomplete
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/org-num hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/org-num
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/org-mouse hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/org-mouse
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/org-mobile hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/org-mobile
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/org-macs hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/org-macs
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/org-macro hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/org-macro
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/org-loaddefs hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/org-loaddefs
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/org-list hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/org-list
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/org-lint hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/org-lint
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/org-keys hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/org-keys
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/org-inlinetask hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/org-inlinetask
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/org-indent hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/org-indent
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/org-id hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/org-id
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/org-habit hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/org-habit
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/org-goto hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/org-goto
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/org-footnote hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/org-footnote
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/org-fold hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/org-fold
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/org-fold-core hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/org-fold-core
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/org-feed hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/org-feed
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/org-faces hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/org-faces
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/org-entities hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/org-entities
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/org-element hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/org-element
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/org-duration hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/org-duration
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/org-datetree hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/org-datetree
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/org-cycle hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/org-cycle
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/org-ctags hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/org-ctags
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/org-crypt hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/org-crypt
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/org-compat hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/org-compat
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/org-colview hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/org-colview
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/org-clock hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/org-clock
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/org-capture hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/org-capture
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/org-attach hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/org-attach
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/org-attach-git hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/org-attach-git
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/org-archive hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/org-archive
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/org-agenda hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/org-agenda
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/ol hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/ol
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/ol-w3m hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/ol-w3m
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/ol-rmail hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/ol-rmail
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/ol-mhe hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/ol-mhe
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/ol-man hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/ol-man
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/ol-irc hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/ol-irc
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/ol-info hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/ol-info
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/ol-gnus hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/ol-gnus
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/ol-eww hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/ol-eww
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/ol-eshell hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/ol-eshell
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/ol-doi hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/ol-doi
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/ol-docview hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/ol-docview
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/ol-bibtex hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/ol-bibtex
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/ol-bbdb hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/ol-bbdb
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/oc hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/oc
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/oc-natbib hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/oc-natbib
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/oc-csl hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/oc-csl
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/oc-bibtex hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/oc-bibtex
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/oc-biblatex hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/oc-biblatex
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/oc-basic hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/oc-basic
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/ob hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/ob
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/ob-tangle hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/ob-tangle
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/ob-table hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/ob-table
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/ob-sqlite hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/ob-sqlite
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/ob-sql hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/ob-sql
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/ob-shell hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/ob-shell
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/ob-sed hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/ob-sed
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/ob-screen hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/ob-screen
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/ob-scheme hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/ob-scheme
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/ob-sass hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/ob-sass
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/ob-ruby hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/ob-ruby
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/ob-ref hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/ob-ref
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/ob-python hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/ob-python
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/ob-processing hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/ob-processing
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/ob-plantuml hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/ob-plantuml
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/ob-perl hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/ob-perl
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/ob-org hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/ob-org
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/ob-octave hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/ob-octave
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/ob-ocaml hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/ob-ocaml
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/ob-maxima hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/ob-maxima
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/ob-matlab hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/ob-matlab
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/ob-makefile hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/ob-makefile
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/ob-lua hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/ob-lua
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/ob-lob hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/ob-lob
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/ob-lisp hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/ob-lisp
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/ob-lilypond hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/ob-lilypond
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/ob-latex hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/ob-latex
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/ob-julia hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/ob-julia
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/ob-js hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/ob-js
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/ob-java hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/ob-java
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/ob-haskell hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/ob-haskell
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/ob-groovy hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/ob-groovy
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/ob-gnuplot hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/ob-gnuplot
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/ob-fortran hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/ob-fortran
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/ob-forth hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/ob-forth
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/ob-exp hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/ob-exp
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/ob-eval hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/ob-eval
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/ob-eshell hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/ob-eshell
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/ob-emacs-lisp hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/ob-emacs-lisp
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/ob-dot hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/ob-dot
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/ob-ditaa hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/ob-ditaa
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/ob-css hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/ob-css
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/ob-core hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/ob-core
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/ob-comint hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/ob-comint
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/ob-clojure hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/ob-clojure
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/ob-calc hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/ob-calc
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/ob-awk hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/ob-awk
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/ob-R hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/ob-R
/gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/ob-C hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/org/ob-C
/gnu/store/wpbwpy52q2n6khqjplndx33gvln1clii-emacs-soap-client-3.2.3/share/emacs/site-lisp/soap-client-3.2.3/soap-inspect hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/net/soap-inspect
/gnu/store/wpbwpy52q2n6khqjplndx33gvln1clii-emacs-soap-client-3.2.3/share/emacs/site-lisp/soap-client-3.2.3/soap-client hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/net/soap-client
/gnu/store/6677fxb3s4cd0sfznsj3hcxir5qcff48-emacs-seq-2.23/share/emacs/site-lisp/seq-2.23/seq hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/emacs-lisp/seq
/gnu/store/4lnyj5wd55z478rwnixk7p5qgr02yn3z-emacs-let-alist-1.0.6/share/emacs/site-lisp/let-alist-1.0.6/let-alist hides /gnu/store/d33z4qb6na655mwzr10pixjl9a4lwbfc-emacs-next-pgtk-29.0.91/share/emacs/29.0.91/lisp/emacs-lisp/let-alist

Features:
(shadow sort mail-extr cape evil-collection-notmuch ol-notmuch notmuch
notmuch-tree notmuch-jump notmuch-hello notmuch-show notmuch-print
notmuch-crypto notmuch-wash coolj goto-addr icalendar hl-line
notmuch-mua notmuch-message notmuch-draft notmuch-tag
notmuch-maildir-fcc notmuch-address notmuch-company notmuch-parser
notmuch-lib notmuch-compat mm-view mml-smime smime gnutls dig emacsbug
evil-collection-custom cus-edit cus-start cus-load message yank-media
puny rfc822 mml mml-sec evil-collection-epa epa derived epg rfc6068
epg-config gnus-util mm-decode mm-bodies mm-encode mail-parse rfc2231
mailabbrev gmm-utils mailheader sendmail rfc2047 rfc2045 ietf-drums
mm-util mail-prsvr mail-utils magit-base evil-collection-magit-section
magit-section crm jka-compr face-remap pulse color consult-xref
vertico-buffer files-x cl-indent evil-collection-vc-git vc-git
evil-collection-diff-mode diff-mode easy-mmode vc-dispatcher
app-launcher evil-collection-helpful helpful cc-langs cc-vars cc-defs
evil-collection-imenu imenu trace evil-collection-edebug edebug
info-look evil-collection-info info+ info evil-collection-elisp-refs
elisp-refs misearch multi-isearch checkdoc lisp-mnt emacsql-sqlite
emacsql emacsql-compiler cl-print evil-collection-debug debug backtrace
etags fileloop evil-collection-xref xref evil-collection-flymake
flymake-proc flymake whitespace ws-butler smartparens-config
smartparens-rst smartparens-markdown smartparens-org smartparens-text
smartparens-python smartparens sql evil-collection-view view mule-util
ibrowse-history ibrowse-sql ibrowse-core citar-embark citar citar-file
citar-cache citar-format browse-url url url-proxy url-privacy url-expand
url-methods url-history url-cookie generate-lisp-file url-domsuf
url-util mailcap evil-collection-embark evil-collection-consult
embark-consult consult password-store with-editor embark-org embark ffap
auth-source-pass url-parse auth-source eieio eieio-core password-cache
url-vars dired-aux all-the-icons-dired orderless cursor-sensor origami
origami-parsers org-pomodoro alert log4e notifications dbus xml gntp
org-timer org-clock feature-loader rde-notmuch rde-flycheck rde-shell
ob-shell rde-power-menu rde-elisp rde-go ob-go rde-python ob-python
evil-collection-python python project pcase treesit rde-eval-in-repl
rde-citar oc-csl citeproc citeproc-itemgetters citeproc-biblatex
parse-time citeproc-bibtex parsebib ol-bibtex citeproc-cite
citeproc-subbibs citeproc-sort citeproc-name citeproc-formatters
citeproc-number rst citeproc-proc citeproc-disamb citeproc-itemdata
citeproc-generic-elements citeproc-macro citeproc-choose citeproc-date
citeproc-context citeproc-prange citeproc-style citeproc-locale
citeproc-term f citeproc-rt citeproc-lib citeproc-s s let-alist queue
json bibtex iso8601 map rde-org-roam rde-elfeed rde-saving rde-evil
evil-surround evil-commentary evil-commentary-integration
evil-collection-unimpaired evil-collection-which-key
evil-collection-vertico evil-collection-tabulated-list
evil-collection-tab-bar evil-collection-simple evil-collection-replace
evil-collection-process-menu evil-collection-outline evil-collection-org
evil-collection-indent evil-collection-image image-mode
evil-collection-dired dired dired-loaddefs exif evil-collection-help
evil-collection-guix evil-collection-geiser evil-collection-elisp-mode
evil-collection-eldoc evil-collection-corfu evil-collection-compile
evil-collection-comint evil-collection-calendar calc-ext
evil-collection-calc evil-collection-buff-menu evil-collection-bookmark
evil-collection annalist evil evil-integration evil-maps evil-commands
reveal flyspell ispell evil-jumps evil-command-window evil-search
evil-ex shell evil-types evil-macros evil-repeat evil-states evil-core
evil-common windmove calc calc-loaddefs calc-macs rect evil-digraphs
evil-vars edmacro kmacro rde-tempel tempel rde-graphviz ob-dot
graphviz-dot-mode compile rde-org-agenda diary-lib diary-loaddefs
org-agenda org-element org-persist org-id avl-tree generator org-refile
rde-org org-modern rde-git rde-dired-ranger rde-spelling rde-popper
rde-info rde-xref rde-flymake rde-debbugs rde-all-the-icons
all-the-icons-completion all-the-icons all-the-icons-faces data-material
data-weathericons data-octicons data-fileicons data-faicons
data-alltheicons rde-help rde-webpaste rde-comint rde-eglot rde-guix
guix-prettify guix-utils bui-utils dash guix-auto-mode guix rde-geiser
ob-scheme geiser-impl help-fns radix-tree geiser-custom geiser-base
geiser rde-smartparens rde-org-protocol org-protocol org org-macro
org-pcomplete pcomplete org-list org-footnote org-faces org-entities
time-date noutline outline ob-emacs-lisp ob-sql ob ob-tangle org-src
ob-ref ob-lob ob-table ob-exp ob-comint comint ansi-osc ansi-color ring
ob-core ob-eval org-cycle org-table ol org-fold org-fold-core org-keys
oc org-loaddefs find-func cal-menu calendar cal-loaddefs org-compat
org-version org-macs format-spec rde-nov-el rde-pdf-tools
saveplace-pdf-view bookmark text-property-search pp rde-message
rde-monocle rde-eshell rde-dired rde-which-key which-key
rde-input-method cyrillic-dvorak-im quail rde-perspective perspective
advice thingatpt ido rde-compile rde-project rde-tramp rde-vertico
vertico-multiform byte-opt vertico-directory vertico-repeat vertico
rde-corfu corfu-doc corfu rde-completion marginalia rde-modus-themes
modus-operandi-theme modus-themes rde-appearance minions compat
compat-29 rde-emacs autorevert filenotify cap-words superword subword
saveplace savehist recentf tree-widget wid-edit rde-keymaps rde-docker
rde-youtube-dl rde-mpv rde-markdown rde-ledger rde-envrc rde-vterm
rde-fonts xdg fontaine rde-postgresql rde-pass comp comp-cstr warnings
icons subr-x cl-seq cl-macs gv cl-extra help-mode bytecomp byte-compile
server log4e-autoloads gntp-autoloads alert-autoloads
org-pomodoro-autoloads package-lint-autoloads flycheck-package-autoloads
wgrep-autoloads ht-autoloads emojify-autoloads origami-el-autoloads
consult-org-roam-autoloads yaml-autoloads treepy-autoloads
ghub-autoloads closql-autoloads forge-autoloads link-hint-autoloads
mini-frame-autoloads restart-emacs-autoloads consult-dir-autoloads
websocket-autoloads org-roam-ui-autoloads seq-autoloads
let-alist-autoloads biblio-autoloads dirvish-autoloads
git-email-autoloads consult-notmuch-autoloads ol-notmuch-autoloads
notmuch-autoloads flycheck-autoloads rde-power-menu-autoloads
ob-go-autoloads go-mode-autoloads reformatter-autoloads
python-black-autoloads eval-in-repl-geiser-autoloads
eval-in-repl-ielm-autoloads eval-in-repl-python-autoloads
eval-in-repl-shell-autoloads julia-mode-autoloads ace-window-autoloads
paredit-autoloads eval-in-repl-autoloads
org-babel-eval-in-repl-autoloads rde-eval-in-repl-autoloads
string-inflection-autoloads queue-autoloads parsebib-autoloads
citeproc-el-autoloads auctex-autoloads tex-site citar-autoloads
citar-org-roam-autoloads rde-citar-autoloads sqlite3-api-autoloads
pg-autoloads finalize-autoloads emacsql-autoloads
emacsql-sqlite3-autoloads org-roam-autoloads elfeed-org-autoloads
undo-fu-session-autoloads super-save-autoloads undo-fu-autoloads
evil-surround-autoloads evil-commentary-autoloads evil-org-autoloads
annalist-autoloads evil-collection-autoloads evil-autoloads
rde-evil-autoloads tempel-autoloads company-autoloads
graphviz-dot-mode-autoloads rde-graphviz-autoloads
rde-org-agenda-autoloads org-modern-autoloads org-appear-autoloads
org-contrib-autoloads org-autoloads rde-org-autoloads
git-gutter-transient-autoloads fringe-helper-autoloads
git-gutter-autoloads git-gutter-fringe-autoloads
git-timemachine-autoloads git-link-autoloads pcre2el-autoloads
hl-todo-autoloads magit-todos-autoloads transient-autoloads
magit-autoloads rde-git-autoloads dired-ranger-autoloads
popper-autoloads info-plus-autoloads rde-info-autoloads
soap-client-autoloads debbugs-autoloads
all-the-icons-completion-autoloads shut-up-autoloads loop-autoloads
list-utils-autoloads cl-loaddefs cl-lib elisp-refs-autoloads
helpful-autoloads deferred-autoloads request-autoloads
webpaste-autoloads rde-webpaste-autoloads consult-eglot-autoloads
daemons-autoloads magit-popup-autoloads edit-indirect-autoloads
bui-autoloads guix-autoloads gider-autoloads eros-autoloads
geiser-eros-autoloads geiser-guile-autoloads geiser-autoloads
smartparens-autoloads justify-kp-autoloads kv-autoloads esxml-autoloads
nov-el-autoloads saveplace-pdf-view-autoloads pdf-tools-autoloads
rde-pdf-tools-autoloads hide-mode-line-autoloads olivetti-autoloads
rde-monocle-autoloads eshell-prompt-extras-autoloads
eshell-syntax-highlighting-autoloads rde-eshell-autoloads
memoize-autoloads all-the-icons-autoloads all-the-icons-dired-autoloads
dired-rsync-autoloads rde-dired-autoloads which-key-autoloads
perspective-autoloads rde-perspective-autoloads rde-compile-autoloads
rde-project-autoloads rde-tramp-autoloads vertico-autoloads
corfu-doc-autoloads corfu-autoloads cape-autoloads pcmpl-args-autoloads
marginalia-autoloads orderless-autoloads rde-completion-autoloads
modus-themes-autoloads rde-modus-themes-autoloads minions-autoloads
rde-appearance-autoloads app-launcher-autoloads ws-butler-autoloads
expand-region-autoloads rde-keymaps-autoloads rde-emacs-autoloads
rde-mpv-autoloads rde-fonts-autoloads rde-pass-autoloads
feature-loader-autoloads dockerfile-mode-autoloads tablist-autoloads
json-snatcher-autoloads json-mode-autoloads rx js2-mode-autoloads
simple-httpd-autoloads skewer-mode-autoloads elfeed-autoloads
aio-autoloads docker-autoloads mpv-autoloads ytdl-autoloads
markdown-mode-autoloads ledger-mode-autoloads inheritenv-autoloads
envrc-autoloads vterm-autoloads fontaine-autoloads consult-autoloads
avy-autoloads embark-autoloads password-store-otp-autoloads
dash-autoloads f-autoloads compat-autoloads async-autoloads
with-editor-autoloads s-autoloads password-store-autoloads
pass-autoloads ess-autoloads guix-emacs rmc iso-transl tooltip cconv
eldoc paren electric uniquify ediff-hook vc-hooks lisp-float-type
elisp-mode mwheel term/pgtk-win pgtk-win term/common-win pgtk-dnd
tool-bar dnd fontset image regexp-opt fringe tabulated-list replace
newcomment text-mode lisp-mode prog-mode register page tab-bar menu-bar
rfn-eshadow isearch easymenu timer select scroll-bar mouse jit-lock
font-lock syntax font-core term/tty-colors frame minibuffer nadvice seq
simple cl-generic indonesian philippine cham georgian utf-8-lang
misc-lang vietnamese tibetan thai tai-viet lao korean japanese eucjp-ms
cp51932 hebrew greek romanian slovak czech european ethiopic indian
cyrillic chinese composite emoji-zwj charscript charprop case-table
epa-hook jka-cmpr-hook help abbrev obarray oclosure cl-preloaded button
loaddefs theme-loaddefs faces cus-face macroexp files window
text-properties overlay sha1 md5 base64 format env code-pages mule
custom widget keymap hashtable-print-readable backquote threads dbusbind
inotify dynamic-setting system-font-setting font-render-setting cairo
gtk pgtk lcms2 multi-tty make-network-process native-compile emacs)

Memory information:
((conses 16 967322 56502)
 (symbols 48 43452 3)
 (strings 32 288664 25645)
 (string-bytes 1 8423299)
 (vectors 16 85934)
 (vector-slots 8 1954741 24398)
 (floats 8 984 189)
 (intervals 56 81337 0)
 (buffers 984 30))

--
Best regards,
Nicolas Graves




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#65274; Package emacs. (Mon, 14 Aug 2023 16:41:01 GMT) Full text and rfc822 format available.

Message #8 received at 65274 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Nicolas Graves <ngraves <at> ngraves.fr>
Cc: 65274 <at> debbugs.gnu.org
Subject: Re: bug#65274: 29.0.91;
 [feature request] Readonly argument for emacs built-in sqlite support.
Date: Mon, 14 Aug 2023 19:40:37 +0300
> Date: Sun, 13 Aug 2023 22:35:17 +0200
> From:  Nicolas Graves via "Bug reports for GNU Emacs,
>  the Swiss army knife of text editors" <bug-gnu-emacs <at> gnu.org>
> 
> 
> The sqlite3 cli tool has an option -readonly, which doesn't seem to be
> available in Emacs for now. This means that if someone wants to inspect
> a locked database, we would necessarily need to make a copy, while the
> -readonly flag would be enough using a shell-command.

Could you please explain what is a "locked database"?

The sqlite3 documentation says:

  SQLITE_OPEN_READWRITE
      The database is opened for reading and writing if possible, or
      reading only if the file is write protected by the operating
      system. In either case the database must already exist, otherwise
      an error is returned. For historical reasons, if opening in
      read-write mode fails due to OS-level permissions, an attempt is
      made to open it in read-only mode. sqlite3_db_readonly() can be
      used to determine whether the database is actually read-write.

My interpretation of this is that if opening for reading and writing
fails, SQlite will automatically attempt to open in read-only mode.
Does this not work in some cases?  IOW, in which cases would this
readonly option you are asking to add be useful?

Thanks.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#65274; Package emacs. (Wed, 16 Aug 2023 10:18:02 GMT) Full text and rfc822 format available.

Message #11 received at 65274 <at> debbugs.gnu.org (full text, mbox):

From: Nicolas Graves <ngraves <at> ngraves.fr>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: 65274 <at> debbugs.gnu.org
Subject: Re: bug#65274: 29.0.91; [feature request] Readonly argument for
 emacs built-in sqlite support.
Date: Wed, 16 Aug 2023 12:17:00 +0200
On 2023-08-14 19:40, Eli Zaretskii wrote:

>> Date: Sun, 13 Aug 2023 22:35:17 +0200
>> From:  Nicolas Graves via "Bug reports for GNU Emacs,
>>  the Swiss army knife of text editors" <bug-gnu-emacs <at> gnu.org>
>>
>>
>> The sqlite3 cli tool has an option -readonly, which doesn't seem to be
>> available in Emacs for now. This means that if someone wants to inspect
>> a locked database, we would necessarily need to make a copy, while the
>> -readonly flag would be enough using a shell-command.
>
> Could you please explain what is a "locked database"?
>
> The sqlite3 documentation says:
>
>   SQLITE_OPEN_READWRITE
>       The database is opened for reading and writing if possible, or
>       reading only if the file is write protected by the operating
>       system. In either case the database must already exist, otherwise
>       an error is returned. For historical reasons, if opening in
>       read-write mode fails due to OS-level permissions, an attempt is
>       made to open it in read-only mode. sqlite3_db_readonly() can be
>       used to determine whether the database is actually read-write.
>
> My interpretation of this is that if opening for reading and writing
> fails, SQlite will automatically attempt to open in read-only mode.
> Does this not work in some cases?  IOW, in which cases would this
> readonly option you are asking to add be useful?
>
> Thanks.

I'm sorry, I've resent this unsent patch from July which is rather not
precise, I now have more information.

My use-case is the package ibrowse.el, which uses sql commands to parse
in real time the database of browser (for history or bookmarks,
depending on the case)
(https://git.sr.ht/~ngraves/ibrowse.el/tree/master/item/ibrowse-sql.el).

Web browsers use very frequent updates and most of the time, even
trying to access it with readonly mode is not enough (I don't remember
all the details, but it's something along the lines of you can't open
even in read-only mode if the database file is currently being
updated).

Most other emacs packages which try to do the same thing circumvent the
issue by copying the whole database to /tmp and parsing it from
there. I've found another solution which doesn't require to copy the
file and it's to open it in immutable mode
(https://git.sr.ht/~ngraves/ibrowse.el/tree/master/item/ibrowse-sql.el#L58)
I remember the following stackoverflow link lead me to try this:
https://stackoverflow.com/questions/7857755/is-it-possible-to-open-a-locked-sqlite-database-in-read-only-mode

On the CLI, it's simply done by adding the uri file:...?immutable=1. The SQL
manual warns for possible errors if the database is being updated at the
same time, but I don't keep an open connection so I don't experience any
error whatsoever. One stackoverflow comment also hints about how it
could be done, this probably applies to emacs as well:

"To achieve the same thing with most SQLite drivers, because we can't directly set SQLITE_IOCAP_IMMUTABLE, the best way is to open the connection with the flag SQLITE_OPEN_READONLY | SQLITE_OPEN_URI to allow passing the file:...?immutable=1 URI as filename."

I've verified that this cannot be done on my version of emacs+sqlite
(currently GNU Emacs 29.0.92 (build 1, x86_64-pc-linux-gnu, GTK+ Version
3.24.37, cairo version 1.16.0)).

I know this is not the recommended way to use the sqlite
builtin-support (not a database by/for emacs, but parsing another app
data), but I would greatly appreciate if I can use this option with the
builtin support.

Thanks a lot for your work on emacs,

-- 
Best regards,
Nicolas Graves




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#65274; Package emacs. (Sat, 19 Aug 2023 09:22:02 GMT) Full text and rfc822 format available.

Message #14 received at 65274 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Nicolas Graves <ngraves <at> ngraves.fr>
Cc: 65274 <at> debbugs.gnu.org
Subject: Re: bug#65274: 29.0.91; [feature request] Readonly argument for
 emacs built-in sqlite support.
Date: Sat, 19 Aug 2023 12:21:05 +0300
> From: Nicolas Graves <ngraves <at> ngraves.fr>
> Cc: 65274 <at> debbugs.gnu.org
> Date: Wed, 16 Aug 2023 12:17:00 +0200
> 
> My use-case is the package ibrowse.el, which uses sql commands to parse
> in real time the database of browser (for history or bookmarks,
> depending on the case)
> (https://git.sr.ht/~ngraves/ibrowse.el/tree/master/item/ibrowse-sql.el).
> 
> Web browsers use very frequent updates and most of the time, even
> trying to access it with readonly mode is not enough (I don't remember
> all the details, but it's something along the lines of you can't open
> even in read-only mode if the database file is currently being
> updated).
> 
> Most other emacs packages which try to do the same thing circumvent the
> issue by copying the whole database to /tmp and parsing it from
> there. I've found another solution which doesn't require to copy the
> file and it's to open it in immutable mode
> (https://git.sr.ht/~ngraves/ibrowse.el/tree/master/item/ibrowse-sql.el#L58)
> I remember the following stackoverflow link lead me to try this:
> https://stackoverflow.com/questions/7857755/is-it-possible-to-open-a-locked-sqlite-database-in-read-only-mode
> 
> On the CLI, it's simply done by adding the uri file:...?immutable=1. The SQL
> manual warns for possible errors if the database is being updated at the
> same time, but I don't keep an open connection so I don't experience any
> error whatsoever. One stackoverflow comment also hints about how it
> could be done, this probably applies to emacs as well:
> 
> "To achieve the same thing with most SQLite drivers, because we can't directly set SQLITE_IOCAP_IMMUTABLE, the best way is to open the connection with the flag SQLITE_OPEN_READONLY | SQLITE_OPEN_URI to allow passing the file:...?immutable=1 URI as filename."

Thanks.  I'm not sure I understood all the intricacies of this use
case, but could you please see if the patches below make your use case
possible?

diff --git a/src/sqlite.c b/src/sqlite.c
index fd528f2..f68edb9 100644
--- a/src/sqlite.c
+++ b/src/sqlite.c
@@ -277,13 +277,20 @@ check_sqlite (Lisp_Object db, bool is_statement)
 
 static int db_count = 0;
 
-DEFUN ("sqlite-open", Fsqlite_open, Ssqlite_open, 0, 1, 0,
+DEFUN ("sqlite-open", Fsqlite_open, Ssqlite_open, 0, 2, 0,
        doc: /* Open FILE as an sqlite database.
-If FILE is nil, an in-memory database will be opened instead.  */)
-  (Lisp_Object file)
+If FILE is nil, an in-memory database will be opened instead.
+If READONLY is non-nil, open the database in read-only mode,
+otherwise open it in read-write mode.  */)
+  (Lisp_Object file, Lisp_Object readonly)
 {
   Lisp_Object name;
-  int flags = (SQLITE_OPEN_CREATE  | SQLITE_OPEN_READWRITE);
+  int flags;
+
+  if (!NILP (readonly))
+    flags = SQLITE_OPEN_READONLY;
+  else
+    flags = (SQLITE_OPEN_CREATE | SQLITE_OPEN_READWRITE);
 #ifdef SQLITE_OPEN_FULLMUTEX
   flags |= SQLITE_OPEN_FULLMUTEX;
 #endif




Added tag(s) patch. Request was from Stefan Kangas <stefankangas <at> gmail.com> to control <at> debbugs.gnu.org. (Wed, 23 Aug 2023 23:14:01 GMT) Full text and rfc822 format available.

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#65274; Package emacs. (Sat, 02 Sep 2023 07:18:02 GMT) Full text and rfc822 format available.

Message #19 received at 65274 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: ngraves <at> ngraves.fr
Cc: 65274 <at> debbugs.gnu.org
Subject: Re: bug#65274: 29.0.91;
 [feature request] Readonly argument for emacs built-in sqlite support.
Date: Sat, 02 Sep 2023 10:17:01 +0300
Ping!  Nicolas, could you please try the patch?  I'd like to install
it if it solves your problem.

> Cc: 65274 <at> debbugs.gnu.org
> Date: Sat, 19 Aug 2023 12:21:05 +0300
> From: Eli Zaretskii <eliz <at> gnu.org>
> 
> > From: Nicolas Graves <ngraves <at> ngraves.fr>
> > Cc: 65274 <at> debbugs.gnu.org
> > Date: Wed, 16 Aug 2023 12:17:00 +0200
> > 
> > My use-case is the package ibrowse.el, which uses sql commands to parse
> > in real time the database of browser (for history or bookmarks,
> > depending on the case)
> > (https://git.sr.ht/~ngraves/ibrowse.el/tree/master/item/ibrowse-sql.el).
> > 
> > Web browsers use very frequent updates and most of the time, even
> > trying to access it with readonly mode is not enough (I don't remember
> > all the details, but it's something along the lines of you can't open
> > even in read-only mode if the database file is currently being
> > updated).
> > 
> > Most other emacs packages which try to do the same thing circumvent the
> > issue by copying the whole database to /tmp and parsing it from
> > there. I've found another solution which doesn't require to copy the
> > file and it's to open it in immutable mode
> > (https://git.sr.ht/~ngraves/ibrowse.el/tree/master/item/ibrowse-sql.el#L58)
> > I remember the following stackoverflow link lead me to try this:
> > https://stackoverflow.com/questions/7857755/is-it-possible-to-open-a-locked-sqlite-database-in-read-only-mode
> > 
> > On the CLI, it's simply done by adding the uri file:...?immutable=1. The SQL
> > manual warns for possible errors if the database is being updated at the
> > same time, but I don't keep an open connection so I don't experience any
> > error whatsoever. One stackoverflow comment also hints about how it
> > could be done, this probably applies to emacs as well:
> > 
> > "To achieve the same thing with most SQLite drivers, because we can't directly set SQLITE_IOCAP_IMMUTABLE, the best way is to open the connection with the flag SQLITE_OPEN_READONLY | SQLITE_OPEN_URI to allow passing the file:...?immutable=1 URI as filename."
> 
> Thanks.  I'm not sure I understood all the intricacies of this use
> case, but could you please see if the patches below make your use case
> possible?
> 
> diff --git a/src/sqlite.c b/src/sqlite.c
> index fd528f2..f68edb9 100644
> --- a/src/sqlite.c
> +++ b/src/sqlite.c
> @@ -277,13 +277,20 @@ check_sqlite (Lisp_Object db, bool is_statement)
>  
>  static int db_count = 0;
>  
> -DEFUN ("sqlite-open", Fsqlite_open, Ssqlite_open, 0, 1, 0,
> +DEFUN ("sqlite-open", Fsqlite_open, Ssqlite_open, 0, 2, 0,
>         doc: /* Open FILE as an sqlite database.
> -If FILE is nil, an in-memory database will be opened instead.  */)
> -  (Lisp_Object file)
> +If FILE is nil, an in-memory database will be opened instead.
> +If READONLY is non-nil, open the database in read-only mode,
> +otherwise open it in read-write mode.  */)
> +  (Lisp_Object file, Lisp_Object readonly)
>  {
>    Lisp_Object name;
> -  int flags = (SQLITE_OPEN_CREATE  | SQLITE_OPEN_READWRITE);
> +  int flags;
> +
> +  if (!NILP (readonly))
> +    flags = SQLITE_OPEN_READONLY;
> +  else
> +    flags = (SQLITE_OPEN_CREATE | SQLITE_OPEN_READWRITE);
>  #ifdef SQLITE_OPEN_FULLMUTEX
>    flags |= SQLITE_OPEN_FULLMUTEX;
>  #endif
> 
> 
> 
> 




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#65274; Package emacs. (Fri, 15 Sep 2023 06:55:02 GMT) Full text and rfc822 format available.

Message #22 received at 65274 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: ngraves <at> ngraves.fr
Cc: 65274 <at> debbugs.gnu.org
Subject: Re: bug#65274: 29.0.91;
 [feature request] Readonly argument for emacs built-in sqlite support.
Date: Fri, 15 Sep 2023 09:54:12 +0300
Ping! Ping!

Nicolas, did you perhaps have time to try this patch?

> Cc: 65274 <at> debbugs.gnu.org
> Date: Sat, 02 Sep 2023 10:17:01 +0300
> From: Eli Zaretskii <eliz <at> gnu.org>
> 
> Ping!  Nicolas, could you please try the patch?  I'd like to install
> it if it solves your problem.
> 
> > Cc: 65274 <at> debbugs.gnu.org
> > Date: Sat, 19 Aug 2023 12:21:05 +0300
> > From: Eli Zaretskii <eliz <at> gnu.org>
> > 
> > > From: Nicolas Graves <ngraves <at> ngraves.fr>
> > > Cc: 65274 <at> debbugs.gnu.org
> > > Date: Wed, 16 Aug 2023 12:17:00 +0200
> > > 
> > > My use-case is the package ibrowse.el, which uses sql commands to parse
> > > in real time the database of browser (for history or bookmarks,
> > > depending on the case)
> > > (https://git.sr.ht/~ngraves/ibrowse.el/tree/master/item/ibrowse-sql.el).
> > > 
> > > Web browsers use very frequent updates and most of the time, even
> > > trying to access it with readonly mode is not enough (I don't remember
> > > all the details, but it's something along the lines of you can't open
> > > even in read-only mode if the database file is currently being
> > > updated).
> > > 
> > > Most other emacs packages which try to do the same thing circumvent the
> > > issue by copying the whole database to /tmp and parsing it from
> > > there. I've found another solution which doesn't require to copy the
> > > file and it's to open it in immutable mode
> > > (https://git.sr.ht/~ngraves/ibrowse.el/tree/master/item/ibrowse-sql.el#L58)
> > > I remember the following stackoverflow link lead me to try this:
> > > https://stackoverflow.com/questions/7857755/is-it-possible-to-open-a-locked-sqlite-database-in-read-only-mode
> > > 
> > > On the CLI, it's simply done by adding the uri file:...?immutable=1. The SQL
> > > manual warns for possible errors if the database is being updated at the
> > > same time, but I don't keep an open connection so I don't experience any
> > > error whatsoever. One stackoverflow comment also hints about how it
> > > could be done, this probably applies to emacs as well:
> > > 
> > > "To achieve the same thing with most SQLite drivers, because we can't directly set SQLITE_IOCAP_IMMUTABLE, the best way is to open the connection with the flag SQLITE_OPEN_READONLY | SQLITE_OPEN_URI to allow passing the file:...?immutable=1 URI as filename."
> > 
> > Thanks.  I'm not sure I understood all the intricacies of this use
> > case, but could you please see if the patches below make your use case
> > possible?
> > 
> > diff --git a/src/sqlite.c b/src/sqlite.c
> > index fd528f2..f68edb9 100644
> > --- a/src/sqlite.c
> > +++ b/src/sqlite.c
> > @@ -277,13 +277,20 @@ check_sqlite (Lisp_Object db, bool is_statement)
> >  
> >  static int db_count = 0;
> >  
> > -DEFUN ("sqlite-open", Fsqlite_open, Ssqlite_open, 0, 1, 0,
> > +DEFUN ("sqlite-open", Fsqlite_open, Ssqlite_open, 0, 2, 0,
> >         doc: /* Open FILE as an sqlite database.
> > -If FILE is nil, an in-memory database will be opened instead.  */)
> > -  (Lisp_Object file)
> > +If FILE is nil, an in-memory database will be opened instead.
> > +If READONLY is non-nil, open the database in read-only mode,
> > +otherwise open it in read-write mode.  */)
> > +  (Lisp_Object file, Lisp_Object readonly)
> >  {
> >    Lisp_Object name;
> > -  int flags = (SQLITE_OPEN_CREATE  | SQLITE_OPEN_READWRITE);
> > +  int flags;
> > +
> > +  if (!NILP (readonly))
> > +    flags = SQLITE_OPEN_READONLY;
> > +  else
> > +    flags = (SQLITE_OPEN_CREATE | SQLITE_OPEN_READWRITE);
> >  #ifdef SQLITE_OPEN_FULLMUTEX
> >    flags |= SQLITE_OPEN_FULLMUTEX;
> >  #endif
> > 
> > 
> > 
> > 
> 
> 
> 
> 




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#65274; Package emacs. (Tue, 21 Nov 2023 13:42:02 GMT) Full text and rfc822 format available.

Message #25 received at 65274 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Nicolas Graves <ngraves <at> ngraves.fr>
Cc: 65274 <at> debbugs.gnu.org
Subject: Re: bug#65274: 29.0.91; [feature request] Readonly argument for
 emacs built-in sqlite support.
Date: Tue, 21 Nov 2023 15:41:30 +0200
> From: Nicolas Graves <ngraves <at> ngraves.fr>
> Date: Fri, 15 Sep 2023 15:53:15 +0200
> 
> On 2023-09-15 09:54, Eli Zaretskii wrote:
> 
> > Ping! Ping!
> >
> > Nicolas, did you perhaps have time to try this patch?
> 
> Thanks for getting back, I didn't have time to try this, but I will and
> will come back to you. Can't really commit on a date though, but be sure
> it's in my backlog. 

Any progress with this?




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#65274; Package emacs. (Sun, 23 Feb 2025 06:17:02 GMT) Full text and rfc822 format available.

Message #28 received at 65274 <at> debbugs.gnu.org (full text, mbox):

From: Stefan Kangas <stefankangas <at> gmail.com>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: Nicolas Graves <ngraves <at> ngraves.fr>, 65274 <at> debbugs.gnu.org
Subject: Re: bug#65274: 29.0.91; [feature request] Readonly argument for emacs
 built-in sqlite support.
Date: Sun, 23 Feb 2025 06:16:48 +0000
Eli Zaretskii <eliz <at> gnu.org> writes:

>> From: Nicolas Graves <ngraves <at> ngraves.fr>
>> Cc: 65274 <at> debbugs.gnu.org
>> Date: Wed, 16 Aug 2023 12:17:00 +0200
>>
>> My use-case is the package ibrowse.el, which uses sql commands to parse
>> in real time the database of browser (for history or bookmarks,
>> depending on the case)
>> (https://git.sr.ht/~ngraves/ibrowse.el/tree/master/item/ibrowse-sql.el).
>>
>> Web browsers use very frequent updates and most of the time, even
>> trying to access it with readonly mode is not enough (I don't remember
>> all the details, but it's something along the lines of you can't open
>> even in read-only mode if the database file is currently being
>> updated).
>>
>> Most other emacs packages which try to do the same thing circumvent the
>> issue by copying the whole database to /tmp and parsing it from
>> there. I've found another solution which doesn't require to copy the
>> file and it's to open it in immutable mode
>> (https://git.sr.ht/~ngraves/ibrowse.el/tree/master/item/ibrowse-sql.el#L58)
>> I remember the following stackoverflow link lead me to try this:
>> https://stackoverflow.com/questions/7857755/is-it-possible-to-open-a-locked-sqlite-database-in-read-only-mode
>>
>> On the CLI, it's simply done by adding the uri file:...?immutable=1. The SQL
>> manual warns for possible errors if the database is being updated at the
>> same time, but I don't keep an open connection so I don't experience any
>> error whatsoever. One stackoverflow comment also hints about how it
>> could be done, this probably applies to emacs as well:
>>
>> "To achieve the same thing with most SQLite drivers, because we can't directly
>> set SQLITE_IOCAP_IMMUTABLE, the best way is to open the connection with the
>> flag SQLITE_OPEN_READONLY | SQLITE_OPEN_URI to allow passing the
>> file:...?immutable=1 URI as filename."
>
> Thanks.  I'm not sure I understood all the intricacies of this use
> case, but could you please see if the patches below make your use case
> possible?

We never heard back from Nicolas, but the patch LGTM.

Maybe we should just install it?  It seems pretty straight-forward, and
why wouldn't we want to support read-only operation?  It sounds useful.

> diff --git a/src/sqlite.c b/src/sqlite.c
> index fd528f2..f68edb9 100644
> --- a/src/sqlite.c
> +++ b/src/sqlite.c
> @@ -277,13 +277,20 @@ check_sqlite (Lisp_Object db, bool is_statement)
>
>  static int db_count = 0;
>
> -DEFUN ("sqlite-open", Fsqlite_open, Ssqlite_open, 0, 1, 0,
> +DEFUN ("sqlite-open", Fsqlite_open, Ssqlite_open, 0, 2, 0,
>         doc: /* Open FILE as an sqlite database.
> -If FILE is nil, an in-memory database will be opened instead.  */)
> -  (Lisp_Object file)
> +If FILE is nil, an in-memory database will be opened instead.
> +If READONLY is non-nil, open the database in read-only mode,
> +otherwise open it in read-write mode.  */)
> +  (Lisp_Object file, Lisp_Object readonly)
>  {
>    Lisp_Object name;
> -  int flags = (SQLITE_OPEN_CREATE  | SQLITE_OPEN_READWRITE);
> +  int flags;
> +
> +  if (!NILP (readonly))
> +    flags = SQLITE_OPEN_READONLY;
> +  else
> +    flags = (SQLITE_OPEN_CREATE | SQLITE_OPEN_READWRITE);
>  #ifdef SQLITE_OPEN_FULLMUTEX
>    flags |= SQLITE_OPEN_FULLMUTEX;
>  #endif




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#65274; Package emacs. (Sun, 23 Feb 2025 06:28:01 GMT) Full text and rfc822 format available.

Message #31 received at 65274 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Stefan Kangas <stefankangas <at> gmail.com>
Cc: ngraves <at> ngraves.fr, 65274 <at> debbugs.gnu.org
Subject: Re: bug#65274: 29.0.91; [feature request] Readonly argument for emacs
 built-in sqlite support.
Date: Sun, 23 Feb 2025 08:26:50 +0200
> From: Stefan Kangas <stefankangas <at> gmail.com>
> Date: Sun, 23 Feb 2025 06:16:48 +0000
> Cc: Nicolas Graves <ngraves <at> ngraves.fr>, 65274 <at> debbugs.gnu.org
> 
> Eli Zaretskii <eliz <at> gnu.org> writes:
> 
> > Thanks.  I'm not sure I understood all the intricacies of this use
> > case, but could you please see if the patches below make your use case
> > possible?
> 
> We never heard back from Nicolas, but the patch LGTM.
> 
> Maybe we should just install it?  It seems pretty straight-forward, and
> why wouldn't we want to support read-only operation?  It sounds useful.

If you can test the patch, I will install it.  I just didn't want to
install something I cannot make sure was working with a real DB.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#65274; Package emacs. (Fri, 14 Mar 2025 00:58:01 GMT) Full text and rfc822 format available.

Message #34 received at 65274 <at> debbugs.gnu.org (full text, mbox):

From: Nicolas Graves <ngraves <at> ngraves.fr>
To: Eli Zaretskii <eliz <at> gnu.org>, Stefan Kangas <stefankangas <at> gmail.com>
Cc: 65274 <at> debbugs.gnu.org
Subject: Re: bug#65274: 29.0.91; [feature request] Readonly argument for
 emacs built-in sqlite support.
Date: Fri, 14 Mar 2025 01:56:50 +0100
On 2025-02-23 08:26, Eli Zaretskii wrote:

>> From: Stefan Kangas <stefankangas <at> gmail.com>
>> Date: Sun, 23 Feb 2025 06:16:48 +0000
>> Cc: Nicolas Graves <ngraves <at> ngraves.fr>, 65274 <at> debbugs.gnu.org
>> 
>> Eli Zaretskii <eliz <at> gnu.org> writes:
>> 
>> > Thanks.  I'm not sure I understood all the intricacies of this use
>> > case, but could you please see if the patches below make your use case
>> > possible?
>> 
>> We never heard back from Nicolas, but the patch LGTM.
>> 
>> Maybe we should just install it?  It seems pretty straight-forward, and
>> why wouldn't we want to support read-only operation?  It sounds useful.
>
> If you can test the patch, I will install it.  I just didn't want to
> install something I cannot make sure was working with a real DB.

It probably works for a real DB (not immutable), but my issue here was
more specific : opening a database with immutability (ie. even if it's
locked by another process, a browser in my use-case). I can confirm it
does NOT solve this particular issue :

(defun ibrowse-sql--apply-command
    (database command &optional callback immutable-p)
  "Apply the SQL COMMAND using the SQL DATABASE, then call CALLBACK.

If IMMUTABLE-P, use the immutable option for the database."
  (let ((database (if immutable-p
                      (concat "file:" database "?immutable=1")
                    database)))
    (funcall callback (sqlite-select (sqlite-open database t) command))))

Without immutable-p, it fails with the error :
sqlite-error "database is locked" 5
(expected in my case)

With immutable-p, sqlite-open fails (returns nil).
That's strange because

#ifdef SQLITE_OPEN_URI
  flags |= SQLITE_OPEN_URI;
#endif

should probably enable the thing to work if the stackoverflow answer was
correct.

-- 
Best regards,
Nicolas Graves




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#65274; Package emacs. (Fri, 14 Mar 2025 01:29:02 GMT) Full text and rfc822 format available.

Message #37 received at 65274 <at> debbugs.gnu.org (full text, mbox):

From: Ship Mints <shipmints <at> gmail.com>
To: Nicolas Graves <ngraves <at> ngraves.fr>
Cc: Eli Zaretskii <eliz <at> gnu.org>, Stefan Kangas <stefankangas <at> gmail.com>,
 65274 <at> debbugs.gnu.org
Subject: Re: bug#65274: 29.0.91; [feature request] Readonly argument for emacs
 built-in sqlite support.
Date: Thu, 13 Mar 2025 21:27:54 -0400
[Message part 1 (text/plain, inline)]
On Thu, Mar 13, 2025 at 8:58 PM Nicolas Graves <ngraves <at> ngraves.fr> wrote:

> On 2025-02-23 08:26, Eli Zaretskii wrote:
>
> >> From: Stefan Kangas <stefankangas <at> gmail.com>
> >> Date: Sun, 23 Feb 2025 06:16:48 +0000
> >> Cc: Nicolas Graves <ngraves <at> ngraves.fr>, 65274 <at> debbugs.gnu.org
> >>
> >> Eli Zaretskii <eliz <at> gnu.org> writes:
> >>
> >> > Thanks.  I'm not sure I understood all the intricacies of this use
> >> > case, but could you please see if the patches below make your use case
> >> > possible?
> >>
> >> We never heard back from Nicolas, but the patch LGTM.
> >>
> >> Maybe we should just install it?  It seems pretty straight-forward, and
> >> why wouldn't we want to support read-only operation?  It sounds useful.
> >
> > If you can test the patch, I will install it.  I just didn't want to
> > install something I cannot make sure was working with a real DB.
>
> It probably works for a real DB (not immutable), but my issue here was
> more specific : opening a database with immutability (ie. even if it's
> locked by another process, a browser in my use-case). I can confirm it
> does NOT solve this particular issue :
>
> (defun ibrowse-sql--apply-command
>     (database command &optional callback immutable-p)
>   "Apply the SQL COMMAND using the SQL DATABASE, then call CALLBACK.
>
> If IMMUTABLE-P, use the immutable option for the database."
>   (let ((database (if immutable-p
>                       (concat "file:" database "?immutable=1")
>                     database)))
>     (funcall callback (sqlite-select (sqlite-open database t) command))))
>
> Without immutable-p, it fails with the error :
> sqlite-error "database is locked" 5
> (expected in my case)
>
> With immutable-p, sqlite-open fails (returns nil).
> That's strange because
>
> #ifdef SQLITE_OPEN_URI
>   flags |= SQLITE_OPEN_URI;
> #endif
>
> should probably enable the thing to work if the stackoverflow answer was
> correct.
>

Is your emacs built with SQLITE_OPEN_URI defined?  I think that flag
defaults to undefined.  Maybe try using CFLAGS=-DSQLITE_OPEN_URI when you
run configure.
[Message part 2 (text/html, inline)]

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#65274; Package emacs. (Sat, 29 Mar 2025 11:18:02 GMT) Full text and rfc822 format available.

Message #40 received at 65274 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: ngraves <at> ngraves.fr, Ship Mints <shipmints <at> gmail.com>
Cc: stefankangas <at> gmail.com, 65274 <at> debbugs.gnu.org
Subject: Re: bug#65274: 29.0.91; [feature request] Readonly argument for emacs
 built-in sqlite support.
Date: Sat, 29 Mar 2025 14:17:31 +0300
Ping! Nicolas, could you please answer the question below, so we could
decide how to proceed with this issue?

> From: Ship Mints <shipmints <at> gmail.com>
> Date: Thu, 13 Mar 2025 21:27:54 -0400
> Cc: Eli Zaretskii <eliz <at> gnu.org>, Stefan Kangas <stefankangas <at> gmail.com>, 65274 <at> debbugs.gnu.org
> 
> On Thu, Mar 13, 2025 at 8:58 PM Nicolas Graves <ngraves <at> ngraves.fr> wrote:
> 
>  On 2025-02-23 08:26, Eli Zaretskii wrote:
> 
>  >> From: Stefan Kangas <stefankangas <at> gmail.com>
>  >> Date: Sun, 23 Feb 2025 06:16:48 +0000
>  >> Cc: Nicolas Graves <ngraves <at> ngraves.fr>, 65274 <at> debbugs.gnu.org
>  >> 
>  >> Eli Zaretskii <eliz <at> gnu.org> writes:
>  >> 
>  >> > Thanks.  I'm not sure I understood all the intricacies of this use
>  >> > case, but could you please see if the patches below make your use case
>  >> > possible?
>  >> 
>  >> We never heard back from Nicolas, but the patch LGTM.
>  >> 
>  >> Maybe we should just install it?  It seems pretty straight-forward, and
>  >> why wouldn't we want to support read-only operation?  It sounds useful.
>  >
>  > If you can test the patch, I will install it.  I just didn't want to
>  > install something I cannot make sure was working with a real DB.
> 
>  It probably works for a real DB (not immutable), but my issue here was
>  more specific : opening a database with immutability (ie. even if it's
>  locked by another process, a browser in my use-case). I can confirm it
>  does NOT solve this particular issue :
> 
>  (defun ibrowse-sql--apply-command
>      (database command &optional callback immutable-p)
>    "Apply the SQL COMMAND using the SQL DATABASE, then call CALLBACK.
> 
>  If IMMUTABLE-P, use the immutable option for the database."
>    (let ((database (if immutable-p
>                        (concat "file:" database "?immutable=1")
>                      database)))
>      (funcall callback (sqlite-select (sqlite-open database t) command))))
> 
>  Without immutable-p, it fails with the error :
>  sqlite-error "database is locked" 5
>  (expected in my case)
> 
>  With immutable-p, sqlite-open fails (returns nil).
>  That's strange because
> 
>  #ifdef SQLITE_OPEN_URI
>    flags |= SQLITE_OPEN_URI;
>  #endif
> 
>  should probably enable the thing to work if the stackoverflow answer was
>  correct.
> 
> Is your emacs built with SQLITE_OPEN_URI defined?  I think that flag defaults to undefined.  Maybe try using
> CFLAGS=-DSQLITE_OPEN_URI when you run configure.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#65274; Package emacs. (Sun, 13 Apr 2025 07:19:08 GMT) Full text and rfc822 format available.

Message #43 received at 65274 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: ngraves <at> ngraves.fr
Cc: 65274 <at> debbugs.gnu.org, shipmints <at> gmail.com, stefankangas <at> gmail.com
Subject: Re: bug#65274: 29.0.91;
 [feature request] Readonly argument for emacs built-in sqlite support.
Date: Sun, 13 Apr 2025 10:18:47 +0300
Ping! Ping!  Nicolas, please respond.

> Cc: stefankangas <at> gmail.com, 65274 <at> debbugs.gnu.org
> Date: Sat, 29 Mar 2025 14:17:31 +0300
> From: Eli Zaretskii <eliz <at> gnu.org>
> 
> Ping! Nicolas, could you please answer the question below, so we could
> decide how to proceed with this issue?
> 
> > From: Ship Mints <shipmints <at> gmail.com>
> > Date: Thu, 13 Mar 2025 21:27:54 -0400
> > Cc: Eli Zaretskii <eliz <at> gnu.org>, Stefan Kangas <stefankangas <at> gmail.com>, 65274 <at> debbugs.gnu.org
> > 
> > On Thu, Mar 13, 2025 at 8:58 PM Nicolas Graves <ngraves <at> ngraves.fr> wrote:
> > 
> >  On 2025-02-23 08:26, Eli Zaretskii wrote:
> > 
> >  >> From: Stefan Kangas <stefankangas <at> gmail.com>
> >  >> Date: Sun, 23 Feb 2025 06:16:48 +0000
> >  >> Cc: Nicolas Graves <ngraves <at> ngraves.fr>, 65274 <at> debbugs.gnu.org
> >  >> 
> >  >> Eli Zaretskii <eliz <at> gnu.org> writes:
> >  >> 
> >  >> > Thanks.  I'm not sure I understood all the intricacies of this use
> >  >> > case, but could you please see if the patches below make your use case
> >  >> > possible?
> >  >> 
> >  >> We never heard back from Nicolas, but the patch LGTM.
> >  >> 
> >  >> Maybe we should just install it?  It seems pretty straight-forward, and
> >  >> why wouldn't we want to support read-only operation?  It sounds useful.
> >  >
> >  > If you can test the patch, I will install it.  I just didn't want to
> >  > install something I cannot make sure was working with a real DB.
> > 
> >  It probably works for a real DB (not immutable), but my issue here was
> >  more specific : opening a database with immutability (ie. even if it's
> >  locked by another process, a browser in my use-case). I can confirm it
> >  does NOT solve this particular issue :
> > 
> >  (defun ibrowse-sql--apply-command
> >      (database command &optional callback immutable-p)
> >    "Apply the SQL COMMAND using the SQL DATABASE, then call CALLBACK.
> > 
> >  If IMMUTABLE-P, use the immutable option for the database."
> >    (let ((database (if immutable-p
> >                        (concat "file:" database "?immutable=1")
> >                      database)))
> >      (funcall callback (sqlite-select (sqlite-open database t) command))))
> > 
> >  Without immutable-p, it fails with the error :
> >  sqlite-error "database is locked" 5
> >  (expected in my case)
> > 
> >  With immutable-p, sqlite-open fails (returns nil).
> >  That's strange because
> > 
> >  #ifdef SQLITE_OPEN_URI
> >    flags |= SQLITE_OPEN_URI;
> >  #endif
> > 
> >  should probably enable the thing to work if the stackoverflow answer was
> >  correct.
> > 
> > Is your emacs built with SQLITE_OPEN_URI defined?  I think that flag defaults to undefined.  Maybe try using
> > CFLAGS=-DSQLITE_OPEN_URI when you run configure.
> 
> 
> 
> 




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#65274; Package emacs. (Sun, 13 Apr 2025 08:27:03 GMT) Full text and rfc822 format available.

Message #46 received at 65274 <at> debbugs.gnu.org (full text, mbox):

From: Nicolas Graves <ngraves <at> ngraves.fr>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: 65274 <at> debbugs.gnu.org, shipmints <at> gmail.com, stefankangas <at> gmail.com
Subject: Re: bug#65274: 29.0.91; [feature request] Readonly argument for
 emacs built-in sqlite support.
Date: Sun, 13 Apr 2025 10:25:56 +0200
On 2025-04-13 10:18, Eli Zaretskii wrote:

> Ping! Ping!  Nicolas, please respond.

I tried once but it still didn't work.  Will investigate more this
morning to give a more complete answer.

-- 
Best regards,
Nicolas Graves




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#65274; Package emacs. (Sun, 13 Apr 2025 19:31:02 GMT) Full text and rfc822 format available.

Message #49 received at 65274 <at> debbugs.gnu.org (full text, mbox):

From: Nicolas Graves <ngraves <at> ngraves.fr>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: 65274 <at> debbugs.gnu.org, shipmints <at> gmail.com, stefankangas <at> gmail.com
Subject: Re: bug#65274: 29.0.91; [feature request] Readonly argument for
 emacs built-in sqlite support.
Date: Sun, 13 Apr 2025 21:30:09 +0200
This is the version I used for testing (patched in Guix upstream) :
modified   gnu/packages/emacs.scm
@@ -119,7 +119,8 @@ (define-public emacs-minimal
                                        "emacs-native-comp-driver-options.patch"
                                        "emacs-native-comp-fix-filenames.patch"
                                        "emacs-native-comp-pin-packages.patch"
-                                       "emacs-pgtk-super-key-fix.patch"))
+                                       "emacs-pgtk-super-key-fix.patch"
+                                       "emacs-sqlite.patch"))
               (modules '((guix build utils)))
               (snippet
                '(with-directory-excursion "lisp"
@@ -442,7 +443,7 @@ (define-public emacs
      (substitute-keyword-arguments (package-arguments emacs-no-x)
        ((#:modules _) (%emacs-modules build-system))
        ((#:configure-flags flags #~'())
-        #~(cons* "--with-cairo" #$flags))
+        #~(cons* "CFLAGS=-DSQLITE_OPEN_URI" "--with-cairo" #$flags))
        ((#:phases phases)
         #~(modify-phases #$phases
             ;; Note: due to the changed #:modules, %standard-phases in #$phases

[...]

*trace-output* on the new sqlite-open
======================================================================
1 -> (sqlite-open "file:/home/graves/.mozilla/firefox/p0gu7gj2.default/places.sqlite?immutable=1" t)
1 <- sqlite-open: nil
======================================================================
1 -> (sqlite-open "/home/graves/.mozilla/firefox/p0gu7gj2.default/places.sqlite" t)
1 <- sqlite-open: #<sqlite db=0x2ed86f08 name=/home/graves/.mozilla/firefox/p0gu7gj2.default/places.sqlite>

So the former format with file:[...]?immutable=1 when called with sqlite
binary is not accepted.

So sqlite open is able to return a db object, but it fails once again
for a browser database that is opened with:

funcall: Database error: ("database is locked" "database is locked" 5 5)

My answer is the same as last time: the patch seems able to open
databases in read-only mode, but doesn't seem to be able to open
databases with immutability, apparently even with
CFLAGS=-DSQLITE_OPEN_URI (reminder: immutability in my case is
consulting the database even when it's locked)

The issue for my use case is that IIRC we respected the suggestion on
Stack Overflow, so we might not have a solution before further digging,
and I do not have substantial time to allocate on further research on
this issue.

-- 
Best regards,
Nicolas Graves




Reply sent to Eli Zaretskii <eliz <at> gnu.org>:
You have taken responsibility. (Mon, 14 Apr 2025 09:47:02 GMT) Full text and rfc822 format available.

Notification sent to Nicolas Graves <ngraves <at> ngraves.fr>:
bug acknowledged by developer. (Mon, 14 Apr 2025 09:47:02 GMT) Full text and rfc822 format available.

Message #54 received at 65274-done <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Nicolas Graves <ngraves <at> ngraves.fr>
Cc: 65274-done <at> debbugs.gnu.org, shipmints <at> gmail.com, stefankangas <at> gmail.com
Subject: Re: bug#65274: 29.0.91; [feature request] Readonly argument for
 emacs built-in sqlite support.
Date: Mon, 14 Apr 2025 12:46:30 +0300
> From: Nicolas Graves <ngraves <at> ngraves.fr>
> Cc: shipmints <at> gmail.com, stefankangas <at> gmail.com, 65274 <at> debbugs.gnu.org
> Date: Sun, 13 Apr 2025 21:30:09 +0200
> 
> 
> This is the version I used for testing (patched in Guix upstream) :
> modified   gnu/packages/emacs.scm
> @@ -119,7 +119,8 @@ (define-public emacs-minimal
>                                         "emacs-native-comp-driver-options.patch"
>                                         "emacs-native-comp-fix-filenames.patch"
>                                         "emacs-native-comp-pin-packages.patch"
> -                                       "emacs-pgtk-super-key-fix.patch"))
> +                                       "emacs-pgtk-super-key-fix.patch"
> +                                       "emacs-sqlite.patch"))
>                (modules '((guix build utils)))
>                (snippet
>                 '(with-directory-excursion "lisp"
> @@ -442,7 +443,7 @@ (define-public emacs
>       (substitute-keyword-arguments (package-arguments emacs-no-x)
>         ((#:modules _) (%emacs-modules build-system))
>         ((#:configure-flags flags #~'())
> -        #~(cons* "--with-cairo" #$flags))
> +        #~(cons* "CFLAGS=-DSQLITE_OPEN_URI" "--with-cairo" #$flags))
>         ((#:phases phases)
>          #~(modify-phases #$phases
>              ;; Note: due to the changed #:modules, %standard-phases in #$phases
> 
> [...]
> 
> *trace-output* on the new sqlite-open
> ======================================================================
> 1 -> (sqlite-open "file:/home/graves/.mozilla/firefox/p0gu7gj2.default/places.sqlite?immutable=1" t)
> 1 <- sqlite-open: nil
> ======================================================================
> 1 -> (sqlite-open "/home/graves/.mozilla/firefox/p0gu7gj2.default/places.sqlite" t)
> 1 <- sqlite-open: #<sqlite db=0x2ed86f08 name=/home/graves/.mozilla/firefox/p0gu7gj2.default/places.sqlite>
> 
> So the former format with file:[...]?immutable=1 when called with sqlite
> binary is not accepted.
> 
> So sqlite open is able to return a db object, but it fails once again
> for a browser database that is opened with:
> 
> funcall: Database error: ("database is locked" "database is locked" 5 5)
> 
> My answer is the same as last time: the patch seems able to open
> databases in read-only mode, but doesn't seem to be able to open
> databases with immutability, apparently even with
> CFLAGS=-DSQLITE_OPEN_URI (reminder: immutability in my case is
> consulting the database even when it's locked)
> 
> The issue for my use case is that IIRC we respected the suggestion on
> Stack Overflow, so we might not have a solution before further digging,
> and I do not have substantial time to allocate on further research on
> this issue.

Thanks.

I eventually decided to allow support of file:// URIs by default, with
a new optional argument to disable that if needed.

So now sqlite-open has 2 new arguments: READONLY and DISABLE-URI.  I
hope this will satisfy all the requests in this bug report.

I've installed these changes on the master branch, and I'm closing
this bug.  If any followups or left-overs are discovered, we can
reopen this bug to handle them.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#65274; Package emacs. (Mon, 14 Apr 2025 21:35:01 GMT) Full text and rfc822 format available.

Message #57 received at 65274 <at> debbugs.gnu.org (full text, mbox):

From: Stefan Kangas <stefankangas <at> gmail.com>
To: Eli Zaretskii <eliz <at> gnu.org>, Nicolas Graves <ngraves <at> ngraves.fr>
Cc: shipmints <at> gmail.com, 65274 <at> debbugs.gnu.org
Subject: Re: bug#65274: 29.0.91; [feature request] Readonly argument for emacs
 built-in sqlite support.
Date: Mon, 14 Apr 2025 14:34:06 -0700
Eli Zaretskii <eliz <at> gnu.org> writes:

> I eventually decided to allow support of file:// URIs by default, with
> a new optional argument to disable that if needed.
>
> So now sqlite-open has 2 new arguments: READONLY and DISABLE-URI.  I
> hope this will satisfy all the requests in this bug report.

Maybe we should make it use keyword arguments instead, in case we want
to add more in the future.  This in analogy with `make-process`, etc.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#65274; Package emacs. (Tue, 15 Apr 2025 06:57:01 GMT) Full text and rfc822 format available.

Message #60 received at 65274 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Stefan Kangas <stefankangas <at> gmail.com>
Cc: ngraves <at> ngraves.fr, shipmints <at> gmail.com, 65274 <at> debbugs.gnu.org
Subject: Re: bug#65274: 29.0.91; [feature request] Readonly argument for emacs
 built-in sqlite support.
Date: Tue, 15 Apr 2025 09:55:34 +0300
> From: Stefan Kangas <stefankangas <at> gmail.com>
> Date: Mon, 14 Apr 2025 14:34:06 -0700
> Cc: shipmints <at> gmail.com, 65274 <at> debbugs.gnu.org
> 
> Eli Zaretskii <eliz <at> gnu.org> writes:
> 
> > I eventually decided to allow support of file:// URIs by default, with
> > a new optional argument to disable that if needed.
> >
> > So now sqlite-open has 2 new arguments: READONLY and DISABLE-URI.  I
> > hope this will satisfy all the requests in this bug report.
> 
> Maybe we should make it use keyword arguments instead, in case we want
> to add more in the future.  This in analogy with `make-process`, etc.

You mean, as an option, right?  Because forcing keyword-based
arguments at this point would be a backward-incompatible change.

If keywords are optional, feel free to install such a change.

Alternatively, we could provide a wrapper which uses keyword-based
arguments.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#65274; Package emacs. (Tue, 15 Apr 2025 14:14:01 GMT) Full text and rfc822 format available.

Message #63 received at 65274 <at> debbugs.gnu.org (full text, mbox):

From: Stefan Kangas <stefankangas <at> gmail.com>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: ngraves <at> ngraves.fr, shipmints <at> gmail.com, 65274 <at> debbugs.gnu.org
Subject: Re: bug#65274: 29.0.91; [feature request] Readonly argument for emacs
 built-in sqlite support.
Date: Tue, 15 Apr 2025 09:13:40 -0500
Eli Zaretskii <eliz <at> gnu.org> writes:

>> From: Stefan Kangas <stefankangas <at> gmail.com>
>> Date: Mon, 14 Apr 2025 14:34:06 -0700
>> Cc: shipmints <at> gmail.com, 65274 <at> debbugs.gnu.org
>>
>> Eli Zaretskii <eliz <at> gnu.org> writes:
>>
>> > I eventually decided to allow support of file:// URIs by default, with
>> > a new optional argument to disable that if needed.
>> >
>> > So now sqlite-open has 2 new arguments: READONLY and DISABLE-URI.  I
>> > hope this will satisfy all the requests in this bug report.
>>
>> Maybe we should make it use keyword arguments instead, in case we want
>> to add more in the future.  This in analogy with `make-process`, etc.
>
> You mean, as an option, right?  Because forcing keyword-based
> arguments at this point would be a backward-incompatible change.
>
> If keywords are optional, feel free to install such a change.

Yes, it would have to be done in a backwards-compatible way.  I think we
could just accept the old argument, but if given a keyword/value list
use that instead.

> Alternatively, we could provide a wrapper which uses keyword-based
> arguments.

That's another option, indeed.




bug archived. Request was from Debbugs Internal Request <help-debbugs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Wed, 14 May 2025 11:25:15 GMT) Full text and rfc822 format available.

This bug report was last modified 51 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.