Skip to content

Commit 26829ff

Browse files
committed
fix: Fix glue drop_namespace checking Iceberg tables instead of all tables
1 parent dea5f77 commit 26829ff

File tree

2 files changed

+22
-4
lines changed

2 files changed

+22
-4
lines changed

pyiceberg/catalog/glue.py

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -680,13 +680,19 @@ def drop_namespace(self, namespace: Union[str, Identifier]) -> None:
680680
"""
681681
database_name = self.identifier_to_database(namespace, NoSuchNamespaceError)
682682
try:
683-
table_list = self.list_tables(namespace=database_name)
684-
except NoSuchNamespaceError as e:
683+
table_list_response = self.glue.get_tables(DatabaseName=database_name)
684+
table_list = table_list_response["TableList"]
685+
except self.glue.exceptions.EntityNotFoundException as e:
685686
raise NoSuchNamespaceError(f"Database does not exist: {database_name}") from e
686687

687688
if len(table_list) > 0:
688-
raise NamespaceNotEmptyError(f"Database {database_name} is not empty")
689-
689+
first_table = table_list[0]
690+
if self.__is_iceberg_table(first_table):
691+
raise NamespaceNotEmptyError(f"Cannot drop namespace {database_name} because it still contains Iceberg tables")
692+
else:
693+
raise NamespaceNotEmptyError(
694+
f"Cannot drop namespace {database_name} because it still contains non-Iceberg tables"
695+
)
690696
self.glue.delete_database(Name=database_name)
691697

692698
def list_tables(self, namespace: Union[str, Identifier]) -> List[Identifier]:

tests/catalog/test_glue.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -548,6 +548,18 @@ def test_drop_non_empty_namespace(
548548
test_catalog.drop_namespace(database_name)
549549

550550

551+
@mock_aws
552+
def test_drop_namespace_that_contains_non_iceberg_tables(
553+
_bucket_initialize: None, moto_endpoint_url: str, table_schema_nested: Schema, database_name: str, table_name: str
554+
) -> None:
555+
test_catalog = GlueCatalog("glue", **{"s3.endpoint": moto_endpoint_url, "warehouse": f"s3://{BUCKET_NAME}/"})
556+
test_catalog.create_namespace(namespace=database_name)
557+
test_catalog.glue.create_table(DatabaseName=database_name, TableInput={"Name": "hive_table"})
558+
559+
with pytest.raises(NamespaceNotEmptyError):
560+
test_catalog.drop_namespace(database_name)
561+
562+
551563
@mock_aws
552564
def test_drop_non_exist_namespace(_bucket_initialize: None, moto_endpoint_url: str, database_name: str) -> None:
553565
test_catalog = GlueCatalog("glue", **{"s3.endpoint": moto_endpoint_url})

0 commit comments

Comments
 (0)