package cassandra.cql;
import cassandra.CassandraFuture;
import cassandra.CassandraSession;
import cassandra.protocol.CassandraMessage;
public class ResultSetFuture {
private final CassandraSession.ResultFuture resultFuture;
private final AbstractStatement<?> statement;
public ResultSetFuture(CassandraSession.ResultFuture resultFuture, AbstractStatement<?> statement) {
if (resultFuture == null) {
throw new NullPointerException("resultFuture");
}
if (statement == null) {
throw new NullPointerException("statement");
}
this.resultFuture = resultFuture;
this.statement = statement;
}
public CassandraSession.ResultFuture resultFuture() {
return resultFuture;
}
public boolean isSuccess() {
return resultFuture.promise().isSuccess();
}
public Throwable cause() {
return resultFuture.promise().cause();
}
public ResultSet get() {
return get(CassandraFuture.DEADLINE);
}
public ResultSet get(long timeout) {
CassandraMessage.Result result = resultFuture.get(timeout);
ResultSet resultSet;
switch (result.kind) {
case ROWS:
CassandraMessage.Result.Rows rows = (CassandraMessage.Result.Rows)result;
RowMetadata metadata = null;
if (statement instanceof PreparedStatement) {
metadata = ((PreparedStatement)statement).getMetadata();
}
if (rows.metadata.columns != null) {
metadata = new RowMetadata(rows.metadata.columns);
}
resultSet = new ResultSet(statement, metadata, rows.rows, rows.metadata.pagingState, result.getTracingId());
break;
default:
resultSet = ResultSet.EMPTY_RESULT_SET;
break;
}
return resultSet;
}
}