package io.vertx.sqlclient.impl.command;
import io.vertx.sqlclient.Row;
import io.vertx.sqlclient.Tuple;
import io.vertx.sqlclient.impl.PreparedStatement;
import io.vertx.sqlclient.impl.QueryResultHandler;
import io.vertx.sqlclient.impl.TupleInternal;
import java.util.List;
import java.util.stream.Collector;
public class ExtendedQueryCommand<R> extends QueryCommandBase<R> {
public static <R> ExtendedQueryCommand<R> createQuery(
String sql,
PreparedStatement ps,
Tuple tuple,
boolean autoCommit,
Collector<Row, ?, R> collector,
QueryResultHandler<R> resultHandler) {
return new ExtendedQueryCommand<>(sql, ps, false, tuple, 0, null, false, autoCommit, collector, resultHandler);
}
public static <R> ExtendedQueryCommand<R> createQuery(
String sql,
PreparedStatement ps,
Tuple tuple,
int fetch,
String cursorId,
boolean suspended,
boolean autoCommit,
Collector<Row, ?, R> collector,
QueryResultHandler<R> resultHandler) {
return new ExtendedQueryCommand<>(sql, ps, false, tuple, fetch, cursorId, suspended, autoCommit, collector, resultHandler);
}
public static <R> ExtendedQueryCommand<R> createBatch(
String sql,
PreparedStatement ps,
List<Tuple> tuples,
boolean autoCommit,
Collector<Row, ?, R> collector,
QueryResultHandler<R> resultHandler) {
return new ExtendedQueryCommand<>(sql, ps, true, tuples, 0, null, false, autoCommit, collector, resultHandler);
}
protected final String sql;
public PreparedStatement ps;
protected final boolean batch;
protected final Object tuples;
protected final int fetch;
protected final String cursorId;
protected final boolean suspended;
private ExtendedQueryCommand(String sql,
PreparedStatement ps,
boolean batch,
Object tuples,
int fetch,
String cursorId,
boolean suspended,
boolean autoCommit,
Collector<Row, ?, R> collector,
QueryResultHandler<R> resultHandler) {
super(autoCommit, collector, resultHandler);
this.sql = sql;
this.ps = ps;
this.batch = batch;
this.tuples = tuples;
this.fetch = fetch;
this.cursorId = cursorId;
this.suspended = suspended;
}
public String prepare() {
if (ps != null) {
if (batch) {
for (Tuple tuple : (List<Tuple>) tuples) {
String msg = ps.prepare((TupleInternal) tuple);
if (msg != null) {
return msg;
}
}
return null;
} else {
return ps.prepare((TupleInternal) tuples);
}
}
return null;
}
public boolean isBatch() {
return batch;
}
public List<Tuple> paramsList() {
return batch ? (List<Tuple>) tuples : null;
}
public List<Class<?>> parameterTypes() {
Tuple tuple;
if (batch) {
List<Tuple> list = (List<Tuple>) tuples;
if (list.isEmpty()) {
return null;
}
tuple = list.get(0);
} else {
tuple = (Tuple) tuples;
}
return tuple.types();
}
public Tuple params() {
return batch ? null : (Tuple) tuples;
}
public PreparedStatement preparedStatement() {
return ps;
}
public int fetch() {
return fetch;
}
public String cursorId() {
return cursorId;
}
public boolean isSuspended() {
return suspended;
}
@Override
public String sql() {
return sql;
}
}