mirror of
https://github.com/mikedilger/chorus.git
synced 2026-08-31 07:31:01 +00:00
Use tc_index and ac_index
This commit is contained in:
parent
6d9868d745
commit
32699d9b2a
@ -458,7 +458,6 @@ impl Store {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if filter.num_kinds() > 0 && !filter.tags()?.is_empty() {
|
} else if filter.num_kinds() > 0 && !filter.tags()?.is_empty() {
|
||||||
// SKIP
|
|
||||||
// We may bring since forward if we hit the limit without going back that
|
// We may bring since forward if we hit the limit without going back that
|
||||||
// far, so we use a mutable since:
|
// far, so we use a mutable since:
|
||||||
let mut since = filter.since();
|
let mut since = filter.since();
|
||||||
@ -525,6 +524,105 @@ impl Store {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else if !filter.tags()?.is_empty() {
|
||||||
|
// We may bring since forward if we hit the limit without going back that
|
||||||
|
// far, so we use a mutable since:
|
||||||
|
let mut since = filter.since();
|
||||||
|
|
||||||
|
let tags = filter.tags()?;
|
||||||
|
for mut tag in tags.iter() {
|
||||||
|
if let Some(tag0) = tag.next() {
|
||||||
|
if let Some(tagvalue) = tag.next() {
|
||||||
|
let iter = {
|
||||||
|
let start_prefix = Self::key_tc_index(
|
||||||
|
tag0[0],
|
||||||
|
tagvalue,
|
||||||
|
filter.until(), // scan goes backwards in time
|
||||||
|
Id([0; 32]),
|
||||||
|
);
|
||||||
|
let end_prefix =
|
||||||
|
Self::key_tc_index(tag0[0], tagvalue, since, Id([255; 32]));
|
||||||
|
let range = (
|
||||||
|
Bound::Included(&*start_prefix),
|
||||||
|
Bound::Excluded(&*end_prefix),
|
||||||
|
);
|
||||||
|
self.tc_index.range(&txn, &range)?
|
||||||
|
};
|
||||||
|
|
||||||
|
let mut rangecount = 0;
|
||||||
|
|
||||||
|
'per_event: for result in iter {
|
||||||
|
let (_key, offset) = result?;
|
||||||
|
if let Some(event) = self.events.get_event_by_offset(offset)? {
|
||||||
|
if event.created_at() < since {
|
||||||
|
break 'per_event;
|
||||||
|
}
|
||||||
|
|
||||||
|
// check against the rest of the filter
|
||||||
|
if filter.event_matches(&event)? && screen(&event) {
|
||||||
|
// Accept the event
|
||||||
|
output.insert(event);
|
||||||
|
rangecount += 1;
|
||||||
|
|
||||||
|
// Stop this limited
|
||||||
|
if rangecount >= filter.limit() as usize {
|
||||||
|
if event.created_at() > since {
|
||||||
|
since = event.created_at();
|
||||||
|
}
|
||||||
|
break 'per_event;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if filter.num_authors() > 0 {
|
||||||
|
// We may bring since forward if we hit the limit without going back that
|
||||||
|
// far, so we use a mutable since:
|
||||||
|
let mut since = filter.since();
|
||||||
|
|
||||||
|
for author in filter.authors() {
|
||||||
|
let iter = {
|
||||||
|
let start_prefix = Self::key_ac_index(
|
||||||
|
author,
|
||||||
|
filter.until(), // scan goes backwards in time
|
||||||
|
Id([0; 32]),
|
||||||
|
);
|
||||||
|
let end_prefix = Self::key_ac_index(author, since, Id([255; 32]));
|
||||||
|
let range = (
|
||||||
|
Bound::Included(&*start_prefix),
|
||||||
|
Bound::Excluded(&*end_prefix),
|
||||||
|
);
|
||||||
|
self.ac_index.range(&txn, &range)?
|
||||||
|
};
|
||||||
|
|
||||||
|
let mut rangecount = 0;
|
||||||
|
|
||||||
|
'per_event: for result in iter {
|
||||||
|
let (_key, offset) = result?;
|
||||||
|
if let Some(event) = self.events.get_event_by_offset(offset)? {
|
||||||
|
if event.created_at() < filter.since() {
|
||||||
|
break 'per_event;
|
||||||
|
}
|
||||||
|
|
||||||
|
// check against the rest of the filter
|
||||||
|
if filter.event_matches(&event)? && screen(&event) {
|
||||||
|
// Accept the event
|
||||||
|
output.insert(event);
|
||||||
|
rangecount += 1;
|
||||||
|
|
||||||
|
// Stop this limited
|
||||||
|
if rangecount >= filter.limit() as usize {
|
||||||
|
if event.created_at() > since {
|
||||||
|
since = event.created_at();
|
||||||
|
}
|
||||||
|
break 'per_event;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
// SCRAPE:
|
// SCRAPE:
|
||||||
let maxtime = filter.until().0.min(Time::now().0);
|
let maxtime = filter.until().0.min(Time::now().0);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user