[Dbix-class] ON DELETE statement in Pg not avaiable in
schema::loader?
Moritz Onken
onken at houseofdesign.de
Mon Mar 24 17:49:48 GMT 2008
Am 21.03.2008 um 17:43 schrieb Matt S Trout:
> On Sat, Mar 08, 2008 at 06:11:22PM +0100, Moritz Onken wrote:
>> Wouldn't it be great (tm) if we could add an "on_delete" and
>> "on_update" config
>> to all the relationships? Like the "cascade_delete" config option.
>>
>> If the DMBS supports that type of actions DBIC does not have to take
>> care of it,
>> otherwise it does.
>
> Seems reasonable, but how well can we abstract it to be non-db-
> specific?
>
> If we can't, I think just using sqlt_deploy_hook is the answer.
I'd like to push this a little bit because I think it could be really
helpful. For now I applied a patch to the current 0.09 trunk which
allow to set on_delete and on_update on a relationship. This will not
break backwards comp. but generates the correct ouput if you use SQLT.
What do you think about a config option which tells DBIC to not handle
the trigger actions (on_delete on_update resp. cascade_delete)? If
this is set the DBMS is to handle those operations which will result
in a significant speed increase.
If this config option is not set DBIC is to handle all those actions
(CASCADE, SET NULL, RESTRICT, NO ACTION, SET DEFAULT).
This way it's still independent from the DBMS.
I just want to know if you guys think if this is useful and I'll try
to write patches and so on.
greets,
moritz
Index: /Users/mo/Documents/workspace/DBIx-Class/lib/SQL/Translator/
Parser/DBIx/Class.pm
===================================================================
--- /Users/mo/Documents/workspace/DBIx-Class/lib/SQL/Translator/Parser/
DBIx/Class.pm (revision 4223)
+++ /Users/mo/Documents/workspace/DBIx-Class/lib/SQL/Translator/Parser/
DBIx/Class.pm (working copy)
@@ -135,6 +135,8 @@
my $on_update = '';
if (defined $otherrelationship) {
+ $on_delete = $otherrelationship->{'attrs'}-
>{on_delete} || '';
+ $on_update = $otherrelationship->{'attrs'}-
>{on_update} || '';
$on_delete = $otherrelationship->{'attrs'}-
>{cascade_delete} ? 'CASCADE' : '';
$on_update = $otherrelationship->{'attrs'}-
>{cascade_copy} ? 'CASCADE' : '';
}
More information about the DBIx-Class
mailing list