If they are defined, they can override table-level settings.
{
    auto lock = lockParts();
    for (auto original_active_part : getDataPartsStateRange(DataPartState::Active)) 
    {
        if (part_copy->name == original_active_part->name)
        {
            auto active_part_it = data_parts_by_info.find(original_active_part->info);
            if (active_part_it == data_parts_by_info.end())
                throw Exception("Cannot swap part '" + part_copy->name + "', no such active part.", ErrorCodes::NO_SUCH_DATA_PART);
            
            
            original_active_part->force_keep_shared_data = false;
            if (original_active_part->volume->getDisk()->supportZeroCopyReplication() &&
                part_copy->isStoredOnRemoteDiskWithZeroCopySupport() &&
                original_active_part->getUniqueId() == part_copy->getUniqueId())
            {
                
                original_active_part->force_keep_shared_data = true;
            }
            modifyPartState(original_active_part, DataPartState::DeleteOnDestroy);
            data_parts_indexes.erase(active_part_it);
            auto part_it = data_parts_indexes.insert(part_copy).first;
            modifyPartState(part_it, DataPartState::Active);
            ssize_t diff_bytes = part_copy->getBytesOnDisk() - original_active_part->getBytesOnDisk();
            ssize_t diff_rows = part_copy->rows_count - original_active_part->rows_count;
            increaseDataVolume(diff_bytes, diff_rows,  0);
            
            
            lockSharedData(*part_copy);