The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package DBIx::Class::Schema::Journal::DB::AuditLog;

use base 'DBIx::Class::Core';

sub journal_define_table {
    my ( $class, $source, $schema_class ) = @_;

    $class->table($source->name . '_audit_log');

    # the create_id is the id of first insertion of the row
    # so we always know where to roll back to
    # and presumably should be supplied on every insert

    $class->add_columns(
        create_id => {
            data_type => 'integer',
            is_nullable => 0,
            is_foreign_key => 1,
        },
        delete_id => {
            data_type => 'integer',
            is_nullable => 1,
            is_foreign_key => 1,
        }
    );

    foreach my $column ( $source->primary_columns ) {
        my %column_info = %{$source->column_info($column)};
        delete $column_info{$_} for qw(
           is_autoincrement
           is_foreign_key
           default_value
           sequence
           auto_nextval
        );
        $class->add_column( $column => \%column_info );
    }

    $class->set_primary_key( $source->primary_columns );

    $class->belongs_to(created => "${schema_class}::ChangeLog", 'create_id');
    $class->belongs_to(deleted => "${schema_class}::ChangeLog", 'delete_id');
}

1;