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