From 9214c4a700bbcd2606d7af5f0d671fba76ce0752 Mon Sep 17 00:00:00 2001 From: Damien Elmes Date: Thu, 3 Sep 2020 16:43:22 +1000 Subject: [PATCH] support did:[deck id] search --- rslib/src/search/parser.rs | 3 +++ rslib/src/search/sqlwriter.rs | 4 ++++ 2 files changed, 7 insertions(+) diff --git a/rslib/src/search/parser.rs b/rslib/src/search/parser.rs index 70e33f08d..6d3cd038c 100644 --- a/rslib/src/search/parser.rs +++ b/rslib/src/search/parser.rs @@ -2,6 +2,7 @@ // License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html use crate::{ + decks::DeckID, err::{AnkiError, Result}, notetype::NoteTypeID, }; @@ -64,6 +65,7 @@ pub(super) enum SearchNode<'a> { EditedInDays(u32), CardTemplate(TemplateKind), Deck(Cow<'a, str>), + DeckID(DeckID), NoteTypeID(NoteTypeID), NoteType(Cow<'a, str>), Rated { @@ -283,6 +285,7 @@ fn search_node_for_text_with_argument<'a>( "mid" => SearchNode::NoteTypeID(val.parse()?), "nid" => SearchNode::NoteIDs(check_id_list(val)?), "cid" => SearchNode::CardIDs(check_id_list(val)?), + "did" => SearchNode::DeckID(val.parse()?), "card" => parse_template(val.as_ref()), "is" => parse_state(val.as_ref())?, "flag" => parse_flag(val.as_ref())?, diff --git a/rslib/src/search/sqlwriter.rs b/rslib/src/search/sqlwriter.rs index 385fe71f8..c57b55081 100644 --- a/rslib/src/search/sqlwriter.rs +++ b/rslib/src/search/sqlwriter.rs @@ -140,6 +140,9 @@ impl SqlWriter<'_> { SearchNode::NoteTypeID(ntid) => { write!(self.sql, "n.mid = {}", ntid).unwrap(); } + SearchNode::DeckID(did) => { + write!(self.sql, "c.did = {}", did).unwrap(); + } SearchNode::NoteType(notetype) => self.write_note_type(&norm(notetype))?, SearchNode::Rated { days, ease } => self.write_rated(*days, *ease)?, SearchNode::Tag(tag) => self.write_tag(&norm(tag))?, @@ -505,6 +508,7 @@ impl SearchNode<'_> { match self { SearchNode::AddedInDays(_) => RequiredTable::Cards, SearchNode::Deck(_) => RequiredTable::Cards, + SearchNode::DeckID(_) => RequiredTable::Cards, SearchNode::Rated { .. } => RequiredTable::Cards, SearchNode::State(_) => RequiredTable::Cards, SearchNode::Flag(_) => RequiredTable::Cards,