diff --git a/python/src/table.rs b/python/src/table.rs index bfb38a3ab..dc5f5ec0c 100644 --- a/python/src/table.rs +++ b/python/src/table.rs @@ -21,7 +21,7 @@ use lancedb::table::{ }; use pyo3::{ Bound, FromPyObject, Py, PyAny, PyRef, PyResult, Python, - exceptions::{PyKeyError, PyRuntimeError, PyValueError}, + exceptions::{PyRuntimeError, PyValueError}, pyclass, pymethods, types::{IntoPyDict, PyAnyMethods, PyDict, PyDictMethods}, }; @@ -1118,34 +1118,20 @@ impl Table { }) } - #[allow(deprecated)] pub fn replace_field_metadata<'a>( self_: PyRef<'a, Self>, field_name: String, metadata: &Bound<'_, PyDict>, ) -> PyResult> { - let mut new_metadata = HashMap::::new(); - for (column_name, value) in metadata.into_iter() { - let key: String = column_name.extract()?; - let value: String = value.extract()?; - new_metadata.insert(key, value); + // Deprecated: forwards to the update_field_metadata path (replace mode). + let mut update = FieldMetadataUpdate::new(field_name).replace(); + for (key, value) in metadata.into_iter() { + update = update.set(key.extract::()?, value.extract::()?); } let inner = self_.inner_ref()?.clone(); future_into_py(self_.py(), async move { - let native_tbl = inner - .as_native() - .ok_or_else(|| PyValueError::new_err("This cannot be run on a remote table"))?; - let schema = native_tbl.manifest().await.infer_error()?.schema; - let field = schema - .field(&field_name) - .ok_or_else(|| PyKeyError::new_err(format!("Field {} not found", field_name)))?; - - native_tbl - .replace_field_metadata(vec![(field.id as u32, new_metadata)]) - .await - .infer_error()?; - + inner.update_field_metadata(&[update]).await.infer_error()?; Ok(()) }) } diff --git a/rust/lancedb/src/table.rs b/rust/lancedb/src/table.rs index bb224dd8c..355483f0c 100644 --- a/rust/lancedb/src/table.rs +++ b/rust/lancedb/src/table.rs @@ -3168,7 +3168,6 @@ pub struct FragmentSummaryStats { #[cfg(test)] #[allow(deprecated)] mod tests { - use std::collections::HashMap; use std::sync::Arc; use std::sync::atomic::{AtomicBool, Ordering}; use std::time::Duration; @@ -4481,11 +4480,10 @@ mod tests { Some(&"test_val2_update".to_string()) ); - let mut new_field_metadata = HashMap::::new(); - new_field_metadata.insert("test_field_key1".into(), "test_field_val1".into()); - #[allow(deprecated)] native_tbl - .replace_field_metadata(vec![(field.id as u32, new_field_metadata)]) + .update_field_metadata(&[ + FieldMetadataUpdate::new("i").set("test_field_key1", "test_field_val1") + ]) .await .unwrap();