protected function requireFilterColumns(Filter $filter) { if ($filter instanceof FilterExpression) { if ($filter->getExpression() === '*') { return; // Wildcard only filters are ignored so stop early here to avoid joining a table for nothing } $alias = $filter->getColumn(); $this->requireColumn($alias); if ($this->isCustomvar($alias)) { $column = $this->getCustomvarColumnName($alias); } else { $column = $this->aliasToColumnName($alias); } if (isset($this->columnsWithoutCollation[$alias])) { $expression = $filter->getExpression(); if (is_array($expression)) { $filter->setExpression(array_map('strtolower', $expression)); } else { $filter->setExpression(strtolower($expression)); } } $filter->setColumn($column); } else { foreach ($filter->filters() as $filter) { $this->requireFilterColumns($filter); } } }
/** * Recurse the given filter and ensure that any string conversion is case-insensitive * * @param Filter $filter */ protected function lowerColumnsWithoutCollation(Filter $filter) { if ($filter instanceof FilterExpression) { if (in_array($filter->getColumn(), $this->columnsWithoutCollation) && strpos($filter->getColumn(), 'LOWER') !== 0) { $filter->setColumn('LOWER(' . $filter->getColumn() . ')'); $expression = $filter->getExpression(); if (is_array($expression)) { $filter->setExpression(array_map('strtolower', $expression)); } else { $filter->setExpression(strtolower($expression)); } } } else { foreach ($filter->filters() as $chainedFilter) { $this->lowerColumnsWithoutCollation($chainedFilter); } } }