/*
 * call-seq:
 *    conn.get_last_result( ) -> PGresult
 *
 * This function retrieves all available results
 * on the current connection (from previously issued
 * asynchronous commands like +send_query()+) and
 * returns the last non-NULL result, or +nil+ if no
 * results are available.
 *
 * This function is similar to +PGconn#get_result+
 * except that it is designed to get one and only
 * one result.
 */
static VALUE
pgconn_get_last_result(VALUE self)
{
    PGconn *conn = get_pgconn(self);
    VALUE rb_pgresult = Qnil;
    PGresult *cur, *prev;


    cur = prev = NULL;
    while ((cur = PQgetResult(conn)) != NULL) {
        int status;

        if (prev) PQclear(prev);
        prev = cur;

        status = PQresultStatus(cur);
        if (status == PGRES_COPY_OUT || status == PGRES_COPY_IN)
            break;
    }

    if (prev) {
        rb_pgresult = new_pgresult(prev, conn);
        pgresult_check(self, rb_pgresult);
    }

    return rb_pgresult;
}