Bugzilla – Attachment 69858 Details for
Bug 19828
Koha::Object->store should catch DBIC exceptions and raise Koha::Exceptions
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 19828: Make Koha::Object->store translate DBIC exceptions into Koha exceptions
Bug-19828-Make-KohaObject-store-translate-DBIC-exc.patch (text/plain), 2.83 KB, created by
Tomás Cohen Arazi (tcohen)
on 2017-12-18 16:54:09 UTC
(
hide
)
Description:
Bug 19828: Make Koha::Object->store translate DBIC exceptions into Koha exceptions
Filename:
MIME Type:
Creator:
Tomás Cohen Arazi (tcohen)
Created:
2017-12-18 16:54:09 UTC
Size:
2.83 KB
patch
obsolete
>From ff62b732fc167d11060f320384ca910ef8da0ae7 Mon Sep 17 00:00:00 2001 >From: Tomas Cohen Arazi <tomascohen@theke.io> >Date: Mon, 18 Dec 2017 13:48:56 -0300 >Subject: [PATCH] Bug 19828: Make Koha::Object->store translate DBIC exceptions > into Koha exceptions > >This patch introduces a try/catch block in store() and parses the error >when an exceptional situation takes place. > >It only deals with FK constraint violations. The rest of the DBIC exceptions >are rethrown. > >To test: > >- Apply this patch >- Run: > $ kshell > k$ prove t/db_dependent/Koha/Object.t >=> SUCCESS: Tests pass! >- Sign off :-D >--- > Koha/Exceptions/Object.pm | 5 +++++ > Koha/Object.pm | 28 +++++++++++++++++++++++++++- > 2 files changed, 32 insertions(+), 1 deletion(-) > >diff --git a/Koha/Exceptions/Object.pm b/Koha/Exceptions/Object.pm >index 2ffa1ec851..f2763a43a8 100644 >--- a/Koha/Exceptions/Object.pm >+++ b/Koha/Exceptions/Object.pm >@@ -7,6 +7,11 @@ use Exception::Class ( > 'Koha::Exceptions::Object' => { > description => 'Something went wrong!', > }, >+ 'Koha::Exceptions::Object::FKConstraint' => { >+ isa => 'Koha::Exceptions::Object', >+ description => "Foreign key constraint broken", >+ fields => ['broken_fk'] >+ }, > 'Koha::Exceptions::Object::MethodNotFound' => { > isa => 'Koha::Exceptions::Object', > description => "Invalid method", >diff --git a/Koha/Object.pm b/Koha/Object.pm >index fc30adc2b3..bcf6fd383a 100644 >--- a/Koha/Object.pm >+++ b/Koha/Object.pm >@@ -22,6 +22,7 @@ use Modern::Perl; > > use Carp; > use Mojo::JSON; >+use Try::Tiny; > > use Koha::Database; > use Koha::Exceptions::Object; >@@ -119,7 +120,32 @@ Returns: > sub store { > my ($self) = @_; > >- return $self->_result()->update_or_insert() ? $self : undef; >+ try { >+ return $self->_result()->update_or_insert() ? $self : undef; >+ } >+ catch { >+ # Catch problems and raise relevant exceptions >+ if (ref($_) eq 'DBIx::Class::Exception') { >+ if ( $_->{msg} =~ /Cannot add or update a child row: a foreign key constraint fails/ ) { >+ # FK constraints >+ # FIXME: MySQL error, if we support more DB engines we should implement this for each >+ if ( $_->{msg} =~ /FOREIGN KEY \(`(?<column>.*?)`\)/ ) { >+ Koha::Exceptions::Object::FKConstraint->throw( >+ error => 'Broken FK constraint', >+ broken_fk => $+{column} >+ ); >+ } >+ else { >+ # Catch-all for foreign key breakages. It will help find other use cases >+ $->rethrow(); >+ } >+ } >+ else { >+ # TODO: find other exceptions we could handle >+ $->rethrow(); >+ } >+ } >+ } > } > > =head3 $object->delete(); >-- >2.14.1
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
|
Splinter Review
Attachments on
bug 19828
:
69857
|
69858
|
69907
|
69908
|
69963
|
69964
|
69965
|
70048
|
70049
|
70050
|
70097
|
70098
|
70099
|
70100