SC 9.10.011(26) falha ao detectar tipo de banco na função de geração de log

SC falha ao detectar tipo de banco na função de geração de log, no meu caso a aplicação de geração de log está configurada para salvar numa tabela do meu banco principal em PostgreSQL mas a função abaixo não consegue estabelecer o tipo de banco e acaba usando a instrução de insert errada como se meu banco fosse SQLite (linha 27) quando deveria usar a instrução da linha 31 gerando erro de violação de key porque a coluna ID não aceita NULL e no meu caso nem deveria ser enviada (conforme linha 31);

O modulo de geração de log insere essa função abaixo no arquivo index.php de cada aplicação que geramos no SC:

function NM_gera_log_insert($orig=“Scriptcase”, $evento="", $texto="")
{
$delim = “’”;
$delim1 = “’”;
if (in_array(strtolower($_SESSION[‘scriptcase’][‘glo_tpbanco’]), $this->nm_bases_access))
{
$delim = “#”;
$delim1 = “#”;
}
if (isset($_SESSION[‘sc_session’][$this->sc_page][‘grid_transaction’][‘SC_sep_date’]) && !empty($_SESSION[‘sc_session’][$this->sc_page][‘grid_transaction’][‘SC_sep_date’]))
{
$delim = $_SESSION[‘sc_session’][$this->sc_page][‘grid_transaction’][‘SC_sep_date’];
$delim1 = $_SESSION[‘sc_session’][$this->sc_page][‘grid_transaction’][‘SC_sep_date1’];
}
$dt = $delim . date(‘Y-m-d H:i:s’) . $delim1;
$usr = isset($_SESSION[‘usr_login’]) ? $_SESSION[‘usr_login’] : “”;
if (in_array(strtolower($_SESSION[‘scriptcase’][‘glo_tpbanco’]), $this->nm_bases_access))
{
$dt = $delim . date(‘Y-m-d H:i:s’) . $delim1;
}
if (in_array(strtolower($_SESSION[‘scriptcase’][‘glo_tpbanco’]), $this->nm_bases_access))
{
$comando = "INSERT INTO public.tb_log_general (inserted_date, username, application, creator, ip_user, action, description) VALUES ($dt, " . $this->Db->qstr($usr) . “, ‘grid_transaction’, ‘$orig’, '” . $_SERVER[‘REMOTE_ADDR’] . "’, ‘$evento’, " . $this->Db->qstr($texto) . “)”;
}
elseif (in_array(strtolower($_SESSION[‘scriptcase’][‘glo_tpbanco’]), $this->nm_bases_sqlite))
{
$comando = "INSERT INTO public.tb_log_general (id, inserted_date, username, application, creator, ip_user, action, description) VALUES (NULL, $dt, " . $this->Db->qstr($usr) . “, ‘grid_transaction’, ‘$orig’, '” . $_SERVER[‘REMOTE_ADDR’] . "’, ‘$evento’, " . $this->Db->qstr($texto) . “)”;
}
else
{
$comando = "INSERT INTO public.tb_log_general (inserted_date, username, application, creator, ip_user, action, description) VALUES ($dt, " . $this->Db->qstr($usr) . “, ‘grid_transaction’, ‘$orig’, '” . $_SERVER[‘REMOTE_ADDR’] . "’, ‘$evento’, " . $this->Db->qstr($texto) . “)”;
}
$_SESSION[‘scriptcase’][‘sc_sql_ult_comando’] = $comando;
$rlog = $this->Db->Execute($comando);
if ($rlog === false)
{
$this->Erro->mensagem (FILE, LINE, “banco”, $this->Nm_lang[‘lang_errm_inst’], $this->Db->ErrorMsg());
}
}

Obs. é importante mencionar que eu já estava recebendo mensagens de erros eventuais de violação de key na geração de log desde a versão 9.10.0005 mas agora acontece sempre e por isso resolvi investigar mais fundo.

Ambiente:

  • SC 9.10.011(26);
  • php 8.1, debian 12 (amazon/debian-12-amd64-20231013-1532);
  • Apache/2.4.57 (Debian);
  • banco de dados PostgreSQL 11;
  • o módulo de segurança está num banco SQLITE na mesma maquina do scriptcase para facilitar a publicação em produção;

Olá, @jacobju.

Só para eu entender o cenário. A conexão da aplicação é PostgresSQL, mas o modulo de log é SQLITE, ao gerar ocorre esse erro, certo?

boa noite @yuri_esteves, pra ficar mais claro:

  • as aplicações do projeto salvam e lê de um banco PostgreSQL, e a tabela onde salvo os registros do módulo de log também estão neste banco;
  • não tem SQLite envolvido no processo de Log, mas tenho SQLite para o módulo de segurança;
  • a função que faz o insert do registros de log acaba não conseguindo detectar o banco correto e tenta enviar para a conexão do PostgreSQL uma instrução de insert com a coluna “id” como null que é a linha que só serve para o SQLite (que eu não uso) e por isso dá violação de key;