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.

Reply via email to