version 21.5.5.12 (official build)

I'm trying to change data type for a column that is used in the TTL expression.
It works well when the table is empty.
When the table is not empty, the mutation fails.
As a result the table ends up in an inconsistent state.

```
create table test
(
InsertionDateTime DateTime,
TTLDays Int32 DEFAULT CAST(365, 'Int32')
)
Engine=MergeTree()
order by tuple()
TTL InsertionDateTime + toIntervalDay(TTLDays);

Ok.

insert into test values (now(), 23);

Ok.

ALTER TABLE test modify column TTLDays Int16 DEFAULT CAST(365, 'Int16');

Code: 341, e.displayText() = DB::Exception: Exception happened during execution of mutation 'mutation_2.txt' with part 'all_1_1_0' reason: 'Code: 10, e.displayText() = DB::Exception: Not found column InsertionDateTime in block. There are only columns: TTLDays (version 21.5.5.12 (official build))'. This error maybe retryable or not. In case of unretryable error, mutation can be killed with KILL MUTATION query (version 21.5.5.12 (official build)) [DB Errorcode=341]

insert into test values (now(), 23);

Ok.

select table, column, type, sum(rows) rows, sum(column_bytes_on_disk) on_disk
from system.parts_columns where column like 'TTLDays'
group by database, table, column, type

table | column  | type  | rows | on_disk
------+---------+-------+------+--------
test  | TTLDays | Int32 |    1 |      86
test  | TTLDays | Int16 |    1 |      84
```
single_disk_volume,
        tmp_prefix + future_part.name + (parent_part ? ".proj" : ""),
        parent_part);
    new_data_part->uuid = future_part.uuid;
    new_data_part->setColumns(storage_columns);
    new_data_part->partition.assign(future_part.getPartition());
    new_data_part->is_temp = parent_part == nullptr;
    bool need_remove_expired_values = false;
    bool force_ttl = false;
    for (const auto & part : parts)
    {
        new_data_part->ttl_infos.update(part->ttl_infos);
        if (metadata_snapshot->hasAnyTTL() && !part->checkAllTTLCalculated(metadata_snapshot))
        {
            LOG_INFO(log, "Some TTL values were not calculated for part {}. Will calculate them forcefully during merge.", part->name);
            need_remove_expired_values = true;
            force_ttl = true;
        }
    }
    const auto & part_min_ttl = new_data_part->ttl_infos.part_min_ttl;
    if (part_min_ttl && part_min_ttl <= time_of_merge)
        need_remove_expired_values = true;
    if (need_remove_expired_values && ttl_merges_blocker.isCancelled())
    {
        LOG_INFO(log, "Part {} has values with expired TTL, but merges with TTL are cancelled.", new_data_part->name);
        need_remove_expired_values = false;
    }
    size_t sum_input_rows_upper_bound = merge_entry->total_rows_count;
    size_t sum_compressed_bytes_upper_bound = merge_entry->total_size_bytes_compressed;
    MergeAlgorithm chosen_merge_algorithm = chooseMergeAlgorithm(