diff --git a/python/python/tests/test_db.py b/python/python/tests/test_db.py index 591b3c72..d9c7f53e 100644 --- a/python/python/tests/test_db.py +++ b/python/python/tests/test_db.py @@ -552,6 +552,12 @@ async def test_create_in_v2_mode(tmp_path): assert await is_in_v2_mode(tbl) + # Create empty table uses v1 mode by default + tbl = await db.create_table("test_empty_v2_default", data=None, schema=schema) + await tbl.add(make_table()) + + assert not await is_in_v2_mode(tbl) + def test_replace_index(tmp_path): db = lancedb.connect(uri=tmp_path) diff --git a/rust/lancedb/src/connection.rs b/rust/lancedb/src/connection.rs index 2d4f9cc9..955d9a56 100644 --- a/rust/lancedb/src/connection.rs +++ b/rust/lancedb/src/connection.rs @@ -220,7 +220,7 @@ impl CreateTableBuilder { mode: CreateTableMode::default(), write_options: WriteOptions::default(), embeddings: Vec::new(), - use_legacy_format: false, + use_legacy_format: true, } } diff --git a/rust/lancedb/src/table.rs b/rust/lancedb/src/table.rs index 4aa698d3..77126517 100644 --- a/rust/lancedb/src/table.rs +++ b/rust/lancedb/src/table.rs @@ -1079,7 +1079,10 @@ impl NativeTable { params: Option, read_consistency_interval: Option, ) -> Result { - let params = params.unwrap_or_default(); + let params = params.unwrap_or(WriteParams { + use_legacy_format: true, + ..Default::default() + }); // patch the params if we have a write store wrapper let params = match write_store_wrapper.clone() { Some(wrapper) => params.patch_with_store_wrapper(wrapper)?, @@ -1625,11 +1628,16 @@ impl TableInternal for NativeTable { } // patch the params if we have a write store wrapper - let lance_params = match self.store_wrapper.clone() { + let mut lance_params = match self.store_wrapper.clone() { Some(wrapper) => lance_params.patch_with_store_wrapper(wrapper)?, None => lance_params, }; + // Only use the new format if the user passes use_legacy_format=False in while creating + // a table with data. We don't want to accidentally switch to v2 format during an add + // operation. If the table is already v2 this won't have any effect. + lance_params.use_legacy_format = true; + self.dataset.ensure_mutable().await?; let dataset = Dataset::write(data, &self.uri, Some(lance_params)).await?;