@@ -434,6 +434,24 @@ def _set_ref_snapshot(
434
434
435
435
return updates , requirements
436
436
437
+ def _remove_ref_snapshot (self , ref_name : str ) -> UpdatesAndRequirements :
438
+ """Remove a snapshot ref.
439
+
440
+ Args:
441
+ ref_name: branch / tag name to remove
442
+
443
+ Returns
444
+ The updates and requirements for the remove-snapshot-ref.
445
+ """
446
+ updates = (RemoveSnapshotRefUpdate (ref_name = ref_name ),)
447
+ requirements = (
448
+ AssertRefSnapshotId (
449
+ snapshot_id = self .table_metadata .refs [ref_name ].snapshot_id if ref_name in self .table_metadata .refs else None ,
450
+ ref = ref_name ,
451
+ ),
452
+ )
453
+ return updates , requirements
454
+
437
455
def update_schema (self , allow_incompatible_changes : bool = False , case_sensitive : bool = True ) -> UpdateSchema :
438
456
"""Create a new UpdateSchema to alter the columns of this table.
439
457
@@ -1022,6 +1040,23 @@ def _(update: SetSnapshotRefUpdate, base_metadata: TableMetadata, context: _Tabl
1022
1040
return base_metadata .model_copy (update = metadata_updates )
1023
1041
1024
1042
1043
+ @_apply_table_update .register (RemoveSnapshotRefUpdate )
1044
+ def _ (update : RemoveSnapshotRefUpdate , base_metadata : TableMetadata , context : _TableMetadataUpdateContext ) -> TableMetadata :
1045
+ if (existing_ref := base_metadata .refs .get (update .ref_name )) is None :
1046
+ return base_metadata
1047
+
1048
+ if base_metadata .snapshot_by_id (existing_ref .snapshot_id ) is None :
1049
+ raise ValueError (f"Cannot remove { update .ref_name } ref with unknown snapshot { existing_ref .snapshot_id } " )
1050
+
1051
+ if update .ref_name == MAIN_BRANCH :
1052
+ raise ValueError ("Cannot remove main branch" )
1053
+
1054
+ metadata_refs = {** base_metadata .refs }
1055
+ metadata_refs .pop (update .ref_name , None )
1056
+ context .add_update (update )
1057
+ return base_metadata .model_copy (update = {"refs" : metadata_refs })
1058
+
1059
+
1025
1060
@_apply_table_update .register (AddSortOrderUpdate )
1026
1061
def _ (update : AddSortOrderUpdate , base_metadata : TableMetadata , context : _TableMetadataUpdateContext ) -> TableMetadata :
1027
1062
context .add_update (update )
@@ -1978,6 +2013,21 @@ def create_tag(self, snapshot_id: int, tag_name: str, max_ref_age_ms: Optional[i
1978
2013
self ._requirements += requirement
1979
2014
return self
1980
2015
2016
+ def remove_tag (self , tag_name : str ) -> ManageSnapshots :
2017
+ """
2018
+ Remove a tag.
2019
+
2020
+ Args:
2021
+ tag_name (str): name of tag to remove
2022
+
2023
+ Returns:
2024
+ This for method chaining
2025
+ """
2026
+ update , requirement = self ._transaction ._remove_ref_snapshot (ref_name = tag_name )
2027
+ self ._updates += update
2028
+ self ._requirements += requirement
2029
+ return self
2030
+
1981
2031
def create_branch (
1982
2032
self ,
1983
2033
snapshot_id : int ,
@@ -2010,6 +2060,20 @@ def create_branch(
2010
2060
self ._requirements += requirement
2011
2061
return self
2012
2062
2063
+ def remove_branch (self , branch_name : str ) -> ManageSnapshots :
2064
+ """
2065
+ Remove a branch.
2066
+
2067
+ Args:
2068
+ branch_name (str): name of branch to remove
2069
+ Returns:
2070
+ This for method chaining
2071
+ """
2072
+ update , requirement = self ._transaction ._remove_ref_snapshot (ref_name = branch_name )
2073
+ self ._updates += update
2074
+ self ._requirements += requirement
2075
+ return self
2076
+
2013
2077
2014
2078
class UpdateSchema (UpdateTableMetadata ["UpdateSchema" ]):
2015
2079
_schema : Schema
0 commit comments