diff --git a/client b/client index 4d45b25..8fc2b22 160000 --- a/client +++ b/client @@ -1 +1 @@ -Subproject commit 4d45b25c757d51f9f11a6fcf55d64171442346c1 +Subproject commit 8fc2b22baa16972fa4db23987a9c096266d957c3 diff --git a/common/proto/search.proto b/common/proto/search.proto index 37aafd2..f8f6d34 100644 --- a/common/proto/search.proto +++ b/common/proto/search.proto @@ -24,6 +24,7 @@ message SearchRequest { string free_query = 3; repeated ColumnConstraint must = 4; optional uint32 limit = 5; + optional uint32 offset = 6; } message SearchResponse { message Hit { diff --git a/common/src/proto/descriptor.bin b/common/src/proto/descriptor.bin index a930fce..af29160 100644 Binary files a/common/src/proto/descriptor.bin and b/common/src/proto/descriptor.bin differ diff --git a/common/src/proto/komp_ac.search.rs b/common/src/proto/komp_ac.search.rs index b6ada73..93cf50a 100644 --- a/common/src/proto/komp_ac.search.rs +++ b/common/src/proto/komp_ac.search.rs @@ -20,6 +20,8 @@ pub struct SearchRequest { pub must: ::prost::alloc::vec::Vec, #[prost(uint32, optional, tag = "5")] pub limit: ::core::option::Option, + #[prost(uint32, optional, tag = "6")] + pub offset: ::core::option::Option, } #[derive(Clone, PartialEq, ::prost::Message)] pub struct SearchResponse { diff --git a/search/src/lib.rs b/search/src/lib.rs index b93da0d..a5fbbea 100644 --- a/search/src/lib.rs +++ b/search/src/lib.rs @@ -19,7 +19,7 @@ use tonic::{Request, Response, Status}; use tracing::info; const INDEX_ROOT: &str = "./tantivy_indexes"; -const DEFAULT_RESULT_LIMIT: usize = 25; +const DEFAULT_RESULT_LIMIT: usize = 60; const HARD_RESULT_LIMIT: usize = 200; const DEFAULT_LIST_LIMIT: usize = 5; @@ -71,6 +71,7 @@ impl SearcherService { &normalized.profile_name, table_name, normalized.limit.unwrap_or(DEFAULT_LIST_LIMIT), + normalized.offset, ) .await?; return Ok(Response::new(SearchResponse { hits })); @@ -163,6 +164,7 @@ struct NormalizedSearchRequest { free_query: String, must: Vec, limit: Option, + offset: usize, } #[derive(Debug)] @@ -310,6 +312,7 @@ fn normalize_request(req: SearchRequest) -> Result Result Result, Status> { let physical_to_display = table_physical_to_display_map(pool, profile_name, table_name).await?; let sql = format!( - "SELECT id, to_jsonb(t) AS data FROM {} t WHERE deleted = FALSE ORDER BY id DESC LIMIT $1", + "SELECT id, to_jsonb(t) AS data FROM {} t WHERE deleted = FALSE ORDER BY id DESC LIMIT $1 OFFSET $2", qualify_profile_table(profile_name, table_name) ); let rows = sqlx::query(AssertSqlSafe(sql)) .bind(limit as i64) + .bind(offset as i64) .fetch_all(pool) .await .map_err(|e| Status::internal(format!("DB query for default results failed: {}", e)))?; diff --git a/server b/server index e290953..da3401c 160000 --- a/server +++ b/server @@ -1 +1 @@ -Subproject commit e2909537f5693574442914a9dd95d6372b891c86 +Subproject commit da3401c26bbed17c739f302434770a931313d459