diff --git a/rslib/src/search/parser.rs b/rslib/src/search/parser.rs index 492c88d93..93df4ea08 100644 --- a/rslib/src/search/parser.rs +++ b/rslib/src/search/parser.rs @@ -61,10 +61,11 @@ pub enum SearchNode { EditedInDays(u32), CardTemplate(TemplateKind), Deck(String), - /// Matches cards in a list of decks (original_deck_id is not checked). + /// Matches cards in a list of deck ids. Cards are matched even if they are + /// in a filtered deck. DeckIdsWithoutChildren(String), /// Matches cards in a deck or its children (original_deck_id is not - /// checked). + /// checked, so filtered cards are not matched). DeckIdWithChildren(DeckId), IntroducedInDays(u32), NotetypeId(NotetypeId), diff --git a/rslib/src/search/sqlwriter.rs b/rslib/src/search/sqlwriter.rs index 20930b2f5..97a6a29a3 100644 --- a/rslib/src/search/sqlwriter.rs +++ b/rslib/src/search/sqlwriter.rs @@ -161,7 +161,12 @@ impl SqlWriter<'_> { write!(self.sql, "n.mid = {}", ntid).unwrap(); } SearchNode::DeckIdsWithoutChildren(dids) => { - write!(self.sql, "c.did in ({})", dids).unwrap(); + write!( + self.sql, + "c.did in ({}) or (c.odid != 0 and c.odid in ({}))", + dids, dids + ) + .unwrap(); } SearchNode::DeckIdWithChildren(did) => self.write_deck_id_with_children(*did)?, SearchNode::Notetype(notetype) => self.write_notetype(&norm(notetype)),