-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDqlQueryPlatform.php
More file actions
53 lines (42 loc) · 1.96 KB
/
Copy pathDqlQueryPlatform.php
File metadata and controls
53 lines (42 loc) · 1.96 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
<?php
declare(strict_types=1);
/*
* This file is part of the RollerworksSearch package.
*
* (c) Sebastiaan Stok <s.stok@rollerscapes.net>
*
* This source file is subject to the MIT license that is bundled
* with this source code in the file LICENSE.
*/
namespace Rollerworks\Component\Search\Doctrine\Orm\QueryPlatform;
use Rollerworks\Component\Search\Doctrine\Dbal\QueryPlatform\AbstractQueryPlatform;
use Rollerworks\Component\Search\Value\PatternMatch;
final class DqlQueryPlatform extends AbstractQueryPlatform
{
public function getPatternMatcher(PatternMatch $patternMatch, string $column): string
{
if (\in_array($patternMatch->getType(), [PatternMatch::PATTERN_EQUALS, PatternMatch::PATTERN_NOT_EQUALS], true)) {
$value = $this->createParamReferenceFor($patternMatch->getValue(), 'text');
if ($patternMatch->isCaseInsensitive()) {
$column = "LOWER({$column})";
$value = "LOWER({$value})";
}
return $column . ($patternMatch->isExclusive() ? ' <>' : ' =') . " {$value}";
}
$patternMap = [
PatternMatch::PATTERN_STARTS_WITH => "CONCAT(%s, '%%')",
PatternMatch::PATTERN_NOT_STARTS_WITH => "CONCAT(%s, '%%')",
PatternMatch::PATTERN_CONTAINS => "CONCAT('%%', %s, '%%')",
PatternMatch::PATTERN_NOT_CONTAINS => "CONCAT('%%', %s, '%%')",
PatternMatch::PATTERN_ENDS_WITH => "CONCAT('%%', %s)",
PatternMatch::PATTERN_NOT_ENDS_WITH => "CONCAT('%%', %s)",
];
$value = addcslashes($patternMatch->getValue(), $this->getLikeEscapeChars());
$value = \sprintf($patternMap[$patternMatch->getType()], $this->createParamReferenceFor($value, 'text'));
if ($patternMatch->isCaseInsensitive()) {
$column = "LOWER({$column})";
$value = "LOWER({$value})";
}
return $column . ($patternMatch->isExclusive() ? ' NOT' : '') . " LIKE {$value}";
}
}