I have a DBIC schema, where all the classes use a common base class, and definition class. The base class loads common components, and overrides the update method in order to record changesets in an audit table. The definition class is a static class generated from the database. A typical class header looks something like:
package Schema::Base;
use base 'DBIx::Class::Core';
sub update {
my $self = shift;
# track changes to row
my $instance = $self->next::method(@_);
# save changeset to audit table
return $instance;
}
package Schema::Immutable::User;
use Moose;
use MooseX::NonMoose;
use namespace::autoclean;
extends 'DBIx::Class:Core';
__PACKAGE__->load_components("InflateColumn::DateTime");
package Schema::Mutable::User
use base ('Schema::Base', 'Schema::Immutable::User');
sub update {
my $self = shift;
# encrypt password
return $self->next::method(@_);
}
Everything was working fine until I added and an override to the update in the User class. Apparently having the override in the base class, and the User class conflict in some way. I'm using next::method(@_) to call the next update method, but it always hangs.
This is a CGI application. So when I hit "save" the browser spins its wheels until I hit escape to cancel the request. At this point, my logging picks back up and it shows that all the queries are being executed correctly, and quickly, but it hangs at the end of the User class, and does not progress until I hit escape in the browser.
UPDATE: This appears to be an issue with the interaction with catalyst. When run by itself this code works correctly. However, when executed from within a catalyst application it fails.