On Sun, Jan 13, 2008 at 10:41:43AM +0100, Patrick Weemeeuw wrote: > There is a small bug in find_or_new: when the find part > fails, it calls new_result with the hash containing the > values that were used for the search. It should use no > values at all instead.
This isn't a bug. If that's the behaviour you want, do my $o = $rs->find({ id => $id }) || $rs->new({}); > Example buggy case: $o = $...->find_or_new( { id => $id } ) > with id a not null primary key. When $id is undefined, there > is obviously no row in the DB, and a new result object is > returned. However, the object returned contains the column > id => NULL, which (1) is invalid for this kind of object, > and (2) prevents in some backends (e.g. Pg) that the > sequence is used to generate a unique id. So don't pass id if it isn't a valid value. Passing undef there is a bug in your code, not in DBIx::Class. The usual use of find_or_new is to pass a unique key plus additional attributes to be used for object creation (which are ignored in the find() by specifying the key attr as well). Consider for example my $stats = $schema->resultset('PageViews')->find_or_new( { page => $page, views => 0 }, { key => 'page' } ); $stats->views($stats->views + 1); $stats->insert_or_update; which would be entirely broken were your patch applied. Also for future reference, please ensure you include a test that fails without your patch applied and succeeds with it; any patch that doesn't come with tests is not going to be accepted - I'm aware some things can be difficult to test but DBIC is used by people to interact with their production databases so the bar has to be set high. -- Matt S Trout Need help with your Catalyst or DBIx::Class project? Technical Director http://www.shadowcat.co.uk/catalyst/ Shadowcat Systems Ltd. Want a managed development or deployment platform? http://chainsawblues.vox.com/ http://www.shadowcat.co.uk/servers/ _______________________________________________ List: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/dbix-class IRC: irc.perl.org#dbix-class SVN: http://dev.catalyst.perl.org/repos/bast/DBIx-Class/ Searchable Archive: http://www.grokbase.com/group/[EMAIL PROTECTED]