package io.vertx.pgclient.impl.codec;
import io.vertx.sqlclient.Row;
import io.vertx.sqlclient.impl.RowDesc;
import io.vertx.sqlclient.impl.command.QueryCommandBase;
import java.util.stream.Collector;
abstract class QueryCommandBaseCodec<T, C extends QueryCommandBase<T>> extends PgCommandCodec<Boolean, C> {
RowResultDecoder<?, T> decoder;
QueryCommandBaseCodec(C cmd) {
super(cmd);
}
@Override
public void handleCommandComplete(int updated) {
this.result = false;
T result;
int size;
RowDesc desc;
if (decoder != null) {
result = decoder.complete();
desc = decoder.desc;
size = decoder.size();
decoder.reset();
} else {
result = emptyResult(cmd.collector());
size = 0;
desc = null;
}
cmd.resultHandler().handleResult(updated, size, desc, result);
}
@Override
public void handleErrorResponse(ErrorResponse errorResponse) {
failure = errorResponse.toException();
}
private static <A, T> T emptyResult(Collector<Row, A, T> collector) {
return collector.finisher().apply(collector.supplier().get());
}
}