É praticamente impossível prever TODAS as situações durante o desenvolvimento de um sistema, seja durante a análise, a programação, o teste e demais etapas do ciclo de vida de um programa.

#FAIL

Estava fazendo um sistema que conversa com um webservice, que eu mesmo desenvolvi, quando me deparo com um resultado um tanto indesejável.

Veja este pequeno trecho de código:

public void atualizaUltimaConsulta(int parametro)
{
	this.executaSQL("update TABELA set DATA_ULT_CONSULTA = current_date, HORA_ULT_CONSULTA = (current_time - 20) where PARAMETRO = " + parametro.ToString(), false);
}

Esta função faz parte de uma rotina de verificação de histórico: o sistema chama o webservice, executa um método que retorna um histórico de alterações e no final confirma o recebimento disparando a rotina atualizaUltimaConsulta, colocando a data e hora atuais no banco de dados, para que a seleção de novos registros de histórico a serem enviados em uma próxima requisição seja sempre os após a última consulta.

Atualizo o banco de dados com um tempo de 20 segundos antes, para que novos registros inseridos durante o processamento sejam incluídos na próxima “rodada” de verificação de histórico.

Até aí nada demais, algo (quase) perfeitamente normal.

Só que…

Era por volta da meia-noite quando fiz o teste desta rotina, e nas execuções posteriores nenhum registro era retornado, embora satisfazessem as condições para que eles sejam retornados.

Po##a, tem registro na tabela e por que nao retorna? É o c@r@lh0 de asa fumegante e voador!

Resolvi checar a tabela onde é gravada a data/hora da última consulta e eis o que eu vejo: A data ele atualizou certinho, como eu executei a rotina de confirmação de consulta depois da meia-noite, ele gravou o dia atual. Porém, no campo de hora, o maledeto me gravou 23:59, por causa da diferença de 20 segundos que retirei da hora atual, ou seja, estes registros só iriam aparecer no dia seguinte :-(

Resumindo: uma #fail de dimensionamento de tipo de dado, pois se ele fosse timestamp ao invés de campos separados isso não teria acontecido…

Mas, em produção, isso nunca aconteceu hehe.

Um abraço!