Semana Complicada

por Walter Cruz on 10/07/2006
in PHP, PostgreSQL, SQL Server

Já tiveram uma semana complicada, de bug atrás de bug? Os meus últimos dias da semana passada foram assim.

Eu e o Ricardo pegamos a missão de passar um certo trecho de código de Delphi para PHP. Como nem eu nem ele lembramos muito de Delphi, e o código estava bem esquisito, ficamos empacados. O Diogo, que acabou de entrar aqui, ficou com a missão de entender o código. E saiu-se bem.

E lá vamos, o Ricardo e eu implementar o código em PHP.

Porém, devido às conversões automáticas do PHP, travamos aqui:


$parte = 138147;
$resultado = pow($parte,3);
$modulo = $resultado % 777777;  
echo($modulo);
 

A váriavel $modulo, que deveria ser 228957 se transformou em 418495.

Poderíamos fazer em python, e apesar deu ter feito um esboço de código em python, esbarramos no fato de não termos um servidor apache com mod_python, e também com o fato as outras pessoas da equipe (ainda) não conhecem muito python.

O código em python:


parte = 138147;
resultado = pow(parte,3)
modulo = resultado % 777777
print(modulo)
 

Ficamos num impasse - nossa intenção de fazer em PHP tinha ido por água abaixo. Em python, ainda não era viável. Como o sistema roda em Delphi + SQL Server, optamos por fazer uma função no SQL Server.

Porém, precisávamos de usar um array(na verdade, uma hash) na função. E, pra nossa alegria, o SQL Server não suporta arrays!

O Diogo já estava instalando o Tomcat para fazer em Java(!), quando eu finalmente reparei: um hash é uma tabela de duas colunas.. E lá vamos nós de novo...

Para quem acha que a novela acabou por aqui, ledo engano: ao usar o DbVisualizer, usando o driver jTDS para SQL Server, aparecia uma mensagem de erro maluca ao tentar criar a função no banco, dizendo que tal arquivo não existia (mas quem estava mexendo, com arquivos? Eu só queria criar uma função no banco!).

Mas, ao tentar fazer a implementação em python, eu havia baixado o pymssql (extensão do Python para conectar ao SQLServer). E foi assim, executando na mão dois arquivos, um que apagava a função no banco e outro que a criava, que conseguimos fazer a função.

Não que os nossos problemas tivessem acabado. Na verdade, eu não conheço nada de Transact-SQL (a variante SQL do SQL Server). Conheço um pouco mais as variantes do MySQL e do Postgres (PL/PgSQL). Mas que diferença! Transact-SQL, não tem loop for, todas as atribuições de variáveis tem de ter a palavra SET antes, é uma linguagem muito feia mesmo. Resultado: uma função que levou um pouco mais de uma hora para ser feita em php (e em python) levou um dia inteiro para ser feita em Transact-SQL.

Endereço de trackback para este post

Trackback URL (clique direito e copie atalho/localização do link)

1 comentário


Notice: Undefined index: comment_secret in /home/walter/repositories/whissip-dev/blogs/inc/comments/model/_comment.class.php on line 161
  1. Pois é Walter, trabalhar com produtos MS é isso aí mesmo...

    E PHP é uma colcha de retalhos, não dá pra esperar muito.

    Quanto a seu código Python, dá pra compactar ele de duas foras.

    Primeira:

    parte = 138147
    modulo = pow(parte, 3, 777777)
    print modulo

    Segunda (acho esta mais clara):

    parte = 138147
    modulo = (parte ** 3) % 777777
    print modulo

    []'s

Share Your Thoughts


Seu endereço de e-mail não será revelado nesse site.

Sua URL será exibida.
PobreExcelente
(Quebras de linha se tornam <br />)
(Nome, e-mail & website)
(Permitir que usuários o contatem através de um formulário eletrônico (seu e-mail não será exibido.))
Subscribe to comments by email

You can just use your OpenID to provide your name, e-mail and url.