diff --git a/src/Storages/ObjectStorage/DataLakes/Iceberg/IcebergMetadata.cpp b/src/Storages/ObjectStorage/DataLakes/Iceberg/IcebergMetadata.cpp index 58f2926cc07e..be0ff5efbecd 100644 --- a/src/Storages/ObjectStorage/DataLakes/Iceberg/IcebergMetadata.cpp +++ b/src/Storages/ObjectStorage/DataLakes/Iceberg/IcebergMetadata.cpp @@ -545,6 +545,11 @@ void IcebergMetadata::checkAlterIsPossible(const AlterCommands & commands) if (command.type != AlterCommand::Type::ADD_COLUMN && command.type != AlterCommand::Type::DROP_COLUMN && command.type != AlterCommand::Type::MODIFY_COLUMN) throw Exception(ErrorCodes::NOT_IMPLEMENTED, "Alter of type '{}' is not supported by Iceberg storage", command.type); + + if (command.type == AlterCommand::Type::MODIFY_COLUMN && command.to_remove != AlterCommand::RemoveProperty::NO_PROPERTY) + throw Exception( + ErrorCodes::NOT_IMPLEMENTED, + "Removing column property '{}' from column '{}' is not supported by Iceberg storage", command.to_remove, command.column_name); } } diff --git a/tests/queries/0_stateless/04033_iceberg_alter_remove_settings_segfault.reference b/tests/queries/0_stateless/04033_iceberg_alter_remove_settings_segfault.reference new file mode 100644 index 000000000000..23fb9dac9555 --- /dev/null +++ b/tests/queries/0_stateless/04033_iceberg_alter_remove_settings_segfault.reference @@ -0,0 +1 @@ +NOT_IMPLEMENTED diff --git a/tests/queries/0_stateless/04033_iceberg_alter_remove_settings_segfault.sh b/tests/queries/0_stateless/04033_iceberg_alter_remove_settings_segfault.sh new file mode 100755 index 000000000000..4579abcf5035 --- /dev/null +++ b/tests/queries/0_stateless/04033_iceberg_alter_remove_settings_segfault.sh @@ -0,0 +1,28 @@ +#!/usr/bin/env bash +# Tags: no-fasttest + +# Regression test for https://github.com/ClickHouse/ClickHouse/issues/86330 +# ALTER TABLE ... MODIFY COLUMN ... REMOVE SETTINGS on an Iceberg table +# should return an error instead of causing a segfault. + +CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) +# shellcheck source=../shell_config.sh +. "$CURDIR"/../shell_config.sh + +TABLE="t_${CLICKHOUSE_DATABASE}_${RANDOM}" +TABLE_PATH="${USER_FILES_PATH}/${TABLE}/" + +${CLICKHOUSE_CLIENT} --query "DROP TABLE IF EXISTS ${TABLE}" +${CLICKHOUSE_CLIENT} --query " + CREATE TABLE ${TABLE} (c0 Int) + ENGINE = IcebergLocal('${TABLE_PATH}') +" +# To have at least one real snapshot. Otherwise alter can be noop. +${CLICKHOUSE_CLIENT} --allow_insert_into_iceberg=1 --query "INSERT INTO ${TABLE} VALUES (1)" + +${CLICKHOUSE_CLIENT} --query " + ALTER TABLE ${TABLE} MODIFY COLUMN c0 REMOVE SETTINGS +" 2>&1 | grep -o -m1 "NOT_IMPLEMENTED" + +${CLICKHOUSE_CLIENT} --query "DROP TABLE IF EXISTS ${TABLE}" +rm -rf "${TABLE_PATH}"