/*
 * call-seq:
 *    conn.put_copy_end( [ error_message ] ) -> Boolean
 *
 * Sends end-of-data indication to the server.
 *
 * _error_message_ is an optional parameter, and if set,
 * forces the COPY command to fail with the string
 * _error_message_.
 *
 * Returns true if the end-of-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).
 */ 
static VALUE
pgconn_put_copy_end(argc, argv, self)
        int argc;
        VALUE *argv;
        VALUE self;
{
    VALUE str;
        VALUE error;
        int ret;
        char *error_message = NULL;
    PGconn *conn = get_pgconn(self);
    
    if (rb_scan_args(argc, argv, "01", &str) == 0)
        error_message = NULL;
    else
        error_message = StringValuePtr(str);
  
        ret = PQputCopyEnd(conn, error_message);
        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;
}