
io.zero88.jooqx.adapter.SQLCollectorPart Maven / Gradle / Ivy
package io.zero88.jooqx.adapter;
import java.util.function.BiFunction;
import java.util.function.Function;
import org.jooq.DSLContext;
import org.jooq.Record;
import org.jooq.TableLike;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
import lombok.experimental.Accessors;
/**
* SQL collector part that helps creating collector in {@link RowConverterStrategy#createCollector(Function)}
*
* This collector part will be init in SQLResultAdapter
*
* @param The jOOQ record type
* @param The output object type
* @see RowConverterStrategy
* @see SQLResultAdapter
*/
@Accessors(fluent = true)
@RequiredArgsConstructor
public class SQLCollectorPart {
@Getter(value = AccessLevel.PROTECTED)
private final BiFunction, R> provider;
@Getter
private final Function converter;
public R toRecord(@NonNull DSLContext dsl, @NonNull TableLike extends Record> queryTable) {
return provider.apply(dsl, queryTable);
}
public static final class IdentityCollectorPart extends SQLCollectorPart {
public IdentityCollectorPart(BiFunction, R> provider) {
super(provider, Function.identity());
}
public SQLCollectorPart andThen(Function converter) {
return new SQLCollectorPart<>(provider(), converter);
}
}
}