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
```
throw Exception("Cancelled merging parts", ErrorCodes::ABORTED);
    if (need_remove_expired_values && ttl_merges_blocker.isCancelled())
        throw Exception("Cancelled merging parts with expired TTL", ErrorCodes::ABORTED);
    bool need_sync = needSyncPart(sum_input_rows_upper_bound, sum_compressed_bytes_upper_bound, *data_settings);
    MergeTreeData::DataPart::Checksums checksums_gathered_columns;
    
    if (chosen_merge_algorithm == MergeAlgorithm::Vertical)
    {
        size_t sum_input_rows_exact = merge_entry->rows_read;
        merge_entry->columns_written = merging_column_names.size();
        merge_entry->progress.store(column_sizes->keyColumnsWeight(), std::memory_order_relaxed);
        BlockInputStreams column_part_streams(parts.size());
        auto it_name_and_type = gathering_columns.cbegin();
        rows_sources_write_buf->next();
        rows_sources_uncompressed_write_buf->next();
        
        rows_sources_uncompressed_write_buf->finalize();
        size_t rows_sources_count = rows_sources_write_buf->count();
        
        
        
        if ((rows_sources_count > 0 || parts.size() > 1) && sum_input_rows_exact != rows_sources_count)
            throw Exception("Number of rows in source parts (" + toString(sum_input_rows_exact)
                + ") differs from number of bytes written to rows_sources file (" + toString(rows_sources_count)
                + "). It is a bug.", ErrorCodes::LOGICAL_ERROR);
        CompressedReadBufferFromFile rows_sources_read_buf(tmp_disk->readFile(rows_sources_file_path));
        IMergedBlockOutputStream::WrittenOffsetColumns written_offset_columns;
        for (size_t column_num = 0, gathering_column_names_size = gathering_column_names.size();
            column_num < gathering_column_names_size;
            ++column_num, ++it_name_and_type)