<html>
<head>
<meta content="text/html; charset=ISO-8859-1"
http-equiv="Content-Type">
</head>
<body text="#000000" bgcolor="#FFFFFF">
<font size="-1">Já cai em s<font size="-1">ituações <font size="-1">em
que eu precisava identificar se a falha <font size="-1">foi
por <font size="-1">registro duplicado <font size="-1">ou
outro problema, consegui fazer isso faci<font size="-1">l
com DB<font size="-1">I </font>pra MySQL<font
size="-1">, claro que cada banco tem um <font
size="-1">retorno de erro diferente.<br>
<br>
<font size="-1">$db<font size="-1"><font size="-1">h</font>
= </font>DBI->connect($DSN, $<font
size="-1"><font size="-1">se<font size="-1">lf-></font></font>user</font>,
$self-><font size="-1">pass</font>);<br>
$dbh->{HandleError} = sub {
$self->MySQLerror(@_) };<br>
$dbh->{PrintError} = 0; $dbh->{RaiseError}
= 0;<br>
<br>
sub MySQLerror {<br>
<font size="-1"> my $self = shift<font
size="-1">;</font></font><br>
my $errno = $_[1]->err;<br>
if ($errno == 1062) {
#<a class="moz-txt-link-freetext" href="http://dev.mysql.com/doc/refman/5.0/en/error-messages-server.html">http://dev.mysql.com/doc/refman/5.0/en/error-messages-server.html</a><br>
$_[2] = 'ERR'; #[ ... ]; # supply
alternative return value<br>
$self->dupl<font size="-1">icated<font
size="-1">(</font>1);</font><br>
}<br>
return 1;<br>
}<br>
<br>
<font size="-1">Não sei se te ajuda<font
size="-1">.<br>
<br>
<font size="-1">Att,<br>
<font size="-1">Marcelo Milhomem<br>
<font size="-1"><font size="-1"><a class="moz-txt-link-abbreviated" href="http://www.is4web.com">www.is4web.com</a></font></font><br>
</font></font></font></font><br>
</font></font></font></font></font></font></font></font></font></font>
<div class="moz-cite-prefix">Em 14/09/2013 19:50, Solli Honorio
escreveu:<br>
</div>
<blockquote
cite="mid:CAAetMDFiPth0-H7cshZ8eRkiaEtRG94T9kmi4r0WoS+ZqpZR_g@mail.gmail.com"
type="cite">
<div dir="ltr">Bom, descobri um motivo para não utilizar a
abordagem que eu estava imaginando.
<div><br>
</div>
<div>O perl não possui um sistema de Exception decente, e o
DBIx::Class também não faz nada muito avançado neste sentido.
Atualmente o DBIx::Class gera um exception simplório através
do DBIx::Class::Exception, que não tem nenhuma maneira simples
de identificar o motivo do erro.</div>
<div><br>
</div>
<div>Na solução atual eu preciso parsear o mensagem de string,
mas isto tem um problema. Cada banco de dados pode gerar uma
mensagem diferente para o mesmo problema (neste caso colisão
de índice único) e aí eu preciso criar uma enorme estrutura de
parser para atender todos os bancos, ou pelo menos a maioria
(ah, que inveja do Java !!!).</div>
<div><br>
</div>
<div>Ou seja, é melhor ser educado e fazer as perguntas corretas
ao banco :D !!</div>
<div><br>
</div>
<div>Abraços,</div>
<div><br>
</div>
<div>Solli Honorio</div>
</div>
<div class="gmail_extra"><br>
<br>
<div class="gmail_quote">
Em 14 de setembro de 2013 15:22, Lucas Mateus <span dir="ltr"><<a
moz-do-not-send="true"
href="mailto:lucasmateus.oliveira@gmail.com"
target="_blank">lucasmateus.oliveira@gmail.com</a>></span>
escreveu:<br>
<blockquote class="gmail_quote" style="margin:0 0 0
.8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
Boa pergunta André. É um teste simples de fazer, que
acha de fazer em seu SGBD preferido e nos dizer ?<br>
<br>
<br>
<br>
Em 14/09/2013, às 14:39, André Walker <<a
moz-do-not-send="true" href="mailto:andre@andrewalker.net">andre@andrewalker.net</a>>
escreveu:<br>
<div class="HOEnZb">
<div class="h5"><br>
> On Sat, Sep 14, 2013 at 12:44:35PM -0300, Lucas
Mateus wrote:<br>
>> Para tornar esse processo mais rápido eu crio
um campo do tipo binary 16<br>
>> bytes e gravo o md5 (binario sem hexadecimal)
do email e utilizo ele para<br>
>> consulta.<br>
>> Algo assim: select id from users where
email_md5 = md5('fulano@bla') and email = 'fulano@bla';<br>
>> Onde somente o campo email_md5 tem index e você
tem certeza que ele sempre<br>
>> terá 16 bytes, se você tiver 1 milhão de
usuários essa consulta terá um<br>
>> custo risório. A segunda comparação é somente
para evitar colisões de md5 e<br>
>> o index é feito somente no campo email_md5.<br>
><br>
> Será que isso é realmente necessário? Quer dizer...
qual o problema de ter um<br>
> índice no campo email mesmo? De qualquer forma,
você já vai ter um custo<br>
> computacional na função md5 (ainda que pequeno), e
tenho a impressão que<br>
> índices em campos texto não são tão ruins assim.
Talvez varie de SGBD pra<br>
> SGBD? Em PostgreSQL, por exemplo, seria relevante
ter essa coluna email_md5?<br>
><br>
> Att.<br>
> André<br>
><br>
> =begin disclaimer<br>
> Sao Paulo Perl Mongers: <a moz-do-not-send="true"
href="http://sao-paulo.pm.org/" target="_blank">http://sao-paulo.pm.org/</a><br>
> SaoPaulo-pm mailing list: <a
moz-do-not-send="true"
href="mailto:SaoPaulo-pm@pm.org">SaoPaulo-pm@pm.org</a><br>
> L<<a moz-do-not-send="true"
href="http://mail.pm.org/mailman/listinfo/saopaulo-pm"
target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a>><br>
> =end disclaimer<br>
<br>
=begin disclaimer<br>
Sao Paulo Perl Mongers: <a moz-do-not-send="true"
href="http://sao-paulo.pm.org/" target="_blank">http://sao-paulo.pm.org/</a><br>
SaoPaulo-pm mailing list: <a moz-do-not-send="true"
href="mailto:SaoPaulo-pm@pm.org">SaoPaulo-pm@pm.org</a><br>
L<<a moz-do-not-send="true"
href="http://mail.pm.org/mailman/listinfo/saopaulo-pm"
target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a>><br>
=end disclaimer<br>
</div>
</div>
</blockquote>
</div>
<br>
<br clear="all">
<div><br>
</div>
-- <br>
"o animal satisfeito dorme". - Guimarães Rosa
</div>
<br>
<fieldset class="mimeAttachmentHeader"></fieldset>
<br>
<pre wrap="">=begin disclaimer
Sao Paulo Perl Mongers: <a class="moz-txt-link-freetext" href="http://sao-paulo.pm.org/">http://sao-paulo.pm.org/</a>
SaoPaulo-pm mailing list: <a class="moz-txt-link-abbreviated" href="mailto:SaoPaulo-pm@pm.org">SaoPaulo-pm@pm.org</a>
L<a class="moz-txt-link-rfc2396E" href="http://mail.pm.org/mailman/listinfo/saopaulo-pm"><http://mail.pm.org/mailman/listinfo/saopaulo-pm></a>
=end disclaimer
</pre>
</blockquote>
<br>
</body>
</html>