Hi,

On Apr 24, 2007, at 1:44 PM, Jess Robinson wrote:
On Thu, 19 Apr 2007, Pedro Melo wrote:
looking at CascadeActions::delete (http://search.cpan.org/src/ JROBINSON/DBIx-Class-0.07999_02/lib/DBIx/Class/Relationship/ CascadeActions.pm), the code deletes $self and then goes on to delete the related objects. Shouldn't this be the reverse?

If a database has FOREIGN KEYs statements with ON DELETE CASCADE, the second part will never find any elements to delete. Also, even if we don't have ON DELETE CASCADE at the database level, it makes more sense to me to first delete the related objects and only then delete the "parent" object.

DBIC much prefers that you allow/setup the database to do the delete-cascading, if it deleted the related objects first, and then the main one, then DB-side would never kick in. Also if the DB rels had ON CASCADE FAIL set, we'd never trigger it.

The DBIC-side cascade is merely to paper over the cracks of databases that don't support DB-side FK setting and so on.

First, I agree with you that cascade delete on the database side is probably best, and that the db-side cascading delete taking preference is documented in the Relationship.pm perldoc.

But allowing DBIC to perform the delete itself is useful when you have extra business logic attached to the delete action.

Besides, as a general rule, shouldn't child objects be destroyed before the parent?

Best regards,
--
Pedro Melo
Blog: http://www.simplicidade.org/notes/
Jabber ID: [EMAIL PROTECTED]
Use Jabber!



_______________________________________________
List: http://lists.rawmode.org/cgi-bin/mailman/listinfo/dbix-class
Wiki: http://dbix-class.shadowcatsystems.co.uk/
IRC: irc.perl.org#dbix-class
SVN: http://dev.catalyst.perl.org/repos/bast/trunk/DBIx-Class/
Searchable Archive: http://www.mail-archive.com/[email protected]/

Reply via email to