The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl

package KiokuDB::Role::Immutable;
use Moose::Role;

use namespace::clean -except => 'meta';



__PACKAGE__

__END__

=pod

=head1 NAME

KiokuDB::Role::Immutable - A role for objects that are never updated.

=head1 SYNOPSIS

    with qw(KiokuDB::Role::Immutable);

=head1 DESCRIPTION

This is a role for objects that are never updated after they are inserted to
the database.

The object will be skipped entirely on all update/store operations unless it is
being collapsed for the first time, and its child objects will B<not> be
updated unless they are found while collapsing another object.

This means that:

    my $immutable = $kiokudb->lookup($id);

    $immutable->child->name("foo");

    $kiokudb->update($immutable);

will not work, you need to update the child directly:

    $kiokudb->update($immutable->child);

=cut