pub struct TagsMap { /* private fields */ }Expand description
Collection of tags from Bear’s database.
This is a map of tag IDs to tags, returned by BearDb::tags().
It provides convenient methods for looking up tags and converting
tag ID sets into tag names.
§Example
let db = BearDb::new()?;
let tags = db.tags()?;
println!("Total tags: {}", tags.count());
for tag in tags.iter() {
if let Some(name) = tag.name() {
println!("Tag: {}", name);
}
}Implementations§
Source§impl TagsMap
impl TagsMap
Sourcepub fn count(&self) -> usize
pub fn count(&self) -> usize
Returns the number of tags.
Examples found in repository?
examples/query_demo.rs (line 10)
3fn main() -> Result<(), BearError> {
4 let db = BearDb::new()?;
5
6 // Example 1: Using typed API
7 println!("=== Typed API Examples ===\n");
8
9 let tags = db.tags()?;
10 println!("Total tags: {}\n", tags.count());
11
12 // Using the new NotesQuery API - much more readable!
13 db.notes(NotesQuery::default())?
14 .into_iter()
15 .for_each(|note| {
16 println!("Note: {:?}", note.title());
17 db.note_links(note.id())
18 .unwrap()
19 .into_iter()
20 .for_each(|link| println!(" Linked: {:?}", link.title()));
21
22 let note_tags = db.note_tags(note.id()).unwrap();
23 println!(" Tags: {:?}\n", tags.names(¬e_tags));
24 });
25
26 // Example 2: Using generic SQL query API with DataFrames
27 println!("\n=== Generic SQL Query API Examples ===\n");
28
29 // Simple query
30 println!("Top 5 most recent notes:");
31 let df = db
32 .query("SELECT title, created FROM notes WHERE is_trashed = 0 ORDER BY created DESC LIMIT 5")?;
33 println!("{}\n", df);
34
35 // Join query
36 println!("Notes with their tags:");
37 let df = db.query(
38 r"
39 SELECT n.title, t.name as tag_name
40 FROM notes n
41 JOIN note_tags nt ON n.id = nt.note_id
42 JOIN tags t ON nt.tag_id = t.id
43 WHERE n.is_trashed = 0
44 ORDER BY n.modified DESC
45 LIMIT 10
46 ",
47 )?;
48 println!("{}\n", df);
49
50 // Aggregation query
51 println!("Tag usage statistics:");
52 let df = db.query(
53 r"
54 SELECT t.name, COUNT(*) as note_count
55 FROM tags t
56 JOIN note_tags nt ON t.id = nt.tag_id
57 GROUP BY t.id, t.name
58 ORDER BY note_count DESC
59 LIMIT 10
60 ",
61 )?;
62 println!("{}\n", df);
63
64 Ok(())
65}Sourcepub fn names(&self, tag_ids: &HashSet<TagId>) -> HashSet<String>
pub fn names(&self, tag_ids: &HashSet<TagId>) -> HashSet<String>
Returns the names of the tags with the given IDs.
Tags with NULL names are omitted from the result.
Examples found in repository?
examples/query_demo.rs (line 23)
3fn main() -> Result<(), BearError> {
4 let db = BearDb::new()?;
5
6 // Example 1: Using typed API
7 println!("=== Typed API Examples ===\n");
8
9 let tags = db.tags()?;
10 println!("Total tags: {}\n", tags.count());
11
12 // Using the new NotesQuery API - much more readable!
13 db.notes(NotesQuery::default())?
14 .into_iter()
15 .for_each(|note| {
16 println!("Note: {:?}", note.title());
17 db.note_links(note.id())
18 .unwrap()
19 .into_iter()
20 .for_each(|link| println!(" Linked: {:?}", link.title()));
21
22 let note_tags = db.note_tags(note.id()).unwrap();
23 println!(" Tags: {:?}\n", tags.names(¬e_tags));
24 });
25
26 // Example 2: Using generic SQL query API with DataFrames
27 println!("\n=== Generic SQL Query API Examples ===\n");
28
29 // Simple query
30 println!("Top 5 most recent notes:");
31 let df = db
32 .query("SELECT title, created FROM notes WHERE is_trashed = 0 ORDER BY created DESC LIMIT 5")?;
33 println!("{}\n", df);
34
35 // Join query
36 println!("Notes with their tags:");
37 let df = db.query(
38 r"
39 SELECT n.title, t.name as tag_name
40 FROM notes n
41 JOIN note_tags nt ON n.id = nt.note_id
42 JOIN tags t ON nt.tag_id = t.id
43 WHERE n.is_trashed = 0
44 ORDER BY n.modified DESC
45 LIMIT 10
46 ",
47 )?;
48 println!("{}\n", df);
49
50 // Aggregation query
51 println!("Tag usage statistics:");
52 let df = db.query(
53 r"
54 SELECT t.name, COUNT(*) as note_count
55 FROM tags t
56 JOIN note_tags nt ON t.id = nt.tag_id
57 GROUP BY t.id, t.name
58 ORDER BY note_count DESC
59 LIMIT 10
60 ",
61 )?;
62 println!("{}\n", df);
63
64 Ok(())
65}Trait Implementations§
Auto Trait Implementations§
impl Freeze for TagsMap
impl RefUnwindSafe for TagsMap
impl Send for TagsMap
impl Sync for TagsMap
impl Unpin for TagsMap
impl UnwindSafe for TagsMap
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more