Function: multisession-backend-value

multisession-backend-value is a byte-compiled function defined in multisession.el.gz.

Signature

(multisession-backend-value ARG &rest ARGS)

Implementations

(multisession-backend-value (TYPE (eql 'files)) OBJECT) in `multisession.el'.

Undocumented

(multisession-backend-value (TYPE (eql 'sqlite)) OBJECT) in `multisession.el'.

Undocumented

Source Code

;; Defined in /usr/src/emacs/lisp/emacs-lisp/multisession.el.gz
(cl-defmethod multisession-backend-value ((_type (eql 'sqlite)) object)
  (if (not (sqlite-available-p))
      (cl-call-next-method)
    (multisession--ensure-db)
    (let ((id (list (multisession--package object)
                    (multisession--key object))))
      (cond
       ;; We have no value yet; check the database.
       ((eq (multisession--cached-value object) multisession--unbound)
        (let ((stored
               (car
                (sqlite-select
                 multisession--db
                 "select value, sequence from multisession where package = ? and key = ?"
                 id))))
          (if stored
              (let ((value (car (read-from-string (car stored)))))
                (setf (multisession--cached-value object) value
                      (multisession--cached-sequence object) (cadr stored))
                value)
            ;; Nothing; return the initial value.
            (multisession--initial-value object))))
       ;; We have a value, but we want to update in case some other
       ;; Emacs instance has updated.
       ((multisession--synchronized object)
        (let ((stored
               (car
                (sqlite-select
                 multisession--db
                 "select value, sequence from multisession where sequence > ? and package = ? and key = ?"
                 (cons (multisession--cached-sequence object) id)))))
          (if stored
              (let ((value (car (read-from-string (car stored)))))
                (setf (multisession--cached-value object) value
                      (multisession--cached-sequence object) (cadr stored))
                value)
            ;; Nothing, return the cached value.
            (multisession--cached-value object))))
       ;; Just return the cached value.
       (t
        (multisession--cached-value object))))))