public static ClickHouseResponse of(ClickHouseConfig config, List<ClickHouseColumn> columns, Object[][] values,
            ClickHouseResponseSummary summary, TimeZone timeZone) {
        if (columns == null) {
            columns = Collections.emptyList();
        }
        if (columns.isEmpty() && (summary == null || summary == ClickHouseResponseSummary.EMPTY)) {
            return ClickHouseResponse.EMPTY;
        }

        int size = columns.size();
        int len = values != null ? values.length : 0;
        ClickHouseValue[][] wrappedValues = new ClickHouseValue[len][];
        if (len > 0) {
            ClickHouseValue[] templates = new ClickHouseValue[size];
            for (int i = 0; i < size; i++) {
                templates[i] = columns.get(i).newValue(config);
            }

            for (int i = 0; i < len; i++) {
                Object[] input = values[i];
                int count = input != null ? input.length : 0;
                ClickHouseValue[] v = new ClickHouseValue[size];
                for (int j = 0; j < size; j++) {
                    v[j] = templates[j].copy().update(j < count ? input[j] : null); // NOSONAR
                }
                wrappedValues[i] = v;
            }
        }

        return new ClickHouseSimpleResponse(columns, wrappedValues, summary, timeZone);
    }
Creates a response object using columns definition and raw values.

@param config  non-null config
@param columns list of columns
@param values  raw values, which may or may not be null
@param summary response summary
@return response object
clickhouse-client/src/main/java/com/clickhouse/client/ClickHouseSimpleResponse.java