@@ -435,6 +435,24 @@ def _set_ref_snapshot(
435
435
436
436
return updates , requirements
437
437
438
+ def _remove_ref_snapshot (self , ref_name : str ) -> UpdatesAndRequirements :
439
+ """Remove a snapshot ref.
440
+
441
+ Args:
442
+ ref_name: branch / tag name to remove
443
+
444
+ Returns
445
+ The updates and requirements for the remove-snapshot-ref.
446
+ """
447
+ updates = (RemoveSnapshotRefUpdate (ref_name = ref_name ),)
448
+ requirements = (
449
+ AssertRefSnapshotId (
450
+ snapshot_id = self .table_metadata .refs [ref_name ].snapshot_id if ref_name in self .table_metadata .refs else None ,
451
+ ref = ref_name ,
452
+ ),
453
+ )
454
+ return updates , requirements
455
+
438
456
def update_schema (self , allow_incompatible_changes : bool = False , case_sensitive : bool = True ) -> UpdateSchema :
439
457
"""Create a new UpdateSchema to alter the columns of this table.
440
458
@@ -1023,6 +1041,23 @@ def _(update: SetSnapshotRefUpdate, base_metadata: TableMetadata, context: _Tabl
1023
1041
return base_metadata .model_copy (update = metadata_updates )
1024
1042
1025
1043
1044
+ @_apply_table_update .register (RemoveSnapshotRefUpdate )
1045
+ def _ (update : RemoveSnapshotRefUpdate , base_metadata : TableMetadata , context : _TableMetadataUpdateContext ) -> TableMetadata :
1046
+ if (existing_ref := base_metadata .refs .get (update .ref_name )) is None :
1047
+ return base_metadata
1048
+
1049
+ if base_metadata .snapshot_by_id (existing_ref .snapshot_id ) is None :
1050
+ raise ValueError (f"Cannot remove { update .ref_name } ref with unknown snapshot { existing_ref .snapshot_id } " )
1051
+
1052
+ if update .ref_name == MAIN_BRANCH :
1053
+ raise ValueError ("Cannot remove main branch" )
1054
+
1055
+ metadata_refs = {** base_metadata .refs }
1056
+ metadata_refs .pop (update .ref_name , None )
1057
+ context .add_update (update )
1058
+ return base_metadata .model_copy (update = {"refs" : metadata_refs })
1059
+
1060
+
1026
1061
@_apply_table_update .register (AddSortOrderUpdate )
1027
1062
def _ (update : AddSortOrderUpdate , base_metadata : TableMetadata , context : _TableMetadataUpdateContext ) -> TableMetadata :
1028
1063
context .add_update (update )
@@ -1997,6 +2032,21 @@ def create_tag(self, snapshot_id: int, tag_name: str, max_ref_age_ms: Optional[i
1997
2032
self ._requirements += requirement
1998
2033
return self
1999
2034
2035
+ def remove_tag (self , tag_name : str ) -> ManageSnapshots :
2036
+ """
2037
+ Remove a tag.
2038
+
2039
+ Args:
2040
+ tag_name (str): name of tag to remove
2041
+
2042
+ Returns:
2043
+ This for method chaining
2044
+ """
2045
+ update , requirement = self ._transaction ._remove_ref_snapshot (ref_name = tag_name )
2046
+ self ._updates += update
2047
+ self ._requirements += requirement
2048
+ return self
2049
+
2000
2050
def create_branch (
2001
2051
self ,
2002
2052
snapshot_id : int ,
@@ -2029,6 +2079,20 @@ def create_branch(
2029
2079
self ._requirements += requirement
2030
2080
return self
2031
2081
2082
+ def remove_branch (self , branch_name : str ) -> ManageSnapshots :
2083
+ """
2084
+ Remove a branch.
2085
+
2086
+ Args:
2087
+ branch_name (str): name of branch to remove
2088
+ Returns:
2089
+ This for method chaining
2090
+ """
2091
+ update , requirement = self ._transaction ._remove_ref_snapshot (ref_name = branch_name )
2092
+ self ._updates += update
2093
+ self ._requirements += requirement
2094
+ return self
2095
+
2032
2096
2033
2097
class UpdateSchema (UpdateTableMetadata ["UpdateSchema" ]):
2034
2098
_schema : Schema
0 commit comments