server: fix paging bug where p1->p2->p1 wouldn't show consistent results
This commit is contained in:
parent
474cf38180
commit
7c5ef96ff0
@ -302,10 +302,7 @@ impl QueryRoot {
|
||||
if let Some(last) = last {
|
||||
if results.len() > last {
|
||||
has_previous_page = true;
|
||||
// TODO: find better way to do this.
|
||||
results.reverse();
|
||||
results.truncate(last);
|
||||
results.reverse();
|
||||
}
|
||||
}
|
||||
|
||||
@ -325,10 +322,6 @@ impl QueryRoot {
|
||||
notmuch_offset = offset;
|
||||
}
|
||||
}
|
||||
info!(
|
||||
"item: {} {}",
|
||||
thread_summary.subject, thread_summary.timestamp
|
||||
);
|
||||
let cur = OpaqueCursor(SearchCursor {
|
||||
newsreader_offset,
|
||||
notmuch_offset,
|
||||
|
||||
@ -357,8 +357,8 @@ fn compute_offset_limit(
|
||||
// Reasonable defaults
|
||||
(None, None, None, None) => (0, default_page_size),
|
||||
(None, None, Some(first), None) => (0, first),
|
||||
(Some(after), None, None, None) => (after, default_page_size),
|
||||
(Some(after), None, Some(first), None) => (after, first),
|
||||
(Some(after), None, None, None) => (after + 1, default_page_size),
|
||||
(Some(after), None, Some(first), None) => (after + 1, first),
|
||||
(None, Some(before), None, None) => (0.max(before - default_page_size), default_page_size),
|
||||
(None, Some(before), None, Some(last)) => (0.max(before - last), last),
|
||||
(None, None, None, Some(_)) => {
|
||||
|
||||
@ -43,9 +43,13 @@ pub async fn search(
|
||||
query: &Query,
|
||||
) -> Result<Vec<(i32, ThreadSummary)>, async_graphql::Error> {
|
||||
info!("search({after:?} {before:?} {first:?} {last:?} {query:?}");
|
||||
let (offset, limit) = compute_offset_limit(after, before, first, last);
|
||||
// The +1 is to see if there are more pages of data available.
|
||||
let limit = limit + 1;
|
||||
let (offset, mut limit) = compute_offset_limit(after, before, first, last);
|
||||
if before.is_none() {
|
||||
// When searching forward, the +1 is to see if there are more pages of data available.
|
||||
// Searching backwards implies there's more pages forward, because the value represented by
|
||||
// `before` is on the next page.
|
||||
limit = limit + 1;
|
||||
}
|
||||
info!("search offset {offset} limit {limit}");
|
||||
|
||||
let rows = sqlx::query_file!(
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user