Skip Menu |

This queue is for tickets about the DBIx-Class-Journal CPAN distribution.

Report information
The Basics
Id: 56175
Status: resolved
Priority: 0/
Queue: DBIx-Class-Journal

People
Owner: Nobody in particular
Requestors: clayton [...] physics.umn.edu
Cc:
AdminCc:

Bug Information
Severity: (no value)
Broken in: (no value)
Fixed in: (no value)



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;
fixed in commit 9194