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;
Joiner joiner = 2;
}
message Field {
string field_name = 1;
string text = 2;
bool is_re = 3;
}
oneof filter {
Group group = 1;
SearchNode negated = 2;
@ -88,6 +94,8 @@ message SearchNode {
string tag = 17;
string note = 18;
uint32 introduced_in_days = 19;
Field field = 20;
string literal_text = 21;
}
}

View file

@ -9,7 +9,7 @@ use crate::{
search::{
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 {
@ -98,6 +98,15 @@ impl TryFrom<pb::SearchNode> for Node {
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 {
Node::Search(SearchNode::WholeCollection)