Function: closql-dref

closql-dref is a byte-compiled function defined in closql.el.

Signature

(closql-dref OBJ SLOT)

Implementations

(closql-dref (OBJ forge-pullreq) (_ (eql marks))) in `forge-pullreq.el'.

Undocumented

(closql-dref (OBJ forge-pullreq) (_ (eql review-requests))) in `forge-pullreq.el'.

Undocumented

(closql-dref (OBJ forge-pullreq) (_ (eql labels))) in `forge-pullreq.el'.

Undocumented

(closql-dref (OBJ forge-pullreq) (_ (eql assignees))) in `forge-pullreq.el'.

Undocumented

(closql-dref (OBJ forge-issue) (_ (eql marks))) in `forge-issue.el'.

Undocumented

(closql-dref (OBJ forge-issue) (_ (eql labels))) in `forge-issue.el'.

Undocumented

(closql-dref (OBJ forge-issue) (_ (eql assignees))) in `forge-issue.el'.

Undocumented

(closql-dref OBJ SLOT) in `closql.el'.

Undocumented

Source Code

;; Defined in ~/.emacs.d/elpa/closql-20260101.1828/closql.el
(cl-defgeneric closql-dref (obj slot)
  (let ((c (eieio--slot-name-index (eieio--object-class obj) slot))
        (db (closql--oref obj 'closql-database))
        (props (closql--slot-properties obj slot)))
    (cond-let
      ([class (alist-get :closql-class props)]
       (aset obj c
             (closql--remake-instances class db
               (emacsql
                db `[:select * :from $i1
                     :where (= $i2 $s3)
                     :order-by ,(or (closql--oref-default class 'closql-order-by)
                                    [(asc $i4)])]
                (closql--oref-default class 'closql-table)
                (closql--oref-default class 'closql-foreign-key)
                (closql--oref obj (closql--oref-default obj 'closql-primary-key))
                (closql--oref-default class 'closql-primary-key)))))
      ([table (alist-get :closql-table props)]
       (let ((columns (closql--table-columns db table)))
         (aset obj c
               (mapcar
                (if (length= columns 2) #'cadr #'cdr)
                (emacsql
                 db [:select * :from $i1
                     :where (= $i2 $s3)
                     :order-by [(asc $i4)]]
                 table
                 (car columns)
                 (closql--oref obj (closql--oref-default obj 'closql-primary-key))
                 (cadr columns))))))
      ([tables (alist-get :closql-tables props)]
       (pcase-let ((`(,slot-table ,data-table) tables))
         (aset obj c
               (mapcar
                #'cdr
                (emacsql
                 db [:select $i1 :from $i2
                     :join $i3 :on (= $i4 $i5)
                     :where (= $i6 $s7)
                     :order-by [(asc id)]]
                 (intern (format "%s:*" data-table))
                 data-table slot-table
                 (intern (format "%s:id" slot-table))
                 (intern (format "%s:id" data-table))
                 (intern (format "%s:%s" slot-table
                                 (closql--oref-default obj 'closql-table)))
                 (closql--oref obj (closql--oref-default obj 'closql-primary-key))
                 (closql--oref obj 'id))))))
      ((slot-unbound obj (eieio--object-class obj) slot 'oref)))))