public static Map<ClickHouseOption, Serializable> toClientOptions(Map<?, ?> props) {
        Map<ClickHouseOption, Serializable> options = new HashMap<>();
        if (props != null && !props.isEmpty()) {
            Map<String, ClickHouseOption> customOptions = ClientOptions.INSTANCE.customOptions;
            for (Entry<?, ?> e : props.entrySet()) {
                if (e.getKey() == null || e.getValue() == null) {
                    continue;
                }

                String key = e.getKey().toString();
                // no need to enable option overidding for now
                ClickHouseOption o = ClickHouseClientOption.fromKey(key);
                if (o == null) {
                    o = customOptions.get(key);
                }

                if (o != null) {
                    options.put(o, ClickHouseOption.fromString(e.getValue().toString(), o.getValueType()));
                }
            }
        }

        return options;
    }
Converts given key-value pairs to a mutable map of corresponding
{@link ClickHouseOption}.

@param props key-value pairs
@return non-null mutable map of client options
clickhouse-client/src/main/java/com/clickhouse/client/ClickHouseConfig.java