Fantastic. Thank you again On Thursday, 9 May 2019 10:11:40 UTC-4, Dan Book wrote: > > It is so the eval returns true if it succeeds. If an exception is thrown, > eval always returns undef. Thus by this difference you can determine > without fail whether an exception occurred. > > -Dan > > On Thu, May 9, 2019 at 9:49 AM Luc Larochelle <[email protected] > <javascript:>> wrote: > >> Hi Dan, >> >> What does the " 1 " stands for in the line : if (eval { ...; *1* }) { ? >> >> I've never used that kind of notation before. I think it could be some >> sort of default *true ?* >> >> >> >> On Wednesday, 8 May 2019 14:10:51 UTC-4, Dan Book wrote: >>> >>> Testing $@ is not the best way to determine an exception occurred. I'd >>> recommend Syntax::Keyword::Try as it handles all the edge cases for you, >>> but otherwise this gets you most of the way: >>> >>> if (eval { ...; 1 }) { >>> # success >>> } else { >>> my $err = $@; >>> } >>> >>> And make sure you log errors and rethrow any exceptions you do not >>> handle. You will want to see the error logging later. >>> >>> -Dan >>> >>> On Wed, May 8, 2019 at 1:18 PM Luc Larochelle <[email protected]> >>> wrote: >>> >>>> This works just as expected. In my case I wanted to catch foreign key >>>> constraints. Now I'm prepared for the critics, I'll post my "del" route, >>>> it's from an Lite application serving a web app. I wonder if I'm doing >>>> things the right way. >>>> >>>> I tried to make it idempotent for GET, POST, PUT & DEL but since I have >>>> to deal with little exceptions in the given routes, they all have their >>>> definitions. For instance, :id is *id in the GET route, since its >>>> principal >>>> task is to display the whole table. The helpers though (model ?) are not >>>> dealing with exceptions at all and are used to execute simple tasks to the >>>> db given the params feeded by the routes. >>>> >>>> I'm very opened to discuss all of this, this has to be my most serious >>>> project since I started using Mojolicious and I'm learning frontend coding >>>> on-the-fly ... >>>> >>>> helper insertOne => sub { >>>> my ($c,$table) = @_; >>>> $c->sqlite->db->insert($table, $c->element); >>>> }; >>>> >>>> >>>> helper deleteOne => sub { >>>> >>>> my ($c,$table,$param) = @_; >>>> $c->sqlite->db->delete($table, {$tables->{$table} => $param}); >>>> }; >>>> >>>> >>>> >>>> del '/api/select/:table/:id' => sub { >>>> >>>> my $c = shift; >>>> if ($c->selectOne($c->param('id'))) { >>>> eval { $c->deleteOne($c->param('table'),$c->param('id')) }; >>>> unless($@) { >>>> $c->render(status => 200, json => {message => $c->param('id') . >>>> $messages->{'Del'}}); >>>> } elsif ($@ =~ /FOREIGN KEY constraint failed/) { >>>> $c->render(status => 400, json => {message => $c->param('id') . >>>> $messages->{'FK'}}); >>>> } >>>> } else { >>>> $c->render(status => 404, json => {message => "Not found"}); >>>> } >>>> >>>> }; >>>> >>>> >>>> >>>> On Wednesday, 20 March 2019 11:58:04 UTC-4, Luc Larochelle wrote: >>>>> >>>>> Thanks ! Maybe I read only the sections and bold titles :) >>>>> >>>>> I'll have a second look. >>>>> >>>>> >>>>> On Monday, 18 March 2019 12:35:48 UTC-4, Dan Book wrote: >>>>>> >>>>>> As mentioned in the documentation: "Any database errors will throw >>>>>> an exception as RaiseError is automatically enabled, so use eval or >>>>>> Try::Tiny <https://metacpan.org/pod/Try::Tiny> to catch them. " >>>>>> >>>>>> This is the standard way to handle errors in Perl. >>>>>> Syntax::Keyword::Try is also a nicer interface if you can use keyword >>>>>> plugins (perl 5.14+). >>>>>> >>>>>> -Dan >>>>>> >>>>>> On Mon, Mar 18, 2019 at 10:00 AM Luc Larochelle <[email protected]> >>>>>> wrote: >>>>>> >>>>>>> Hello Veesh, well to me that looks like "eval" , right ? I meant is >>>>>>> there a way with Mojo::SQLite to check errors ? >>>>>>> >>>>>>> On Saturday, 16 March 2019 15:12:11 UTC-4, Veesh Goldman wrote: >>>>>>>> >>>>>>>> Does Try::Tiny strike your fancy? It'll put the error into $_ in >>>>>>>> the catch block. >>>>>>>> >>>>>>>> Short of that, I'm fairly certain it'll crash your thread if it >>>>>>>> fails. >>>>>>>> >>>>>>>> On Fri, Mar 15, 2019, 10:22 PM Luc Larochelle <[email protected]> >>>>>>>> wrote: >>>>>>>> >>>>>>>>> Hello everyone, >>>>>>>>> >>>>>>>>> While a 'select' statement can be double checked by the presence >>>>>>>>> of the returned data, how can I confirm that statements such as >>>>>>>>> 'insert' , >>>>>>>>> 'update' or 'delete' are successful ? >>>>>>>>> >>>>>>>>> For instance, using SQL::Abstract and some helpers >>>>>>>>> >>>>>>>>> helper insertOne => sub { >>>>>>>>> my ($c,$table) = @_; >>>>>>>>> $c->sqlite->db->insert($table, $c->element); >>>>>>>>> }; >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> I've seen in the documentation that one could *eval* and look >>>>>>>>> into $@ , but is there a more "inline" way to do this ? >>>>>>>>> >>>>>>>>> Cheers ! >>>>>>>>> >>>>>>>>> Luc >>>>>>>>> >>>>>>>>> -- >>>>>>>>> You received this message because you are subscribed to the Google >>>>>>>>> Groups "Mojolicious" group. >>>>>>>>> To unsubscribe from this group and stop receiving emails from it, >>>>>>>>> send an email to [email protected]. >>>>>>>>> To post to this group, send email to [email protected]. >>>>>>>>> Visit this group at https://groups.google.com/group/mojolicious. >>>>>>>>> For more options, visit https://groups.google.com/d/optout. >>>>>>>>> >>>>>>>> -- >>>>>>> You received this message because you are subscribed to the Google >>>>>>> Groups "Mojolicious" group. >>>>>>> To unsubscribe from this group and stop receiving emails from it, >>>>>>> send an email to [email protected]. >>>>>>> To post to this group, send email to [email protected]. >>>>>>> Visit this group at https://groups.google.com/group/mojolicious. >>>>>>> For more options, visit https://groups.google.com/d/optout. >>>>>>> >>>>>> -- >>>> You received this message because you are subscribed to the Google >>>> Groups "Mojolicious" group. >>>> To unsubscribe from this group and stop receiving emails from it, send >>>> an email to [email protected]. >>>> To post to this group, send email to [email protected]. >>>> Visit this group at https://groups.google.com/group/mojolicious. >>>> To view this discussion on the web visit >>>> https://groups.google.com/d/msgid/mojolicious/e3480fbb-d830-461f-b644-33f3de62db18%40googlegroups.com >>>> >>>> <https://groups.google.com/d/msgid/mojolicious/e3480fbb-d830-461f-b644-33f3de62db18%40googlegroups.com?utm_medium=email&utm_source=footer> >>>> . >>>> For more options, visit https://groups.google.com/d/optout. >>>> >>> -- >> You received this message because you are subscribed to the Google Groups >> "Mojolicious" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to [email protected] <javascript:>. >> To post to this group, send email to [email protected] >> <javascript:>. >> Visit this group at https://groups.google.com/group/mojolicious. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/mojolicious/31a95d6e-acdf-429c-b8d0-1cf059338ad5%40googlegroups.com >> >> <https://groups.google.com/d/msgid/mojolicious/31a95d6e-acdf-429c-b8d0-1cf059338ad5%40googlegroups.com?utm_medium=email&utm_source=footer> >> . >> For more options, visit https://groups.google.com/d/optout. >> >
-- You received this message because you are subscribed to the Google Groups "Mojolicious" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at https://groups.google.com/group/mojolicious. To view this discussion on the web visit https://groups.google.com/d/msgid/mojolicious/05047eeb-8a77-4c2e-9abb-ef8541d5740a%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.
