/*
* call-seq:
* conn.get_result() -> PGresult
* conn.get_result() {|pg_result| block }
*
* Blocks waiting for the next result from a call to
* +PGconn#send_query+ (or another asynchronous command), and returns
* it. Returns +nil+ if no more results are available.
*
* Note: call this function repeatedly until it returns +nil+, or else
* you will not be able to issue further commands.
*
* If the optional code block is given, it will be passed <i>result</i> as an argument,
* and the PGresult object will automatically be cleared when the block terminates.
* In this instance, <code>conn.exec</code> returns the value of the block.
*/
static VALUE
pgconn_get_result(VALUE self)
{
PGconn *conn = get_pgconn(self);
PGresult *result;
VALUE rb_pgresult;
result = PQgetResult(conn);
if(result == NULL)
return Qnil;
rb_pgresult = new_pgresult(result, conn);
if (rb_block_given_p()) {
return rb_ensure(rb_yield, rb_pgresult,
pgresult_clear, rb_pgresult);
}
return rb_pgresult;
}