If they are defined, they can override table-level settings.
{
        LOG_WARNING(log, "Tried to add obsolete part {} covered by {}", part_name, covering_part->getNameWithState());
        return false;
    }
    
    
    
    
    if (deduplication_log)
    {
        const String block_id = part->getZeroLevelPartBlockID(deduplication_token);
        auto res = deduplication_log->addPart(block_id, part_info);
        if (!res.second)
        {
            ProfileEvents::increment(ProfileEvents::DuplicatedInsertedBlocks);
            LOG_INFO(log, "Block with ID {} already exists as part {}; ignoring it", block_id, res.first.getPartName());
            return false;
        }
    }
    
    
    
    
    part->name = part_name;
    part->info = part_info;
    part->is_temp = false;
    part->setState(DataPartState::PreActive);
    part->renameTo(part_name, true);
    auto part_it = data_parts_indexes.insert(part).first;