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 let Some(last) = last {
|
||||||
if results.len() > last {
|
if results.len() > last {
|
||||||
has_previous_page = true;
|
has_previous_page = true;
|
||||||
// TODO: find better way to do this.
|
|
||||||
results.reverse();
|
|
||||||
results.truncate(last);
|
results.truncate(last);
|
||||||
results.reverse();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -325,10 +322,6 @@ impl QueryRoot {
|
|||||||
notmuch_offset = offset;
|
notmuch_offset = offset;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
info!(
|
|
||||||
"item: {} {}",
|
|
||||||
thread_summary.subject, thread_summary.timestamp
|
|
||||||
);
|
|
||||||
let cur = OpaqueCursor(SearchCursor {
|
let cur = OpaqueCursor(SearchCursor {
|
||||||
newsreader_offset,
|
newsreader_offset,
|
||||||
notmuch_offset,
|
notmuch_offset,
|
||||||
|
|||||||
@ -357,8 +357,8 @@ fn compute_offset_limit(
|
|||||||
// Reasonable defaults
|
// Reasonable defaults
|
||||||
(None, None, None, None) => (0, default_page_size),
|
(None, None, None, None) => (0, default_page_size),
|
||||||
(None, None, Some(first), None) => (0, first),
|
(None, None, Some(first), None) => (0, first),
|
||||||
(Some(after), None, None, None) => (after, default_page_size),
|
(Some(after), None, None, None) => (after + 1, default_page_size),
|
||||||
(Some(after), None, Some(first), None) => (after, first),
|
(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, None) => (0.max(before - default_page_size), default_page_size),
|
||||||
(None, Some(before), None, Some(last)) => (0.max(before - last), last),
|
(None, Some(before), None, Some(last)) => (0.max(before - last), last),
|
||||||
(None, None, None, Some(_)) => {
|
(None, None, None, Some(_)) => {
|
||||||
|
|||||||
@ -43,9 +43,13 @@ pub async fn search(
|
|||||||
query: &Query,
|
query: &Query,
|
||||||
) -> Result<Vec<(i32, ThreadSummary)>, async_graphql::Error> {
|
) -> Result<Vec<(i32, ThreadSummary)>, async_graphql::Error> {
|
||||||
info!("search({after:?} {before:?} {first:?} {last:?} {query:?}");
|
info!("search({after:?} {before:?} {first:?} {last:?} {query:?}");
|
||||||
let (offset, limit) = compute_offset_limit(after, before, first, last);
|
let (offset, mut limit) = compute_offset_limit(after, before, first, last);
|
||||||
// The +1 is to see if there are more pages of data available.
|
if before.is_none() {
|
||||||
let limit = limit + 1;
|
// 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}");
|
info!("search offset {offset} limit {limit}");
|
||||||
|
|
||||||
let rows = sqlx::query_file!(
|
let rows = sqlx::query_file!(
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user