Extends the SearchNode interface to support field and unqualified searches (#1821)

* Add field search option to SearchNode

* Add unqualified/literal search option to SearchNode

* Rename text to literal_text

* Interpret field name parameter literally
This commit is contained in:
Abdo 2022-04-28 07:09:51 +03:00 committed by GitHub
parent 27f2e39ff9
commit a3d9a25d18
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 18 additions and 1 deletions

View file

@ -68,6 +68,12 @@ message SearchNode {
repeated SearchNode nodes = 1; repeated SearchNode nodes = 1;
Joiner joiner = 2; Joiner joiner = 2;
} }
message Field {
string field_name = 1;
string text = 2;
bool is_re = 3;
}
oneof filter { oneof filter {
Group group = 1; Group group = 1;
SearchNode negated = 2; SearchNode negated = 2;
@ -88,6 +94,8 @@ message SearchNode {
string tag = 17; string tag = 17;
string note = 18; string note = 18;
uint32 introduced_in_days = 19; uint32 introduced_in_days = 19;
Field field = 20;
string literal_text = 21;
} }
} }

View file

@ -9,7 +9,7 @@ use crate::{
search::{ search::{
parse_search, Negated, Node, PropertyKind, RatingKind, SearchNode, StateKind, TemplateKind, parse_search, Negated, Node, PropertyKind, RatingKind, SearchNode, StateKind, TemplateKind,
}, },
text::escape_anki_wildcards_for_search_node, text::{escape_anki_wildcards, escape_anki_wildcards_for_search_node},
}; };
impl TryFrom<pb::SearchNode> for Node { impl TryFrom<pb::SearchNode> for Node {
@ -98,6 +98,15 @@ impl TryFrom<pb::SearchNode> for Node {
Node::Group(nodes) Node::Group(nodes)
} }
} }
Filter::Field(field) => Node::Search(SearchNode::SingleField {
field: escape_anki_wildcards(&field.field_name),
text: escape_anki_wildcards(&field.text),
is_re: field.is_re,
}),
Filter::LiteralText(text) => {
let text = escape_anki_wildcards(&text);
Node::Search(SearchNode::UnqualifiedText(text))
}
} }
} else { } else {
Node::Search(SearchNode::WholeCollection) Node::Search(SearchNode::WholeCollection)