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:
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.
Subscribe: 



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