package io.vertx.sqlclient.impl;
import io.vertx.sqlclient.Query;
import io.vertx.sqlclient.Row;
import io.vertx.sqlclient.RowSet;
import io.vertx.sqlclient.SqlResult;
import java.util.Objects;
import java.util.function.Function;
import java.util.stream.Collector;
abstract class QueryBase<T, R extends SqlResult<T>> implements Query<R> {
protected final QueryExecutor<T, ?, R> builder;
public QueryBase(QueryExecutor<T, ?, R> builder) {
this.builder = builder;
}
protected abstract <T2, R2 extends SqlResult<T2>> QueryBase<T2, R2> copy(QueryExecutor<T2, ?, R2> builder);
@Override
public <U> Query<SqlResult<U>> collecting(Collector<Row, ?, U> collector) {
Objects.requireNonNull(collector, "Supplied collector must not be null");
return copy(new QueryExecutor<>(builder.tracer(), builder.metrics(), SqlResultImpl::new, collector));
}
@Override
public <U> Query<RowSet<U>> mapping(Function<Row, U> mapper) {
Objects.requireNonNull(mapper, "Supplied mapper must not be null");
return copy(new QueryExecutor<>(builder.tracer(), builder.metrics(), RowSetImpl.factory(), RowSetImpl.collector(mapper)));
}
}