From c2549fa9ebaf8328ea6e60f68f506db89b8d78cd Mon Sep 17 00:00:00 2001 From: Johannes Meyer Date: Wed, 15 Jan 2025 14:17:40 +0100 Subject: [PATCH] UnreachableParent: Use driver specific types in CAST expressions --- library/Icingadb/Model/UnreachableParent.php | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/library/Icingadb/Model/UnreachableParent.php b/library/Icingadb/Model/UnreachableParent.php index 49062ed8..e6fc02dc 100644 --- a/library/Icingadb/Model/UnreachableParent.php +++ b/library/Icingadb/Model/UnreachableParent.php @@ -11,6 +11,7 @@ use ipl\Orm\Behaviors; use ipl\Orm\Model; use ipl\Orm\Query; use ipl\Orm\Relations; +use ipl\Sql\Adapter\Pgsql; use ipl\Sql\Connection; use ipl\Sql\Expression; use ipl\Sql\Select; @@ -115,15 +116,23 @@ class UnreachableParent extends DependencyNode private static function selectNodes(Connection $db, Model $root): Select { + if ($db->getAdapter() instanceof Pgsql) { + $binaryCast = "CAST('00000000000000000000' AS bytea20)"; + $booleanCast = "CAST('0' AS boolean)"; + } else { + $binaryCast = "CAST('' AS binary(20))"; + $booleanCast = '0'; + } + $rootQuery = DependencyNode::on($db) ->columns([ 'id' => 'id', 'child_id' => 'id', 'level' => new Expression('0'), 'host_id' => 'host_id', - 'service_id' => new Expression("COALESCE(%s, CAST('' as binary(20)))", ['service_id']), - 'redundancy_group_id' => new Expression("CAST('' as binary(20))"), - 'is_group_member' => new Expression('0') + 'service_id' => new Expression("COALESCE(%s, $binaryCast)", ['service_id']), + 'redundancy_group_id' => new Expression($binaryCast), + 'is_group_member' => new Expression($booleanCast) ]); if ($root instanceof Host) { $rootQuery->filter(Filter::all(