diff --git a/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/catalog/nessie/TrinoNessieCatalog.java b/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/catalog/nessie/TrinoNessieCatalog.java index 1a8c3544920e..481525253af0 100644 --- a/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/catalog/nessie/TrinoNessieCatalog.java +++ b/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/catalog/nessie/TrinoNessieCatalog.java @@ -34,6 +34,7 @@ import io.trino.spi.connector.RelationType; import io.trino.spi.connector.SchemaNotFoundException; import io.trino.spi.connector.SchemaTableName; +import io.trino.spi.connector.TableNotFoundException; import io.trino.spi.security.TrinoPrincipal; import io.trino.spi.type.TypeManager; import org.apache.iceberg.BaseTable; @@ -47,6 +48,7 @@ import org.apache.iceberg.catalog.Namespace; import org.apache.iceberg.exceptions.NoSuchNamespaceException; import org.apache.iceberg.nessie.NessieIcebergClient; +import org.projectnessie.model.IcebergTable; import java.util.Iterator; import java.util.List; @@ -255,7 +257,14 @@ public void dropTable(ConnectorSession session, SchemaTableName schemaTableName) @Override public void dropCorruptedTable(ConnectorSession session, SchemaTableName schemaTableName) { - throw new TrinoException(NOT_SUPPORTED, "Cannot drop corrupted table %s from Iceberg Nessie catalog".formatted(schemaTableName)); + IcebergTable table = nessieClient.table(toIdentifier(schemaTableName)); + if (table == null) { + throw new TableNotFoundException(schemaTableName); + } + nessieClient.dropTable(toIdentifier(schemaTableName), true); + String tableLocation = table.getMetadataLocation().replaceFirst("/metadata/[^/]*$", ""); + deleteTableDirectory(fileSystemFactory.create(session), schemaTableName, tableLocation); + invalidateTableCache(schemaTableName); } @Override diff --git a/plugin/trino-iceberg/src/test/java/io/trino/plugin/iceberg/catalog/nessie/TestIcebergNessieCatalogConnectorSmokeTest.java b/plugin/trino-iceberg/src/test/java/io/trino/plugin/iceberg/catalog/nessie/TestIcebergNessieCatalogConnectorSmokeTest.java index d29eb5d0474d..ce68323fa1cf 100644 --- a/plugin/trino-iceberg/src/test/java/io/trino/plugin/iceberg/catalog/nessie/TestIcebergNessieCatalogConnectorSmokeTest.java +++ b/plugin/trino-iceberg/src/test/java/io/trino/plugin/iceberg/catalog/nessie/TestIcebergNessieCatalogConnectorSmokeTest.java @@ -261,14 +261,6 @@ public void testDropTableWithMissingManifestListFile() .hasMessageContaining("metadata location for register_table is not supported"); } - @Test - @Override - public void testDropTableWithNonExistentTableLocation() - { - assertThatThrownBy(super::testDropTableWithNonExistentTableLocation) - .hasMessageMatching("Cannot drop corrupted table (.*)"); - } - @Override protected boolean isFileSorted(Location path, String sortColumnName) {