From 858f531d96e85f07cc9b756aad8af20a4efd15d2 Mon Sep 17 00:00:00 2001 From: Jethro Kuan Date: Sat, 21 Aug 2021 16:18:41 +0800 Subject: [PATCH] (feat)buffer: optimize reflinks fetch (#1795) Use SQL join instead of iterating over each ref and running another sql query. --- CHANGELOG.md | 8 ++++++++ org-roam-mode.el | 26 ++++++++++++-------------- 2 files changed, 20 insertions(+), 14 deletions(-) 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)