allow filtering on empty tag values

This commit is contained in:
Doug Hoyte
2023-06-06 15:33:03 -04:00
parent 9a65b1c757
commit e13275d07c

View File

@ -49,8 +49,6 @@ struct FilterSetBytes {
} }
bool doesMatch(std::string_view candidate) const { bool doesMatch(std::string_view candidate) const {
if (candidate.size() == 0) throw herr("invalid candidate");
// Binary search for upper-bound: https://en.cppreference.com/w/cpp/algorithm/upper_bound // Binary search for upper-bound: https://en.cppreference.com/w/cpp/algorithm/upper_bound
ssize_t first = 0, last = items.size(), curr; ssize_t first = 0, last = items.size(), curr;
@ -61,7 +59,7 @@ struct FilterSetBytes {
step = count / 2; step = count / 2;
curr += step; curr += step;
bool comp = (uint8_t)candidate[0] != items[curr].firstByte bool comp = (candidate.size() && items[curr].size && (uint8_t)candidate[0] != items[curr].firstByte)
? (uint8_t)candidate[0] < items[curr].firstByte ? (uint8_t)candidate[0] < items[curr].firstByte
: candidate < std::string_view(buf.data() + items[curr].offset, items[curr].size); : candidate < std::string_view(buf.data() + items[curr].offset, items[curr].size);
@ -145,7 +143,7 @@ struct NostrFilter {
if (tag == 'p' || tag == 'e') { if (tag == 'p' || tag == 'e') {
tags.emplace(tag, FilterSetBytes(v, true, 32, 32)); tags.emplace(tag, FilterSetBytes(v, true, 32, 32));
} else { } else {
tags.emplace(tag, FilterSetBytes(v, false, 1, MAX_INDEXED_TAG_VAL_SIZE)); tags.emplace(tag, FilterSetBytes(v, false, 0, MAX_INDEXED_TAG_VAL_SIZE));
} }
} else { } else {
throw herr("unindexed tag filter"); throw herr("unindexed tag filter");