diff --git a/core/trino-main/src/main/java/io/trino/metadata/DisabledSystemSecurityMetadata.java b/core/trino-main/src/main/java/io/trino/metadata/DisabledSystemSecurityMetadata.java index 3b86d92e84d0..e0920b94e3ac 100644 --- a/core/trino-main/src/main/java/io/trino/metadata/DisabledSystemSecurityMetadata.java +++ b/core/trino-main/src/main/java/io/trino/metadata/DisabledSystemSecurityMetadata.java @@ -200,6 +200,9 @@ public void columnRenamed(Session session, CatalogSchemaTableName table, String @Override public void columnDropped(Session session, CatalogSchemaTableName table, String column) {} + @Override + public void columnTypeChanged(Session session, CatalogSchemaTableName table, String column, String oldType, String newType) {} + private static TrinoException notSupportedException(String catalogName) { return new TrinoException(NOT_SUPPORTED, "Catalog does not support permission management: " + catalogName); diff --git a/core/trino-main/src/main/java/io/trino/metadata/MetadataManager.java b/core/trino-main/src/main/java/io/trino/metadata/MetadataManager.java index 05b9b15a6ce0..a5431b17d8e0 100644 --- a/core/trino-main/src/main/java/io/trino/metadata/MetadataManager.java +++ b/core/trino-main/src/main/java/io/trino/metadata/MetadataManager.java @@ -948,8 +948,18 @@ public void dropField(Session session, TableHandle tableHandle, ColumnHandle col public void setColumnType(Session session, TableHandle tableHandle, ColumnHandle column, Type type) { CatalogHandle catalogHandle = tableHandle.getCatalogHandle(); + CatalogMetadata catalogMetadata = getCatalogMetadataForWrite(session, catalogHandle.getCatalogName()); ConnectorMetadata metadata = getMetadataForWrite(session, catalogHandle); + ColumnMetadata columnMetadata = getColumnMetadata(session, tableHandle, column); metadata.setColumnType(session.toConnectorSession(catalogHandle), tableHandle.getConnectorHandle(), column, type); + if (catalogMetadata.getSecurityManagement() == SYSTEM) { + systemSecurityMetadata.columnTypeChanged( + session, + getTableName(session, tableHandle), + columnMetadata.getName(), + columnMetadata.getType().getDisplayName(), + type.getDisplayName()); + } } @Override diff --git a/core/trino-main/src/main/java/io/trino/metadata/SystemSecurityMetadata.java b/core/trino-main/src/main/java/io/trino/metadata/SystemSecurityMetadata.java index 8318cd17b12f..8f528faa8620 100644 --- a/core/trino-main/src/main/java/io/trino/metadata/SystemSecurityMetadata.java +++ b/core/trino-main/src/main/java/io/trino/metadata/SystemSecurityMetadata.java @@ -188,4 +188,9 @@ public interface SystemSecurityMetadata * A column was dropped */ void columnDropped(Session session, CatalogSchemaTableName table, String column); + + /** + * Column type was changed + */ + void columnTypeChanged(Session session, CatalogSchemaTableName table, String column, String oldType, String newType); } diff --git a/testing/trino-tests/src/test/java/io/trino/security/TestingSystemSecurityMetadata.java b/testing/trino-tests/src/test/java/io/trino/security/TestingSystemSecurityMetadata.java index 0870af6ef057..2091725e56c3 100644 --- a/testing/trino-tests/src/test/java/io/trino/security/TestingSystemSecurityMetadata.java +++ b/testing/trino-tests/src/test/java/io/trino/security/TestingSystemSecurityMetadata.java @@ -284,4 +284,7 @@ public void columnDropped(Session session, CatalogSchemaTableName table, String { throw new UnsupportedOperationException(); } + + @Override + public void columnTypeChanged(Session session, CatalogSchemaTableName table, String column, String oldType, String newType) {} }