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 (quote files))) OBJECT) in `multisession.el'.

Undocumented

(multisession-backend-value (TYPE (eql (quote 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)
  (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)))))