@SuppressWarnings("unchecked")
    public SelfT option(ClickHouseOption option, Serializable value) {
        checkSealed();

        if (value == null) {
            return removeOption(option);
        } else if (option != null && option.getValueType() != value.getClass()) {
            value = ClickHouseOption.fromString(value.toString(), option.getValueType());
        }

        if (option == ClickHouseClientOption.CUSTOM_SETTINGS) {
            for (Entry<String, String> entry : ClickHouseOption.toKeyValuePairs(value.toString()).entrySet()) {
                set(entry.getKey(), entry.getValue());
            }
        } else {
            Serializable oldValue = options.put(ClickHouseChecker.nonNull(option, ClickHouseConfig.PARAM_OPTION),
                    value); // NOSONAR
            if (oldValue == null || !oldValue.equals(value)) {
                if (changeListener != null) {
                    changeListener.optionChanged(this, option, oldValue, value);
                }
                resetCache();
            }
        }

        return (SelfT) this;
    }
Sets an option. {@code option} is for configuring client's behaviour, while
{@code setting} is for server.

@param option option
@param value  value
@return the request itself
clickhouse-client/src/main/java/com/clickhouse/client/ClickHouseRequest.java