DB_ERROR_42883 operator does not exist: character varying <> integer; postgresql

Hi,

I have discovered this bug, in Dolibarr version 13.0.2, with postgres 13, and PHP 8.

Sorry to attach error log in spanish, which is my installation. I have posted it to the spanish forum as well, but it looks like there is little activity there.

Dolibarr ha detectado un error técnico.
Esta información puede ser útil para el diagnóstico (puede configurar la opción $dolibarr_main_prod to ‘1’ para eliminar estas notificaciones):
Fecha: 20210430174222
Dolibarr: 13.0.2 - https://www.dolibarr.org
Nivel de funciones: 0
PHP: 8.0.3
Servidor: Apache/2.4.46 (Unix) OpenSSL/1.1.1k PHP/8.0.3
SO: Linux gfgs01 5.11.16-arch1-1 #1 SMP PREEMPT Wed, 21 Apr 2021 17:22:13 +0000 x86_64
UserAgent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.86 Safari/537.36

URL solicitada: /dolibarr/htdocs/admin/limits.php?mainmenu=home
Referer: https://localhost/dolibarr/htdocs/admin/dict.php?id=10
Gestor de menú: eldy_menu.php

Módulos: user, societe, propal, commande, expedition, ficheinter, ticket, agenda, expensereport, fournisseur, supplier_proposal, reception, facture, salaries, loan, banque, paymentbybanktransfer, margin, product, accounting, tax, service, stock, projet, categorie
Tipo de gestor de base de datos: pgsql (postgresql 13.2)
Último error en solicitud de acceso de base de datos: SELECT taux as vat_rate, t.code as vat_code, t.localtax1 as localtax_rate1, t.localtax2 as localtax_rate2 FROM llx_c_tva as t, llx_c_country as c WHERE t.active=1 AND t.fk_pays = c.rowid AND c.code=‘PY’ AND (t.taux <> 0 OR t.localtax1 <>0 OR t.localtax2 <>0) ORDER BY t.taux ASC
Código de retorno de error para la última petición de acceso a la base de datos: DB_ERROR_42883
Información del último error de petición de acceso de base de datos: ERROR: 42883: el operador no existe: character varying <> integer\nLINE 1: …d AND c.code=‘PY’ AND (t.taux <> 0 OR t.localtax1 <>0 OR t.l…\n ^\nHINT: Ningún operador coincide en el nombre y tipos de argumentos. Puede ser necesario agregar conversión explícita de tipos.\nLOCATION: op_error, parse_oper.c:722

Precio unitario sin IVA de un producto: 3.33333 x Cantidad: 1 - IVA: 10% → Precio total después del redondeo: 3.33 / 0.34 / 3.67
Precio unitario sin IVA de un producto: 3.33333 x Cantidad: 2 - IVA: 10% → Precio total después del redondeo: 6.67 / 0.66 / 7.33

I have corrected the error in my installation, but I know this is not the correct way, as I don’t know how to make it work also in MySql.

I changed the following line, to get rid of the error:

diff dolibarr/htdocs/admin/limits.php /srv/http/dolibarr/htdocs/admin/limits.php
252c252
< $sql .= " WHERE t.active=1 AND t.fk_pays = c.rowid AND c.code=‘“.$db->escape($mysoc->country_code).”’ AND (t.taux <> 0 OR t.localtax1 <>0 OR t.localtax2 <>0)";

$sql .= " WHERE t.active=1 AND t.fk_pays = c.rowid AND c.code=‘“.$db->escape($mysoc->country_code).”’ AND (t.taux <> 0 OR t.localtax1**::numeric** <>0 OR t.localtax2**::numeric** <>0)";

but, this is particular to postgresql.

I am posting it here, in case somebody can pick it up, and see how to correctly fix it in the mainstream code.

Thanks and regards,
Gustavo.

$sql .= " WHERE t.active=1 AND t.fk_pays = c.rowid AND c.code=’".$db->escape($mysoc->country_code)."’ AND (t.taux <> 0 OR t.localtax1::numeric <>0 OR t.localtax2::numeric <>0)";