<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>