[Dbix-class] find_or_create and unique constraints
Bill Moseley
moseley at hank.org
Mon Oct 4 04:16:50 GMT 2010
Finally got back to looking at this today:
On Sun, Oct 3, 2010 at 9:14 AM, Bill Moseley <moseley at hank.org> wrote:
> around '_unique_queries' =3D> sub {
> my ( $orig, $self, $criteria, $attrs ) =3D @_;
>
> my @queries =3D $self->$orig( $criteria, $attrs);
>
> return @queries if @queries;
>
> my $cols =3D join ', ', keys %{$criteria};
>
> $self->throw_exception(
> "find must provide search criteria that includes primary keys(s) =
or
> an unique constraint. Columns [$cols] did not satisfy this requirement"
> );
>
> };
>
>
>
That method can be called with an empty hash so I modified to test that and
accept. There's probably other edge cases where there's problems I have not
considered. But, running my app's test suite turned up a few places where
find_or_create & update_or_create was not passing a full set of unique keys
(both cases a column had been added to a table and code not updated).
I modified the other code I posted a bit, too (to work with
update_or_create). All my tests are passing and now running another set of
application automated tests and DBIC tests. Mid week I can test code on a
few web servers to see if resolves the race conditions I'm seeing under
load.
-- =
Bill Moseley
moseley at hank.org
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.scsys.co.uk/pipermail/dbix-class/attachments/20101003/8ab=
8affe/attachment.htm
More information about the DBIx-Class
mailing list