From 8c0622fa2c8743995f4a4051d3a415f9bea0831a Mon Sep 17 00:00:00 2001 From: Will Jones Date: Thu, 24 Apr 2025 15:04:06 -0700 Subject: [PATCH] fix: remote limit to avoid "Limit must be non-negative" (#2354) To workaround this issue: https://github.com/lancedb/lancedb/issues/2211 ## Summary by CodeRabbit - **Bug Fixes** - Improved handling of large query parameters to prevent potential overflow issues when using the "k" parameter in queries. --- Cargo.lock | 8 ++++---- rust/lancedb/src/remote/table.rs | 5 +++-- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 2f9d326c8..0720016aa 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4136,7 +4136,7 @@ dependencies = [ [[package]] name = "lancedb" -version = "0.19.0-beta.9" +version = "0.19.0-beta.10" dependencies = [ "arrow", "arrow-array", @@ -4223,7 +4223,7 @@ dependencies = [ [[package]] name = "lancedb-node" -version = "0.19.0-beta.9" +version = "0.19.0-beta.10" dependencies = [ "arrow-array", "arrow-ipc", @@ -4248,7 +4248,7 @@ dependencies = [ [[package]] name = "lancedb-nodejs" -version = "0.19.0-beta.9" +version = "0.19.0-beta.10" dependencies = [ "arrow-array", "arrow-ipc", @@ -4266,7 +4266,7 @@ dependencies = [ [[package]] name = "lancedb-python" -version = "0.22.0-beta.9" +version = "0.22.0-beta.10" dependencies = [ "arrow", "env_logger", diff --git a/rust/lancedb/src/remote/table.rs b/rust/lancedb/src/remote/table.rs index 46d2422b2..ba7662e55 100644 --- a/rust/lancedb/src/remote/table.rs +++ b/rust/lancedb/src/remote/table.rs @@ -224,7 +224,8 @@ impl RemoteTable { } // Server requires k. - let limit = params.limit.unwrap_or(usize::MAX); + // use isize::MAX as usize to avoid overflow: https://github.com/lancedb/lancedb/issues/2211 + let limit = params.limit.unwrap_or(isize::MAX as usize); body["k"] = serde_json::Value::Number(serde_json::Number::from(limit)); if let Some(filter) = ¶ms.filter { @@ -1616,7 +1617,7 @@ mod tests { let body = request.body().unwrap().as_bytes().unwrap(); let body: serde_json::Value = serde_json::from_slice(body).unwrap(); let expected_body = serde_json::json!({ - "k": usize::MAX, + "k": isize::MAX as usize, "prefilter": true, "vector": [], // Empty vector means no vector query. "version": null,