diff --git a/CHANGELOG.md b/CHANGELOG.md index 2eff2e3..5c1a1dc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## TBD +### Added +### Removed +### Changed +- [#1795](https://github.com/org-roam/org-roam/pull/1795) buffer: optimized reflinks fetch + +### Fixed + ## 2.1.0 ### Added - [#1709](https://github.com/org-roam/org-roam/pull/1709) added ability to specify default value in org-roam capture templates diff --git a/org-roam-mode.el b/org-roam-mode.el index 3f37a90..7cd2883 100644 --- a/org-roam-mode.el +++ b/org-roam-mode.el @@ -542,22 +542,20 @@ Sorts by title." (defun org-roam-reflinks-get (node) "Return the reflinks for NODE." - (let ((refs (org-roam-db-query [:select [ref] :from refs - :where (= node-id $s1)] + (let ((refs (org-roam-db-query [:select :distinct [refs:ref links:source links:pos links:properties] + :from refs + :left-join links + :where (= refs:node-id $s1) + :and (= links:dest refs:ref)] (org-roam-node-id node))) links) - (pcase-dolist (`(,ref) refs) - (pcase-dolist (`(,source-id ,pos ,properties) (org-roam-db-query - [:select [source pos properties] - :from links - :where (= dest $s1)] - ref)) - (push (org-roam-populate - (org-roam-reflink-create - :source-node (org-roam-node-create :id source-id) - :ref ref - :point pos - :properties properties)) links))) + (pcase-dolist (`(,ref ,source-id ,pos ,properties) refs) + (push (org-roam-populate + (org-roam-reflink-create + :source-node (org-roam-node-create :id source-id) + :ref ref + :point pos + :properties properties)) links)) links)) (defun org-roam-reflinks-sort (a b)