From 63db51c90d0f516ea69ae5b2c76acf811b7bc8fd Mon Sep 17 00:00:00 2001 From: QianZhu Date: Wed, 20 Mar 2024 21:01:05 -0700 Subject: [PATCH] better error msg for query vector with wrong dim (#1140) --- rust/lancedb/src/table.rs | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/rust/lancedb/src/table.rs b/rust/lancedb/src/table.rs index 252267ef..2848cf41 100644 --- a/rust/lancedb/src/table.rs +++ b/rust/lancedb/src/table.rs @@ -1185,15 +1185,26 @@ impl NativeTable { let field = ds_ref.schema().field(&column).ok_or(Error::Schema { message: format!("Column {} not found in dataset schema", column), })?; - if !matches!(field.data_type(), arrow_schema::DataType::FixedSizeList(f, dim) if f.data_type().is_floating() && dim == query_vector.len() as i32) - { - return Err(Error::Schema { - message: format!( - "Vector column '{}' does not match the dimension of the query vector: dim={}", - column, - query_vector.len(), - ), - }); + if let arrow_schema::DataType::FixedSizeList(f, dim) = field.data_type() { + if !f.data_type().is_floating() { + return Err(Error::InvalidInput { + message: format!( + "The data type of the vector column '{}' is not a floating point type", + column + ), + }); + } + if dim != query_vector.len() as i32 { + return Err(Error::InvalidInput { + message: format!( + "The dimension of the query vector does not match with the dimension of the vector column '{}': + query dim={}, expected vector dim={}", + column, + query_vector.len(), + dim, + ), + }); + } } let query_vector = query_vector.as_primitive::(); scanner.nearest(