/*
 * 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;
}