From 1bee2db5832ef54266029a5487093e636b097516 Mon Sep 17 00:00:00 2001 From: Johannes Meyer Date: Mon, 13 Jun 2022 14:00:26 +0200 Subject: [PATCH] DbConnection: Only ignore the `*` for equal/unequal conditions fixes #4813 --- library/Icinga/Data/Db/DbConnection.php | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/library/Icinga/Data/Db/DbConnection.php b/library/Icinga/Data/Db/DbConnection.php index 26ccb6bb1..ad3f1b6bd 100644 --- a/library/Icinga/Data/Db/DbConnection.php +++ b/library/Icinga/Data/Db/DbConnection.php @@ -6,8 +6,8 @@ namespace Icinga\Data\Db; use DateTime; use DateTimeZone; use Exception; -use Icinga\Data\Filter\FilterMatch; -use Icinga\Data\Filter\FilterMatchNot; +use Icinga\Data\Filter\FilterEqual; +use Icinga\Data\Filter\FilterNotEqual; use Icinga\Data\Inspectable; use Icinga\Data\Inspection; use PDO; @@ -544,6 +544,9 @@ class DbConnection implements Selectable, Extensible, Updatable, Reducible, Insp $sign = $filter->getSign(); $value = $filter->getExpression(); + $matchWildcard = $sign === '=' && ! $filter instanceof FilterEqual + || $sign === '!=' && ! $filter instanceof FilterNotEqual; + if (is_array($value)) { $comp = []; $pattern = []; @@ -579,13 +582,13 @@ class DbConnection implements Selectable, Extensible, Updatable, Reducible, Insp } return count($sql) === 1 ? $sql[0] : '(' . implode(" $operator ", $sql) . ')'; - } elseif ($filter instanceof FilterMatch && $value !== null && strpos($value, '*') !== false) { + } elseif ($matchWildcard && $value !== null && strpos($value, '*') !== false) { if ($value === '*') { return $column . ' IS NOT NULL'; } return $column . ' LIKE ' . $this->dbAdapter->quote(preg_replace('~\*~', '%', $value)); - } elseif ($filter instanceof FilterMatchNot && $value !== null && strpos($value, '*') !== false) { + } elseif ($matchWildcard && $value !== null && strpos($value, '*') !== false) { if ($value === '*') { return $column . ' IS NULL'; }