<div dir="ltr">Opa Solli,<div><br></div><div style>Se eu tivesse visto esse mail antes teria te poupado a pesquisa, mas por outro lado, você chegou na mesma solução que eu, pelo mesmo motivo.</div><div style><br></div><div style>

Se estiver errado, estamos errando igual.</div><div style><br></div><div style>Quando vc só precisa validar se o campo existe ou não, blz. Você pode fazer um find_or_create() ou um update_orcreate().</div><div style><br>
</div>
<div style>Mas quando vc tem mais constraints e as suas mensagens de erro precisam ser mais precisas (!?) para o usuário você acaba tendo que parsear a string de erro lançada pelo banco, que eu não sei se é padrão.</div>
<div style>
<br></div><div style>Um problema nessa abordagem, é que você está sujeito a race conditions entre o momento que você consultou e o momento que você está gravando. Portanto, pode ser uma boa ideia usar transactions, que com DBIC é tranquilo também.</div>

<div style><br></div><div style>Quanto a performance, não tenho ideia, nem parei pra pensar nisso nesse momento (protótipo), mas é uma preocupação bastante pertinente, pra dizer o mínimo.</div><div style><br></div><div style>

Pessoal, não sou expert em DBIC, se houver solução melhor, estamos ouvindo.</div><div style><br></div><div style>[]'s</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">2013/9/14 Solli Honorio <span dir="ltr"><<a href="mailto:shonorio@gmail.com" target="_blank">shonorio@gmail.com</a>></span><br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><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 href="mailto:lucasmateus.oliveira@gmail.com" target="_blank">lucasmateus.oliveira@gmail.com</a>></span> escreveu:<div><div class="h5"><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 href="mailto:andre@andrewalker.net" target="_blank">andre@andrewalker.net</a>> escreveu:<br>
<div><div><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 href="http://sao-paulo.pm.org/" target="_blank">http://sao-paulo.pm.org/</a><br>
> SaoPaulo-pm mailing list: <a href="mailto:SaoPaulo-pm@pm.org" target="_blank">SaoPaulo-pm@pm.org</a><br>
> L<<a 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 href="http://sao-paulo.pm.org/" target="_blank">http://sao-paulo.pm.org/</a><br>
 SaoPaulo-pm mailing list: <a href="mailto:SaoPaulo-pm@pm.org" target="_blank">SaoPaulo-pm@pm.org</a><br>
 L<<a 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></div></div><br><br clear="all"><div class="im"><div><br></div>-- <br>"o animal satisfeito dorme". - Guimarães Rosa
</div></div>
<br>=begin disclaimer<br>
   Sao Paulo Perl Mongers: <a href="http://sao-paulo.pm.org/" target="_blank">http://sao-paulo.pm.org/</a><br>
 SaoPaulo-pm mailing list: <a href="mailto:SaoPaulo-pm@pm.org">SaoPaulo-pm@pm.org</a><br>
 L<<a 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></blockquote></div><br></div>