/*
 * call-seq:
 *    conn.put_copy_data( buffer ) -> Boolean
 *
 * Transmits _buffer_ as copy data to the server.
 * Returns true if the data was sent, false if it was
 * not sent (false is only possible if the connection
 * is in nonblocking mode, and this command would block).
 *
 * Raises an exception if an error occurs.
 */
static VALUE
pgconn_put_copy_data(self, buffer)
    VALUE self, buffer;
{
    int ret;
    VALUE error;
    PGconn *conn = get_pgconn(self);
    Check_Type(buffer, T_STRING);

    ret = PQputCopyData(conn, RSTRING_PTR(buffer),
            RSTRING_LEN(buffer));
    if(ret == -1) {
        error = rb_exc_new2(rb_ePGError, PQerrorMessage(conn));
        rb_iv_set(error, "@connection", self);
        rb_exc_raise(error);
    }
    return (ret) ? Qtrue : Qfalse;
}