[Dbix-class] how to empty a Table? when there is no primary key

Peter Rabbitson rabbit+dbic at rabbit.us
Tue Mar 26 19:12:49 GMT 2013


On Mon, Mar 25, 2013 at 03:57:45PM +0000, David Cantrell wrote:
> On Mon, Mar 25, 2013 at 11:58:31AM +1300, Paul Findlay wrote:
> > > I tried to use delete_all, but there is no primary key in the table so it failed. what else can i do?
> > 
> > There is a discussion in the manual about this:
> > https://metacpan.org/module/DBIx::Class::Manual::Intro#The-Significance-and-Importance-of-Primary-Keys
> > 
> > But you could alternatively use
> > $schema->resultset('Mytable')->delete;
> > 
> > But this won't execute any on-delete triggers or cascade to MyTable's relationships.
> 
> I've always thought that this is something that should be handled by the
> database, not by DBIx::Class - or at least that it should be something
> that you have to explicitly turn on in DBIx::Class to support data
> sources which don't really do relationships.
> 

When DBIC was first worked on (2005) most available data sources either 
did not handle FK constraints or (much more often the case, even today) 
did not have them declared. As such the default of cascade_delete [1] is 
true for has_many's, as it is generally harmless (though wasteful) if 
FK-Cs are present, but is life-saving when they are not.

There is a plan on how to take folks "off the needle" but it requires a 
bit more work in the ResultSource area and eeryone capable of doing it 
has been busy lately.

So really just a heads up as "should be getting fixed sooner rather than 
later"

Cheers

[1] https://metacpan.org/module/DBIx::Class::Relationship::Base#cascade_delete



More information about the DBIx-Class mailing list