From babae3e068aa6048c0bc15dbfbb1620179ee4b31 Mon Sep 17 00:00:00 2001 From: Thomas Gelf Date: Wed, 12 Feb 2020 10:59:38 +0100 Subject: [PATCH] IcingaObjectResolver: support PostgreSQL --- library/Director/Resolver/IcingaObjectResolver.php | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/library/Director/Resolver/IcingaObjectResolver.php b/library/Director/Resolver/IcingaObjectResolver.php index 8a4e9b96..78297259 100644 --- a/library/Director/Resolver/IcingaObjectResolver.php +++ b/library/Director/Resolver/IcingaObjectResolver.php @@ -178,18 +178,20 @@ class IcingaObjectResolver */ protected function fetchInheritancePaths($baseTable, $relColumn) { - // select host_id, GROUP_CONCAT(parent_host_id ORDER BY weight) FROM icinga_host_inheritance group by host_id; + if ($this->db instanceof \Zend_Db_Adapter_Pdo_Pgsql) { + $groupColumn = "ARRAY_TO_STRING(ARRAY_AGG(parent_$relColumn ORDER BY weight), ',')"; + } else { + $groupColumn = "GROUP_CONCAT(parent_$relColumn ORDER BY weight SEPARATOR ',')"; + } $query = $this->db->select() ->from([ 'oi' => "${baseTable}_inheritance" ], [ $relColumn, - "GROUP_CONCAT(parent_$relColumn ORDER BY weight SEPARATOR ',')" + $groupColumn ]) ->group($relColumn) - ->order("LENGTH(GROUP_CONCAT(parent_$relColumn ORDER BY weight SEPARATOR ','))"); - - // pgsql: ARRAY_TO_STRING(ARRAY_AGG(---), ',') -> order? + ->order("LENGTH($groupColumn)"); return $this->db->fetchPairs($query); }