Bug 37510: Make Koha::Object->delete throw Koha::Exception
This patch makes Koha::Object->delete wrap DBIC exceptions on FK
constraints and throw a Koha::Exception::Object::FKConstraint exception
instead. This will allow us better handling it from the callers.
To test:
1. Apply the unit tests patch
2. Run:
$ ktd --shell
k$ prove t/db_dependent/Koha/Object.t
=> FAIL: A DBIC exception is thrown instead, tests fail
3. Apply this patch
4. Repeat 2
=> SUCCESS: Tests pass!
5. Sign off :-D
Signed-off-by: David Nind <david@davidnind.com>
Signed-off-by: Pedro Amorim <pedro.amorim@ptfs-europe.com>
Signed-off-by: Katrin Fischer <katrin.fischer@bsz-bw.de>
(cherry picked from commit 923dc5e078)
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
This commit is contained in:
parent
7edc1c10a8
commit
3a95803c5e
|
|
@ -33,6 +33,11 @@ use Exception::Class (
|
|||
description => "Foreign key constraint broken",
|
||||
fields => ['broken_fk', 'value'],
|
||||
},
|
||||
'Koha::Exceptions::Object::FKConstraintDeletion' => {
|
||||
isa => 'Koha::Exceptions::Object',
|
||||
description => "Foreign key constraint broken on deleting resource",
|
||||
fields => [ 'column', 'fk', 'table', 'constraint' ],
|
||||
},
|
||||
'Koha::Exceptions::Object::MethodNotFound' => {
|
||||
isa => 'Koha::Exceptions::Object',
|
||||
description => "Invalid method",
|
||||
|
|
|
|||
|
|
@ -233,11 +233,32 @@ Returns:
|
|||
sub delete {
|
||||
my ($self) = @_;
|
||||
|
||||
my $deleted = $self->_result()->delete;
|
||||
my $deleted;
|
||||
|
||||
try {
|
||||
$deleted = $self->_result()->delete;
|
||||
} catch {
|
||||
if ( ref($_) eq 'DBIx::Class::Exception' ) {
|
||||
if ( $_->{msg} =~
|
||||
/Cannot delete or update a parent row\: a foreign key constraint fails \(\`(?<database>.*?)\`\.\`(?<table>.*?)\`, CONSTRAINT \`(?<constraint>.*?)\` FOREIGN KEY \(\`(?<fk>.*?)\`\) REFERENCES \`.*\` \(\`(?<column>.*?)\`\)/
|
||||
)
|
||||
{
|
||||
Koha::Exceptions::Object::FKConstraintDeletion->throw(
|
||||
column => $+{column},
|
||||
constraint => $+{constraint},
|
||||
fk => $+{fk},
|
||||
table => $+{table},
|
||||
);
|
||||
}
|
||||
$_->rethrow();
|
||||
}
|
||||
};
|
||||
|
||||
if ( ref $deleted ) {
|
||||
my $object_class = Koha::Object::_get_object_class( $self->_result->result_class );
|
||||
my $object_class = Koha::Object::_get_object_class( $self->_result->result_class );
|
||||
$deleted = $object_class->_new_from_dbic($deleted);
|
||||
}
|
||||
|
||||
return $deleted;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue