Skip to content

Commit ca29295

Browse files
committed
Fix: Make case-insensitive search for the view filters
Signed-off-by: Kostiantyn Miakshyn <molodchick@gmail.com>
1 parent 149c3dd commit ca29295

1 file changed

Lines changed: 18 additions & 17 deletions

File tree

lib/Db/Row2Mapper.php

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -442,11 +442,11 @@ private function getFilterExpression(IQueryBuilder $qb, Column $column, string $
442442
switch ($operator) {
443443
case 'begins-with':
444444
$includeDefault = str_starts_with((string)($defaultValue ?? ''), $value);
445-
$filterExpression = $qb->expr()->like('value', $qb->createNamedParameter($this->db->escapeLikeParameter($value) . '%', $paramType));
445+
$filterExpression = $qb->expr()->ilike('value', $qb->createNamedParameter($this->db->escapeLikeParameter($value) . '%', $paramType));
446446
break;
447447
case 'ends-with':
448448
$includeDefault = str_ends_with((string)($defaultValue ?? ''), $value);
449-
$filterExpression = $qb->expr()->like('value', $qb->createNamedParameter('%' . $this->db->escapeLikeParameter($value), $paramType));
449+
$filterExpression = $qb->expr()->ilike('value', $qb->createNamedParameter('%' . $this->db->escapeLikeParameter($value), $paramType));
450450
break;
451451
case 'contains':
452452
$filterExpressions = [];
@@ -477,14 +477,14 @@ private function getFilterExpression(IQueryBuilder $qb, Column $column, string $
477477
if ($column->getType() === 'selection' && $column->getSubtype() === 'multi') {
478478
$value = str_replace(['"', '\''], '', $value);
479479
$filterExpression = $qb2->expr()->orX(
480-
$qb->expr()->like('value', $qb->createNamedParameter('[' . $this->db->escapeLikeParameter($value) . ']')),
481-
$qb->expr()->like('value', $qb->createNamedParameter('[' . $this->db->escapeLikeParameter($value) . ',%')),
482-
$qb->expr()->like('value', $qb->createNamedParameter('%,' . $this->db->escapeLikeParameter($value) . ']%')),
483-
$qb->expr()->like('value', $qb->createNamedParameter('%,' . $this->db->escapeLikeParameter($value) . ',%'))
480+
$qb->expr()->ilike('value', $qb->createNamedParameter('[' . $this->db->escapeLikeParameter($value) . ']')),
481+
$qb->expr()->ilike('value', $qb->createNamedParameter('[' . $this->db->escapeLikeParameter($value) . ',%')),
482+
$qb->expr()->ilike('value', $qb->createNamedParameter('%,' . $this->db->escapeLikeParameter($value) . ']%')),
483+
$qb->expr()->ilike('value', $qb->createNamedParameter('%,' . $this->db->escapeLikeParameter($value) . ',%'))
484484
);
485485
break;
486486
}
487-
$filterExpression = $qb->expr()->like('value', $qb->createNamedParameter('%' . $this->db->escapeLikeParameter($value) . '%', $paramType));
487+
$filterExpression = $qb->expr()->ilike('value', $qb->createNamedParameter('%' . $this->db->escapeLikeParameter($value) . '%', $paramType));
488488
break;
489489
case 'does-not-contain':
490490
if (is_array($value) && $column->getType() === Column::TYPE_USERGROUP) {
@@ -522,14 +522,15 @@ private function getFilterExpression(IQueryBuilder $qb, Column $column, string $
522522
if ($column->getType() === 'selection' && $column->getSubtype() === 'multi') {
523523
$value = str_replace(['"', '\''], '', $value);
524524
$filterExpression = $qb2->expr()->andX(
525-
$qb->expr()->notLike('value', $qb->createNamedParameter('[' . $this->db->escapeLikeParameter($value) . ']')),
526-
$qb->expr()->notLike('value', $qb->createNamedParameter('[' . $this->db->escapeLikeParameter($value) . ',%')),
527-
$qb->expr()->notLike('value', $qb->createNamedParameter('%,' . $this->db->escapeLikeParameter($value) . ']%')),
528-
$qb->expr()->notLike('value', $qb->createNamedParameter('%,' . $this->db->escapeLikeParameter($value) . ',%'))
529-
);
525+
$qb->expr()->andX(
526+
'NOT (' . $qb->expr()->iLike('value', $qb->createNamedParameter('[' . $this->db->escapeLikeParameter($value) . ']')) . ')',
527+
'NOT (' . $qb->expr()->iLike('value', $qb->createNamedParameter('[' . $this->db->escapeLikeParameter($value) . ',%')) . ')',
528+
'NOT (' . $qb->expr()->iLike('value', $qb->createNamedParameter('%,' . $this->db->escapeLikeParameter($value) . ']%')) . ')',
529+
'NOT (' . $qb->expr()->iLike('value', $qb->createNamedParameter('%,' . $this->db->escapeLikeParameter($value) . ',%')) . ')'
530+
));
530531
break;
531532
}
532-
$filterExpression = $qb->expr()->notLike('value', $qb->createNamedParameter('%' . $this->db->escapeLikeParameter($value) . '%', $paramType));
533+
$filterExpression = 'NOT (' . $qb->expr()->iLike('value', $qb->createNamedParameter('%' . $this->db->escapeLikeParameter($value) . '%', $paramType)) . ')';
533534
break;
534535
case 'is-equal':
535536
$includeDefault = $defaultValue === $value;
@@ -630,13 +631,13 @@ private function getMetaFilterExpression(IQueryBuilder $qb, int $columnId, strin
630631
private function getSqlOperator(string $operator, IQueryBuilder $qb, string $columnName, $value, $paramType): string {
631632
switch ($operator) {
632633
case 'begins-with':
633-
return $qb->expr()->like($columnName, $qb->createNamedParameter('%' . $this->db->escapeLikeParameter($value), $paramType));
634+
return $qb->expr()->ilike($columnName, $qb->createNamedParameter('%' . $this->db->escapeLikeParameter($value), $paramType));
634635
case 'ends-with':
635-
return $qb->expr()->like($columnName, $qb->createNamedParameter($this->db->escapeLikeParameter($value) . '%', $paramType));
636+
return $qb->expr()->ilike($columnName, $qb->createNamedParameter($this->db->escapeLikeParameter($value) . '%', $paramType));
636637
case 'contains':
637-
return $qb->expr()->like($columnName, $qb->createNamedParameter('%' . $this->db->escapeLikeParameter($value) . '%', $paramType));
638+
return $qb->expr()->ilike($columnName, $qb->createNamedParameter('%' . $this->db->escapeLikeParameter($value) . '%', $paramType));
638639
case 'does-not-contain':
639-
return $qb->expr()->notLike($columnName, $qb->createNamedParameter('%' . $this->db->escapeLikeParameter($value) . '%', $paramType));
640+
return 'NOT (' . $qb->expr()->ilike($columnName, $qb->createNamedParameter('%' . $this->db->escapeLikeParameter($value) . '%', $paramType)) . ')';
640641
case 'is-equal':
641642
return $qb->expr()->eq($columnName, $qb->createNamedParameter($value, $paramType));
642643
case 'is-not-equal':

0 commit comments

Comments
 (0)