| 84 | | *{'Catalyst::Plugin::Session::Store::DBIC::Delegate::session'} = sub { |
| 85 | | my ($self, $key) = @_; |
| 86 | | |
| 87 | | my $row = $self->_session_row; |
| 88 | | |
| 89 | | unless ($row) { |
| 90 | | eval { |
| 91 | | $row = $self->model->find_or_create({ $self->id_field => $key }); |
| 92 | | }; |
| 93 | | if ($@ and $@ =~ /Duplicate entry/) { |
| 94 | | $row = $self->model->create({ $self->id_field => $key }); |
| 95 | | } elsif ($@) { |
| 96 | | die $@; |
| 97 | | } |
| 98 | | $self->_session_row($row); |
| | 83 | *{'DBIx::Class::ResultSet::find_or_create'} = sub { |
| | 84 | my $self = shift; |
| | 85 | my $attrs = (@_ > 1 && ref $_[$#_] eq 'HASH' ? pop(@_) : {}); |
| | 86 | my $hash = ref $_[0] eq 'HASH' ? shift : {@_}; |
| | 87 | my $exists = $self->find($hash, $attrs); |
| | 88 | # this bit is different |
| | 89 | return $exists if defined $exists; |
| | 90 | eval { $exists = $self->create($hash) }; |
| | 91 | if ($@ and $@ =~ /Duplicate entry/) { |
| | 92 | return $self->create($hash); |
| | 93 | } elsif ($@) { |
| | 94 | die $@; |
| | 95 | } else { |
| | 96 | return $exists; |