diff --git a/src/quotes/mod.rs b/src/quotes/mod.rs index 234286d..4c0fc72 100644 --- a/src/quotes/mod.rs +++ b/src/quotes/mod.rs @@ -174,6 +174,18 @@ impl Quote { Ok(quotes) } + pub async fn search_query_count( + conn: &mut PgConnection, + query: &str, + ) -> Result { + let count: i64 = + sqlx::query_scalar("SELECT COUNT(*) FROM quotes WHERE fts ILIKE '%' || $1 || '%'") + .bind(query) + .fetch_one(&mut *conn) + .await?; + Ok(count) + } + pub async fn get_by_search_query( conn: &mut PgConnection, query: &str, diff --git a/src/web/pages/quotes.rs b/src/web/pages/quotes.rs index 861d661..b94c7a2 100644 --- a/src/web/pages/quotes.rs +++ b/src/web/pages/quotes.rs @@ -45,7 +45,10 @@ pub async fn page( "" => Quote::get_chronological_offset(&mut *conn, offset, per_page).await?, _ => Quote::get_by_search_query(&mut *conn, search, offset, per_page).await?, }; - let total_quotes = Quote::total_count(&mut *conn).await?; + let total_quotes = match search { + "" => Quote::total_count(&mut *conn).await?, + _ => Quote::search_query_count(&mut *conn, search).await?, + }; let total_pages = (total_quotes as f64 / per_page as f64).ceil() as i64; let s_qs = if search.is_empty() {