diff --git a/presto-iceberg/src/main/java/com/facebook/presto/iceberg/IcebergNativeMetadata.java b/presto-iceberg/src/main/java/com/facebook/presto/iceberg/IcebergNativeMetadata.java index b35d006b827f5..ca2ec47ffa3f9 100644 --- a/presto-iceberg/src/main/java/com/facebook/presto/iceberg/IcebergNativeMetadata.java +++ b/presto-iceberg/src/main/java/com/facebook/presto/iceberg/IcebergNativeMetadata.java @@ -303,6 +303,18 @@ public void dropView(ConnectorSession session, SchemaTableName viewName) ((ViewCatalog) catalog).dropView(toIcebergTableIdentifier(viewName, catalogFactory.isNestedNamespaceEnabled())); } + @Override + public void renameView(ConnectorSession session, SchemaTableName source, SchemaTableName target) + { + Catalog catalog = catalogFactory.getCatalog(session); + if (!(catalog instanceof ViewCatalog)) { + throw new PrestoException(NOT_SUPPORTED, "This connector does not support renaming views"); + } + ((ViewCatalog) catalog).renameView( + toIcebergTableIdentifier(source, catalogFactory.isNestedNamespaceEnabled()), + toIcebergTableIdentifier(target, catalogFactory.isNestedNamespaceEnabled())); + } + private void verifyAndPopulateViews(View view, SchemaTableName schemaTableName, String viewData, ImmutableMap.Builder views) { views.put(schemaTableName, new ConnectorViewDefinition( diff --git a/presto-iceberg/src/test/java/com/facebook/presto/iceberg/TestIcebergDistributedQueries.java b/presto-iceberg/src/test/java/com/facebook/presto/iceberg/TestIcebergDistributedQueries.java index 4e14bc5be829c..c689545433980 100644 --- a/presto-iceberg/src/test/java/com/facebook/presto/iceberg/TestIcebergDistributedQueries.java +++ b/presto-iceberg/src/test/java/com/facebook/presto/iceberg/TestIcebergDistributedQueries.java @@ -184,4 +184,31 @@ public void testStringFilters() assertQuery("SELECT count(*) FROM test_varcharn_filter WHERE shipmode = 'AIR '", "VALUES (0)"); assertQuery("SELECT count(*) FROM test_varcharn_filter WHERE shipmode = 'NONEXIST'", "VALUES (0)"); } + + @Test + public void testRenameView() + { + skipTestUnless(supportsViews()); + assertQuerySucceeds("CREATE TABLE iceberg_test_table (_string VARCHAR, _integer INTEGER)"); + assertUpdate("CREATE VIEW test_view_to_be_renamed AS SELECT * FROM iceberg_test_table"); + assertUpdate("ALTER VIEW IF EXISTS test_view_to_be_renamed RENAME TO test_view_renamed"); + assertUpdate("CREATE VIEW test_view2_to_be_renamed AS SELECT * FROM iceberg_test_table"); + assertUpdate("ALTER VIEW test_view2_to_be_renamed RENAME TO test_view2_renamed"); + assertQuerySucceeds("SELECT * FROM test_view_renamed"); + assertQuerySucceeds("SELECT * FROM test_view2_renamed"); + assertUpdate("DROP VIEW test_view_renamed"); + assertUpdate("DROP VIEW test_view2_renamed"); + assertUpdate("DROP TABLE iceberg_test_table"); + } + + @Test + public void testRenameViewIfNotExists() + { + String catalog = getSession().getCatalog().get(); + String schema = getSession().getSchema().get(); + skipTestUnless(supportsViews()); + assertQueryFails("ALTER VIEW test_rename_view_not_exist RENAME TO test_renamed_view_not_exist", + format("line 1:1: View '%s.%s.test_rename_view_not_exist' does not exist", catalog, schema)); + assertQuerySucceeds("ALTER VIEW IF EXISTS test_rename_view_not_exist RENAME TO test_renamed_view_not_exist"); + } } diff --git a/presto-iceberg/src/test/java/com/facebook/presto/iceberg/TestIcebergMetadataListing.java b/presto-iceberg/src/test/java/com/facebook/presto/iceberg/TestIcebergMetadataListing.java index 6f522c12f7aad..8802f7b442984 100644 --- a/presto-iceberg/src/test/java/com/facebook/presto/iceberg/TestIcebergMetadataListing.java +++ b/presto-iceberg/src/test/java/com/facebook/presto/iceberg/TestIcebergMetadataListing.java @@ -154,28 +154,4 @@ public void testTableValidation() assertQuerySucceeds("SELECT * FROM iceberg.test_schema.iceberg_table1"); assertQueryFails("SELECT * FROM iceberg.test_schema.hive_table", "Not an Iceberg table: test_schema.hive_table"); } - - @Test - public void testRenameView() - { - assertQuerySucceeds("CREATE SCHEMA iceberg.test_rename_view_schema"); - assertQuerySucceeds("CREATE TABLE iceberg.test_rename_view_schema.iceberg_test_table (_string VARCHAR, _integer INTEGER)"); - assertUpdate("CREATE VIEW iceberg.test_rename_view_schema.test_view_to_be_renamed AS SELECT * FROM iceberg.test_rename_view_schema.iceberg_test_table"); - assertUpdate("ALTER VIEW IF EXISTS iceberg.test_rename_view_schema.test_view_to_be_renamed RENAME TO iceberg.test_rename_view_schema.test_view_renamed"); - assertUpdate("CREATE VIEW iceberg.test_rename_view_schema.test_view2_to_be_renamed AS SELECT * FROM iceberg.test_rename_view_schema.iceberg_test_table"); - assertUpdate("ALTER VIEW iceberg.test_rename_view_schema.test_view2_to_be_renamed RENAME TO iceberg.test_rename_view_schema.test_view2_renamed"); - assertQuerySucceeds("SELECT * FROM iceberg.test_rename_view_schema.test_view_renamed"); - assertQuerySucceeds("SELECT * FROM iceberg.test_rename_view_schema.test_view2_renamed"); - assertUpdate("DROP VIEW iceberg.test_rename_view_schema.test_view_renamed"); - assertUpdate("DROP VIEW iceberg.test_rename_view_schema.test_view2_renamed"); - assertUpdate("DROP TABLE iceberg.test_rename_view_schema.iceberg_test_table"); - assertQuerySucceeds("DROP SCHEMA IF EXISTS iceberg.test_rename_view_schema"); - } - - @Test - public void testRenameViewIfNotExists() - { - assertQueryFails("ALTER VIEW iceberg.test_schema.test_rename_view_not_exist RENAME TO iceberg.test_schema.test_renamed_view_not_exist", "line 1:1: View 'iceberg.test_schema.test_rename_view_not_exist' does not exist"); - assertQuerySucceeds("ALTER VIEW IF EXISTS iceberg.test_schema.test_rename_view_not_exist RENAME TO iceberg.test_schema.test_renamed_view_not_exist"); - } }