/*
 * call-seq:
 *    conn.get_result() -> PGresult
 *
 * 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.
 */
static VALUE
pgconn_get_result(self)
        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);
        pgresult_check(self, rb_pgresult);
    if (rb_block_given_p()) {
        return rb_ensure(yield_pgresult, rb_pgresult, 
                        pgresult_clear, rb_pgresult);
    }
        return rb_pgresult;
}