From 0bcf7907d475e994ad0f292ff522ff570e44caf5 Mon Sep 17 00:00:00 2001 From: Johannes Meyer Date: Fri, 26 Jun 2015 15:11:15 +0200 Subject: [PATCH] RepositoryQuery: Optimize value conversion in fetchColumn & -Pairs --- library/Icinga/Repository/RepositoryQuery.php | 27 ++++++++++++------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/library/Icinga/Repository/RepositoryQuery.php b/library/Icinga/Repository/RepositoryQuery.php index e1294e50f..d75165d3e 100644 --- a/library/Icinga/Repository/RepositoryQuery.php +++ b/library/Icinga/Repository/RepositoryQuery.php @@ -450,8 +450,10 @@ class RepositoryQuery implements QueryInterface, Iterator $columns = $this->getColumns(); $aliases = array_keys($columns); $column = is_int($aliases[0]) ? $columns[0] : $aliases[0]; - foreach ($results as & $value) { - $value = $this->repository->retrieveColumn($this->target, $column, $value); + if ($this->repository->providesValueConversion($this->target, $column)) { + foreach ($results as & $value) { + $value = $this->repository->retrieveColumn($this->target, $column, $value); + } } } @@ -475,15 +477,20 @@ class RepositoryQuery implements QueryInterface, Iterator if (! empty($results) && $this->repository->providesValueConversion($this->target)) { $columns = $this->getColumns(); $aliases = array_keys($columns); - $newResults = array(); - foreach ($results as $colOneValue => $colTwoValue) { - $colOne = $aliases[0] !== 0 ? $aliases[0] : $columns[0]; - $colTwo = count($aliases) < 2 ? $colOne : ($aliases[1] !== 1 ? $aliases[1] : $columns[1]); - $colOneValue = $this->repository->retrieveColumn($this->target, $colOne, $colOneValue); - $newResults[$colOneValue] = $this->repository->retrieveColumn($this->target, $colTwo, $colTwoValue); - } + $colOne = $aliases[0] !== 0 ? $aliases[0] : $columns[0]; + $colTwo = count($aliases) < 2 ? $colOne : ($aliases[1] !== 1 ? $aliases[1] : $columns[1]); + if ( + $this->repository->providesValueConversion($this->target, $colOne) + || $this->repository->providesValueConversion($this->target, $colTwo) + ) { + $newResults = array(); + foreach ($results as $colOneValue => $colTwoValue) { + $colOneValue = $this->repository->retrieveColumn($this->target, $colOne, $colOneValue); + $newResults[$colOneValue] = $this->repository->retrieveColumn($this->target, $colTwo, $colTwoValue); + } - $results = $newResults; + $results = $newResults; + } } return $results;