public ClickHouseRequest<SelfT> copy() {
        ClickHouseRequest<SelfT> req = new ClickHouseRequest<>(getClient(), server, serverRef, options, false);
        if (options.isFreezed()) {
            req.options.freeze();
        }
        req.externalTables.addAll(externalTables);
        req.settings.putAll(settings);
        if (settings.isFreezed()) {
            req.settings.freeze();
        }
        req.namedParameters.putAll(namedParameters);
        req.input = input;
        req.writer = writer;
        req.output = output;
        req.queryId = queryId;
        req.sql = sql;
        req.preparedQuery = preparedQuery;
        req.managerRef.set(managerRef.get());
        req.txRef.set(txRef.get());
        req.changeListener = changeListener;
        req.serverListener = serverListener;
        return req;
    }
Creates a copy of this request including listeners. Please pay attention that
the same node reference (returned from {@link #getServer()}) will be copied
to the new request as well, meaning failover will change node for both
requests.

@return copy of this request
clickhouse-client/src/main/java/com/clickhouse/client/ClickHouseRequest.java