@Override
    public ClickHouseMapValue copy(boolean deep) {
        if (!deep) {
            return new ClickHouseMapValue(getValue(), keyType, valueType);
        }

        Map<?, ?> value = getValue();
        Map<Object, Object> newValue = new LinkedHashMap<>();
        newValue.putAll(value);
        return new ClickHouseMapValue(newValue, keyType, valueType);
    }
Update value of the given object or create a new instance if {@code ref} is
null.

@param ref       object to update, could be null
@param value     value
@param keyType   non-null class of key
@param valueType non-null class of value
@return same object as {@code ref} or a new instance if it's null
clickhouse-data/src/main/java/com/clickhouse/data/value/ClickHouseMapValue.java