/*
 * call-seq:
 *    conn.cancel() -> String
 *
 * Requests cancellation of the command currently being
 * processed.
 *
 * Returns +nil+ on success, or a string containing the
 * error message if a failure occurs.
 */
static VALUE
pgconn_cancel(VALUE self)
{
        char errbuf[256];
        PGcancel *cancel;
        VALUE retval;
        int ret;

        cancel = PQgetCancel(get_pgconn(self));
        if(cancel == NULL)
                rb_raise(rb_ePGError,"Invalid connection!");

        ret = PQcancel(cancel, errbuf, 256);
        if(ret == 1) 
                retval = Qnil;
        else
                retval = rb_str_new2(errbuf);

        PQfreeCancel(cancel);
        return retval;
}