Closed dmitrym0 closed 1 year ago
Hello @dmitrym0,
There are two helper functions that allow to query by cross-links: vulpea-db-query-by-links-some
and vulpea-db-query-by-links-every
. Both of them take a list of links and return either 'union' or 'intersection' respectively.
So if you want to find all notes that contain links to both books
and 2022
notes then use vulpea-db-query-by-links-every
:
(vulpea-db-query-by-links-every
'(("id" . "D67FF1DE-AD9E-4DEB-846B-C36BF011D443")
("id" . "6DB243A1-031D-4447-8C3F-70615A2237DB")))
And you are right that you can use vulpea-db-query
as it's the most powerful function in terms of 'querying' on the Emacs Lisp level. Specialized functions (like vulpea-db-query-by-links-every
) exist for performance reasons as they are optimized for querying by specific slots. There is some information here - https://d12frosted.io/posts/2022-07-14-vulpea-0.3.html.
;; slower than `vulpea-db-query-by-links-every' as `vulpea-db-query' reads ALL entries.
;; on smaller notes set the difference might be neglectable
;; p.s. it would be nice if `vulpea' provided functions like `vulpea-note-tagged-all-p` for links.
(vulpea-db-query
(lambda (note)
(let ((links (vulpea-note-links note)))
(and (seq-contains-p links '("id" . "D67FF1DE-AD9E-4DEB-846B-C36BF011D443"))
(seq-contains-p links '("id" . "6DB243A1-031D-4447-8C3F-70615A2237DB"))))))
Hope that helps :)
Wonderful, thank you!
Your version is significantly faster.
Hello @d12frosted
I'm curious if there's a better way to do this, I suspect
vulpea-db-query
can do it but I can't quite wrap my head around it.Every time I read a book, I insert a link to the year (
2022
note) and the books note (books
). I want to see all the book I've read in 2022.This is what I came up with, is there a better way via
vulpea-db-query
?