put_copy_data (PGconn)

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