@@ -845,6 +845,7 @@ pub trait MetaStore: DIService + Send + Sync {
845845 aggregates : Option < Vec < ( String , String ) > > ,
846846 partition_split_threshold : Option < u64 > ,
847847 trace_obj : Option < String > ,
848+ drop_if_exists : bool ,
848849 ) -> Result < IdRow < Table > , CubeError > ;
849850 async fn table_ready ( & self , id : u64 , is_ready : bool ) -> Result < IdRow < Table > , CubeError > ;
850851 async fn seal_table ( & self , id : u64 ) -> Result < IdRow < Table > , CubeError > ;
@@ -1490,6 +1491,37 @@ impl RocksMetaStore {
14901491 {
14911492 self . store . write_operation ( f) . await
14921493 }
1494+
1495+ fn drop_table_impl (
1496+ table_id : u64 ,
1497+ db_ref : DbTableRef ,
1498+ batch_pipe : & mut BatchPipe ,
1499+ ) -> Result < IdRow < Table > , CubeError > {
1500+ let tables_table = TableRocksTable :: new ( db_ref. clone ( ) ) ;
1501+ let indexes_table = IndexRocksTable :: new ( db_ref. clone ( ) ) ;
1502+ let replay_handles_table = ReplayHandleRocksTable :: new ( db_ref. clone ( ) ) ;
1503+ let trace_objects_table = TraceObjectRocksTable :: new ( db_ref. clone ( ) ) ;
1504+ let indexes = indexes_table
1505+ . get_row_ids_by_index ( & IndexIndexKey :: TableId ( table_id) , & IndexRocksIndex :: TableID ) ?;
1506+ let trace_objects = trace_objects_table. get_rows_by_index (
1507+ & TraceObjectIndexKey :: ByTableId ( table_id) ,
1508+ & TraceObjectRocksIndex :: ByTableId ,
1509+ ) ?;
1510+ for trace_object in trace_objects {
1511+ trace_objects_table. delete ( trace_object. get_id ( ) , batch_pipe) ?;
1512+ }
1513+ let replay_handles = replay_handles_table. get_rows_by_index (
1514+ & ReplayHandleIndexKey :: ByTableId ( table_id) ,
1515+ & ReplayHandleRocksIndex :: ByTableId ,
1516+ ) ?;
1517+ for replay_handle in replay_handles {
1518+ replay_handles_table. delete ( replay_handle. get_id ( ) , batch_pipe) ?;
1519+ }
1520+ for index in indexes {
1521+ RocksMetaStore :: drop_index ( db_ref. clone ( ) , batch_pipe, index, true ) ?;
1522+ }
1523+ Ok ( tables_table. delete ( table_id, batch_pipe) ?)
1524+ }
14931525}
14941526
14951527impl RocksMetaStore {
@@ -2033,9 +2065,15 @@ impl MetaStore for RocksMetaStore {
20332065 aggregates : Option < Vec < ( String , String ) > > ,
20342066 partition_split_threshold : Option < u64 > ,
20352067 trace_obj : Option < String > ,
2068+ drop_if_exists : bool ,
20362069 ) -> Result < IdRow < Table > , CubeError > {
20372070 self . write_operation ( move |db_ref, batch_pipe| {
20382071 batch_pipe. invalidate_tables_cache ( ) ;
2072+ if drop_if_exists {
2073+ if let Ok ( exists_table) = get_table_impl ( db_ref. clone ( ) , schema_name. clone ( ) , table_name. clone ( ) ) {
2074+ RocksMetaStore :: drop_table_impl ( exists_table. get_id ( ) , db_ref. clone ( ) , batch_pipe) ?;
2075+ }
2076+ }
20392077 let rocks_table = TableRocksTable :: new ( db_ref. clone ( ) ) ;
20402078 let rocks_index = IndexRocksTable :: new ( db_ref. clone ( ) ) ;
20412079 let rocks_schema = SchemaRocksTable :: new ( db_ref. clone ( ) ) ;
@@ -2379,32 +2417,7 @@ impl MetaStore for RocksMetaStore {
23792417 async fn drop_table ( & self , table_id : u64 ) -> Result < IdRow < Table > , CubeError > {
23802418 self . write_operation ( move |db_ref, batch_pipe| {
23812419 batch_pipe. invalidate_tables_cache ( ) ;
2382- let tables_table = TableRocksTable :: new ( db_ref. clone ( ) ) ;
2383- let indexes_table = IndexRocksTable :: new ( db_ref. clone ( ) ) ;
2384- let replay_handles_table = ReplayHandleRocksTable :: new ( db_ref. clone ( ) ) ;
2385- let trace_objects_table = TraceObjectRocksTable :: new ( db_ref. clone ( ) ) ;
2386- let indexes = indexes_table. get_row_ids_by_index (
2387- & IndexIndexKey :: TableId ( table_id) ,
2388- & IndexRocksIndex :: TableID ,
2389- ) ?;
2390- let trace_objects = trace_objects_table. get_rows_by_index (
2391- & TraceObjectIndexKey :: ByTableId ( table_id) ,
2392- & TraceObjectRocksIndex :: ByTableId ,
2393- ) ?;
2394- for trace_object in trace_objects {
2395- trace_objects_table. delete ( trace_object. get_id ( ) , batch_pipe) ?;
2396- }
2397- let replay_handles = replay_handles_table. get_rows_by_index (
2398- & ReplayHandleIndexKey :: ByTableId ( table_id) ,
2399- & ReplayHandleRocksIndex :: ByTableId ,
2400- ) ?;
2401- for replay_handle in replay_handles {
2402- replay_handles_table. delete ( replay_handle. get_id ( ) , batch_pipe) ?;
2403- }
2404- for index in indexes {
2405- RocksMetaStore :: drop_index ( db_ref. clone ( ) , batch_pipe, index, true ) ?;
2406- }
2407- Ok ( tables_table. delete ( table_id, batch_pipe) ?)
2420+ RocksMetaStore :: drop_table_impl ( table_id, db_ref, batch_pipe)
24082421 } )
24092422 . await
24102423 }
@@ -5108,6 +5121,7 @@ mod tests {
51085121 None ,
51095122 None ,
51105123 None ,
5124+ false ,
51115125 )
51125126 . await
51135127 . unwrap ( ) ;
@@ -5130,6 +5144,7 @@ mod tests {
51305144 None ,
51315145 None ,
51325146 None ,
5147+ false ,
51335148 )
51345149 . await
51355150 . unwrap ( ) ;
@@ -5251,6 +5266,7 @@ mod tests {
52515266 None ,
52525267 None ,
52535268 None ,
5269+ false ,
52545270 )
52555271 . await
52565272 . unwrap ( ) ;
@@ -5275,6 +5291,7 @@ mod tests {
52755291 None ,
52765292 None ,
52775293 None ,
5294+ false ,
52785295 )
52795296 . await
52805297 . is_err( ) ) ;
@@ -5363,6 +5380,7 @@ mod tests {
53635380 None ,
53645381 None ,
53655382 None ,
5383+ false ,
53665384 )
53675385 . await
53685386 . unwrap ( ) ;
@@ -5452,6 +5470,7 @@ mod tests {
54525470 ] ) ,
54535471 None ,
54545472 None ,
5473+ false ,
54555474 )
54565475 . await
54575476 . unwrap ( ) ;
@@ -5524,6 +5543,7 @@ mod tests {
55245543 ] ) ,
55255544 None ,
55265545 None ,
5546+ false ,
55275547 )
55285548 . await
55295549 . is_err( ) ) ;
@@ -5546,6 +5566,7 @@ mod tests {
55465566 None ,
55475567 None ,
55485568 None ,
5569+ false ,
55495570 )
55505571 . await
55515572 . is_err( ) ) ;
@@ -5571,6 +5592,7 @@ mod tests {
55715592 ] ) ,
55725593 None ,
55735594 None ,
5595+ false ,
55745596 )
55755597 . await
55765598 . is_err( ) ) ;
@@ -6047,6 +6069,7 @@ mod tests {
60476069 None ,
60486070 None ,
60496071 None ,
6072+ false ,
60506073 )
60516074 . await
60526075 . unwrap ( ) ;
@@ -6269,6 +6292,7 @@ mod tests {
62696292 None ,
62706293 None ,
62716294 None ,
6295+ false ,
62726296 )
62736297 . await
62746298 . unwrap ( ) ;
@@ -6409,6 +6433,7 @@ mod tests {
64096433 None ,
64106434 None ,
64116435 None ,
6436+ false ,
64126437 )
64136438 . await
64146439 . unwrap ( ) ;
0 commit comments