get_result (PGconn)

    /*
     * 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(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);
            if (rb_block_given_p()) {
                    return rb_ensure(yield_pgresult, rb_pgresult,
                            pgresult_clear, rb_pgresult);
            }
            return rb_pgresult;
    }