Subject: | Common audit tables (changelog/changeset) prefix |
Date: | Wed, 31 Mar 2010 13:16:46 -0500 |
To: | bug-DBIx-Class-Journal [...] rt.cpan.org |
From: | Andy Clayton <clayton [...] physics.umn.edu> |
Hello,
Thanks for such a useful module. During my use I found it helpful to be
able to prefix the common changelog and changeset table names (usually
to match an existing prefix on the audithistory and auditlog tables). If
you are interested I have attached my patch. Please feel free to also
let me know if you see a better or cleaner way to implement this
functionality.
Thanks again,
-Andy
Index: Journal.pm
===================================================================
--- Journal.pm (revision 1401)
+++ Journal.pm (revision 1422)
@@ -16,6 +16,7 @@
__PACKAGE__->mk_classdata('_journal_schema'); ## schema object for journal
__PACKAGE__->mk_classdata('journal_component');
__PACKAGE__->mk_classdata('journal_nested_changesets');
+__PACKAGE__->mk_classdata('journal_prefix');
use strict;
use warnings;
@@ -33,6 +34,20 @@
$journal_schema_class->compose_namespace( $c.'::Journal')
);
my $comp = $self->journal_component || "Journal";
+
+ my $prefix = $self->journal_prefix || '';
+ foreach my $audit (qw(ChangeSet ChangeLog)) {
+ my $class = blessed($proto) . "::$audit";
+
+ Class::C3::Componentised->inject_base($class, "DBIx::Class::Schema::Journal::DB::$audit");
+
+ $class->journal_define_table(blessed($proto), $prefix);
+
+ $proto->register_class($audit, $class);
+
+ $self->register_class($audit, $class)
+ if $self->journal_copy_sources;
+ }
## Create auditlog+history per table
my %j_sources = map { $_ => 1 } $self->journal_sources
@@ -109,7 +124,7 @@
Class::C3::Componentised->inject_base($class, "DBIx::Class::Schema::Journal::DB::$audit");
- $class->journal_define_table($source);
+ $class->journal_define_table($source, blessed($journal_schema));
$journal_schema->register_class($audit_source, $class);
@@ -170,5 +185,4 @@
$self->_journal_schema->current_session($sessionid);
}
-
1;
Index: Journal/DB.pm
===================================================================
--- Journal/DB.pm (revision 1401)
+++ Journal/DB.pm (revision 1422)
@@ -7,10 +7,10 @@
__PACKAGE__->mk_group_accessors( simple => 'current_session' );
__PACKAGE__->mk_group_accessors( simple => '_current_changeset_container' );
-DBIx::Class::Schema::Journal::DB->load_classes(qw(ChangeSet ChangeLog));
-
require DBIx::Class::Schema::Journal::DB::AuditLog;
require DBIx::Class::Schema::Journal::DB::AuditHistory;
+require DBIx::Class::Schema::Journal::DB::ChangeLog;
+require DBIx::Class::Schema::Journal::DB::ChangeSet;
sub _current_changeset {
my $self = shift;
Index: Journal/DB/ChangeLog.pm
===================================================================
--- Journal/DB/ChangeLog.pm (revision 1401)
+++ Journal/DB/ChangeLog.pm (revision 1422)
@@ -2,33 +2,37 @@
use base 'DBIx::Class::Core';
-__PACKAGE__->load_components(qw/Ordered/);
-__PACKAGE__->table('changelog');
-
-__PACKAGE__->add_columns(
- ID => {
- data_type => 'integer',
- is_auto_increment => 1,
- is_primary_key => 1,
- is_nullable => 0,
- },
- changeset_id => {
- data_type => 'integer',
- is_nullable => 0,
- is_foreign_key => 1,
- },
- order_in => {
- data_type => 'integer',
- is_nullable => 0,
- },
-);
-
-
-__PACKAGE__->set_primary_key('ID');
-__PACKAGE__->add_unique_constraint('setorder', [ qw/changeset_id order_in/ ]);
-__PACKAGE__->belongs_to('changeset', 'DBIx::Class::Schema::Journal::DB::ChangeSet', 'changeset_id');
-
- __PACKAGE__->position_column('order_in');
- __PACKAGE__->grouping_column('changeset_id');
+sub journal_define_table {
+ my ( $class, $schema_class, $prefix ) = @_;
+
+ $class->load_components(qw/Ordered/);
+ $class->table($prefix . 'changelog');
+
+ $class->add_columns(
+ ID => {
+ data_type => 'integer',
+ is_auto_increment => 1,
+ is_primary_key => 1,
+ is_nullable => 0,
+ },
+ changeset_id => {
+ data_type => 'integer',
+ is_nullable => 0,
+ is_foreign_key => 1,
+ },
+ order_in => {
+ data_type => 'integer',
+ is_nullable => 0,
+ },
+ );
+
+
+ $class->set_primary_key('ID');
+ $class->add_unique_constraint('setorder', [ qw/changeset_id order_in/ ]);
+ $class->belongs_to('changeset', "${schema_class}::ChangeSet", 'changeset_id');
+
+ $class->position_column('order_in');
+ $class->grouping_column('changeset_id');
+}
1;
Index: Journal/DB/AuditHistory.pm
===================================================================
--- Journal/DB/AuditHistory.pm (revision 1401)
+++ Journal/DB/AuditHistory.pm (revision 1422)
@@ -3,7 +3,7 @@
use base 'DBIx::Class::Core';
sub journal_define_table {
- my ( $class, $source ) = @_;
+ my ( $class, $source, $schema_class ) = @_;
$class->table($source->name . '_audit_history');
@@ -40,7 +40,7 @@
$class->add_column($column => \%hist_info);
}
- $class->belongs_to(change => 'DBIx::Class::Schema::Journal::DB::ChangeLog', 'audit_change_id');
+ $class->belongs_to(change => "${schema_class}::ChangeLog", 'audit_change_id');
}
1;
Index: Journal/DB/AuditLog.pm
===================================================================
--- Journal/DB/AuditLog.pm (revision 1401)
+++ Journal/DB/AuditLog.pm (revision 1422)
@@ -3,7 +3,7 @@
use base 'DBIx::Class::Core';
sub journal_define_table {
- my ( $class, $source ) = @_;
+ my ( $class, $source, $schema_class ) = @_;
$class->table($source->name . '_audit_log');
@@ -26,8 +26,8 @@
$class->set_primary_key( $source->primary_columns );
- $class->belongs_to(created => 'DBIx::Class::Schema::Journal::DB::ChangeLog', 'create_id');
- $class->belongs_to(deleted => 'DBIx::Class::Schema::Journal::DB::ChangeLog', 'delete_id');
+ $class->belongs_to(created => "${schema_class}::ChangeLog", 'create_id');
+ $class->belongs_to(deleted => "${schema_class}::ChangeLog", 'delete_id');
}
1;
Index: Journal/DB/ChangeSet.pm
===================================================================
--- Journal/DB/ChangeSet.pm (revision 1401)
+++ Journal/DB/ChangeSet.pm (revision 1422)
@@ -2,44 +2,48 @@
use base 'DBIx::Class::Core';
-__PACKAGE__->load_components(qw/InflateColumn::DateTime/);
-__PACKAGE__->table('changeset');
-
-__PACKAGE__->add_columns(
- ID => {
- data_type => 'integer',
- is_auto_increment => 1,
- is_primary_key => 1,
- is_nullable => 0,
- },
- user_id => {
- data_type => 'integer',
- is_nullable => 1,
- is_foreign_key => 1,
- },
- set_date => {
- data_type => 'timestamp',
- is_nullable => 0,
- },
- session_id => {
- data_type => 'varchar',
- size => 255,
- is_nullable => 1,
- },
-);
+sub journal_define_table {
+ my ( $class, $schema_class, $prefix ) = @_;
+
+ $class->load_components(qw/InflateColumn::DateTime/);
+ $class->table($prefix . 'changeset');
+
+ $class->add_columns(
+ ID => {
+ data_type => 'integer',
+ is_auto_increment => 1,
+ is_primary_key => 1,
+ is_nullable => 0,
+ },
+ user_id => {
+ data_type => 'integer',
+ is_nullable => 1,
+ is_foreign_key => 1,
+ },
+ set_date => {
+ data_type => 'timestamp',
+ is_nullable => 0,
+ },
+ session_id => {
+ data_type => 'varchar',
+ size => 255,
+ is_nullable => 1,
+ },
+ );
+
+ $class->set_primary_key('ID');
+}
sub new {
my $self = shift->next::method(@_);
- # I think we should not do the following and
- # instead use DBIx::Class::TimeStamp. If I
- # can think of a good way (passing a version on
- # import?) to do it and retain backcompat I will.
- #
- # --fREW, 01-27-2010
+ # I think we should not do the following and
+ # instead use DBIx::Class::TimeStamp. If I
+ # can think of a good way (passing a version on
+ # import?) to do it and retain backcompat I will.
+ #
+ # --fREW, 01-27-2010
$self->set_date(gmtime);
return $self;
}
-__PACKAGE__->set_primary_key('ID');
-
1;