Database: Transform assembled binary values to hex format for pgsql

This commit is contained in:
Yonas Habteab 2022-05-20 12:31:46 +02:00
parent 8ba46ac3d3
commit 997517dc8d

View File

@ -5,8 +5,12 @@ namespace Icinga\Common;
use Icinga\Application\Config as IcingaConfig;
use Icinga\Data\ResourceFactory;
use Icinga\Util\DBUtils;
use ipl\Sql\Adapter\Pgsql;
use ipl\Sql\Config as SqlConfig;
use ipl\Sql\Connection;
use ipl\Sql\Insert;
use ipl\Sql\QueryBuilder;
use LogicException;
use PDO;
@ -41,7 +45,29 @@ trait Database
. ",NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'";
}
return new Connection($config);
$conn = new Connection($config);
if ($conn->getAdapter() instanceof Pgsql) {
$valuesTransformer = function (&$values) {
DBUtils::transformValues($values);
};
$conn->getQueryBuilder()
->on(QueryBuilder::ON_DELETE_ASSEMBLED, $valuesTransformer)
->on(QueryBuilder::ON_UPDATE_ASSEMBLED, $valuesTransformer)
->on(QueryBuilder::ON_ASSEMBLE_INSERT, function (Insert $insert) {
$values = $insert->getValues();
foreach ($insert->getValues() as $key => $value) {
if (DBUtils::isBinary($value)) {
$values[$key] = DBUtils::getBinaryExpr($value);
}
}
$insert->values(array_combine($insert->getColumns(), $values));
});
}
return $conn;
}
/**