diff --git a/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/IcebergMetadata.java b/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/IcebergMetadata.java index 169f4d56dce7..5b4956eeac31 100644 --- a/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/IcebergMetadata.java +++ b/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/IcebergMetadata.java @@ -824,6 +824,10 @@ public Optional getMaterializedView(Connect @Override public void renameMaterializedView(ConnectorSession session, SchemaTableName source, SchemaTableName target) { + // TODO (https://github.com/trinodb/trino/issues/9594) support rename across schemas + if (!source.getSchemaName().equals(target.getSchemaName())) { + throw new TrinoException(NOT_SUPPORTED, "Materialized View rename across schemas is not supported"); + } catalog.renameMaterializedView(session, source, target); } diff --git a/plugin/trino-iceberg/src/test/java/io/trino/plugin/iceberg/BaseIcebergConnectorTest.java b/plugin/trino-iceberg/src/test/java/io/trino/plugin/iceberg/BaseIcebergConnectorTest.java index 9827384e1993..e26aee6153a0 100644 --- a/plugin/trino-iceberg/src/test/java/io/trino/plugin/iceberg/BaseIcebergConnectorTest.java +++ b/plugin/trino-iceberg/src/test/java/io/trino/plugin/iceberg/BaseIcebergConnectorTest.java @@ -154,6 +154,8 @@ protected boolean hasBehavior(TestingConnectorBehavior connectorBehavior) case SUPPORTS_CREATE_MATERIALIZED_VIEW: case SUPPORTS_RENAME_MATERIALIZED_VIEW: return true; + case SUPPORTS_RENAME_MATERIALIZED_VIEW_ACROSS_SCHEMAS: + return false; case SUPPORTS_DELETE: return true; diff --git a/testing/trino-testing/src/main/java/io/trino/testing/BaseConnectorTest.java b/testing/trino-testing/src/main/java/io/trino/testing/BaseConnectorTest.java index 38132cdb2d01..6aaef38fbae0 100644 --- a/testing/trino-testing/src/main/java/io/trino/testing/BaseConnectorTest.java +++ b/testing/trino-testing/src/main/java/io/trino/testing/BaseConnectorTest.java @@ -51,6 +51,7 @@ import static io.trino.testing.TestingConnectorBehavior.SUPPORTS_MULTI_STATEMENT_WRITES; import static io.trino.testing.TestingConnectorBehavior.SUPPORTS_RENAME_COLUMN; import static io.trino.testing.TestingConnectorBehavior.SUPPORTS_RENAME_MATERIALIZED_VIEW; +import static io.trino.testing.TestingConnectorBehavior.SUPPORTS_RENAME_MATERIALIZED_VIEW_ACROSS_SCHEMAS; import static io.trino.testing.TestingConnectorBehavior.SUPPORTS_RENAME_SCHEMA; import static io.trino.testing.TestingConnectorBehavior.SUPPORTS_RENAME_TABLE; import static io.trino.testing.TestingConnectorBehavior.SUPPORTS_RENAME_TABLE_ACROSS_SCHEMAS; @@ -723,7 +724,21 @@ public void testRenameMaterializedView() assertUpdate(session, "ALTER MATERIALIZED VIEW " + testExistsMaterializedViewName + " RENAME TO " + uppercaseName); assertTestingMaterializedViewQuery(schema, uppercaseName.toLowerCase(ENGLISH)); // Ensure select allows for lower-case, not delimited identifier - assertUpdate(session, "DROP MATERIALIZED VIEW " + uppercaseName); + String otherSchema = "rename_mv_other_schema"; + assertUpdate(format("CREATE SCHEMA IF NOT EXISTS %s", otherSchema)); + if (hasBehavior(SUPPORTS_RENAME_MATERIALIZED_VIEW_ACROSS_SCHEMAS)) { + assertUpdate(session, "ALTER MATERIALIZED VIEW " + uppercaseName + " RENAME TO " + otherSchema + "." + originalMaterializedView.getObjectName()); + assertTestingMaterializedViewQuery(otherSchema, originalMaterializedView.getObjectName()); + + assertUpdate(session, "DROP MATERIALIZED VIEW " + otherSchema + "." + originalMaterializedView.getObjectName()); + } + else { + assertQueryFails( + session, + "ALTER MATERIALIZED VIEW " + uppercaseName + " RENAME TO " + otherSchema + "." + originalMaterializedView.getObjectName(), + "Materialized View rename across schemas is not supported"); + assertUpdate(session, "DROP MATERIALIZED VIEW " + uppercaseName); + } assertFalse(getQueryRunner().tableExists(session, originalMaterializedView.toString())); assertFalse(getQueryRunner().tableExists(session, renamedMaterializedView)); diff --git a/testing/trino-testing/src/main/java/io/trino/testing/TestingConnectorBehavior.java b/testing/trino-testing/src/main/java/io/trino/testing/TestingConnectorBehavior.java index 749f4bd4f602..9809eba583a5 100644 --- a/testing/trino-testing/src/main/java/io/trino/testing/TestingConnectorBehavior.java +++ b/testing/trino-testing/src/main/java/io/trino/testing/TestingConnectorBehavior.java @@ -64,6 +64,7 @@ public enum TestingConnectorBehavior SUPPORTS_CREATE_MATERIALIZED_VIEW(false), SUPPORTS_RENAME_MATERIALIZED_VIEW(false), + SUPPORTS_RENAME_MATERIALIZED_VIEW_ACROSS_SCHEMAS(SUPPORTS_RENAME_MATERIALIZED_VIEW), SUPPORTS_INSERT,