package com.github.davidmoten.rx.jdbc;
import com.github.davidmoten.rx.jdbc.QuerySelect.Builder;
import rx.Observable;
import rx.Observable.Transformer;
import rx.functions.Func1;
/**
* Transformer corresponding to the QuerySelectOperation.
*
* @param <T>
*/
final class QuerySelectTransformer<T, R> implements Transformer<R, T> {
private final Builder builder;
private final ResultSetMapper<? extends T> function;
private final OperatorType operatorType;
/**
* Constructor.
*
* @param builder
* @param function
* @param operatorType
* @param resultSetTransform
*/
QuerySelectTransformer(final QuerySelect.Builder builder,
final ResultSetMapper<? extends T> function, final OperatorType operatorType) {
this.builder = builder;
this.function = function;
this.operatorType = operatorType;
}
@Override
public Observable<T> call(Observable<R> source) {
if (operatorType == OperatorType.PARAMETER)
return builder.parameters(source).get(function);
else if (operatorType == OperatorType.DEPENDENCY)
// dependency
return builder.dependsOn(source).get(function);
else // PARAMETER_LIST
{
@SuppressWarnings("unchecked")
Observable<Observable<Object>> obs = (Observable<Observable<Object>>) source;
return obs.concatMap(new Func1<Observable<Object>, Observable<T>>() {
@Override
public Observable<T> call(Observable<Object> parameters) {
return builder.parameters(parameters).get(function);
}
});
}
}
}