@@ -217,26 +217,28 @@ impl<'a, RT: Runtime> TableModel<'a, RT> {
217217 . namespace ( namespace)
218218 . id ( & table_name) ?;
219219 self . delete_table_by_id_bypassing_schema_enforcement ( table_id_and_number. tablet_id )
220- . await
220+ . await ?;
221+ Ok ( ( ) )
221222 }
222223
223224 pub async fn delete_hidden_table ( & mut self , tablet_id : TabletId ) -> anyhow:: Result < ( ) > {
224225 let table_metadata = self . get_table_metadata ( tablet_id) . await ?;
225226 // We don't need to validate hidden table with the schema.
226227 anyhow:: ensure!( table_metadata. state == TableState :: Hidden ) ;
227228 self . delete_table_by_id_bypassing_schema_enforcement ( tablet_id)
228- . await
229+ . await ?;
230+ Ok ( ( ) )
229231 }
230232
231- pub async fn delete_table ( & mut self , tablet_id : TabletId ) -> anyhow:: Result < ( ) > {
233+ pub async fn delete_table ( & mut self , tablet_id : TabletId ) -> anyhow:: Result < TableNumber > {
232234 self . delete_table_by_id_bypassing_schema_enforcement ( tablet_id)
233235 . await
234236 }
235237
236238 async fn delete_table_by_id_bypassing_schema_enforcement (
237239 & mut self ,
238240 tablet_id : TabletId ,
239- ) -> anyhow:: Result < ( ) > {
241+ ) -> anyhow:: Result < TableNumber > {
240242 for index in IndexModel :: new ( self . tx )
241243 . all_indexes_on_table ( tablet_id)
242244 . await ?
@@ -258,7 +260,7 @@ impl<'a, RT: Runtime> TableModel<'a, RT> {
258260 SystemMetadataModel :: new_global ( self . tx )
259261 . replace ( table_doc_id, updated_table_metadata. try_into ( ) ?)
260262 . await ?;
261- Ok ( ( ) )
263+ Ok ( table_metadata . number )
262264 }
263265
264266 pub async fn get_table_metadata (
@@ -418,7 +420,7 @@ impl<'a, RT: Runtime> TableModel<'a, RT> {
418420 self . delete_table_by_id_bypassing_schema_enforcement (
419421 existing_table_by_name. tablet_id ,
420422 )
421- . await ?
423+ . await ?;
422424 }
423425 table_metadatas. push ( table_metadata) ;
424426 }
@@ -453,6 +455,40 @@ impl<'a, RT: Runtime> TableModel<'a, RT> {
453455 Ok ( ( ) )
454456 }
455457
458+ pub async fn replace_with_empty_table < S : SystemTable > (
459+ & mut self ,
460+ _system_table : S ,
461+ namespace : TableNamespace ,
462+ ) -> anyhow:: Result < ( ) > {
463+ let tablet_id = self
464+ . tx
465+ . table_mapping ( )
466+ . namespace ( namespace)
467+ . name_to_tablet ( ) ( S :: table_name ( ) . clone ( ) ) ?;
468+
469+ let table_number = self . delete_table ( tablet_id) . await ?;
470+ self . _insert_table_metadata (
471+ namespace,
472+ S :: table_name ( ) ,
473+ Some ( table_number) ,
474+ TableState :: Active ,
475+ )
476+ . await ?;
477+ let mut index_model = IndexModel :: new ( self . tx ) ;
478+ for index in S :: indexes ( ) {
479+ let index_metadata = IndexMetadata :: new_enabled (
480+ index
481+ . name
482+ . map_table ( & |_| anyhow:: Ok ( S :: table_name ( ) . clone ( ) ) ) ?,
483+ index. fields ,
484+ ) ;
485+ index_model
486+ . add_system_index ( namespace, index_metadata)
487+ . await ?;
488+ }
489+ Ok ( ( ) )
490+ }
491+
456492 pub async fn insert_table_for_import (
457493 & mut self ,
458494 namespace : TableNamespace ,
0 commit comments