Skip to content

Commit 1e66123

Browse files
committed
Use iLike for case insensitive like queries
1 parent 6c3ec23 commit 1e66123

File tree

2 files changed

+30
-1
lines changed

2 files changed

+30
-1
lines changed

src/PostgresDocumentStore.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -713,7 +713,7 @@ private function filterToWhereClause(Filter $filter, $argsCount = 0): array
713713
$propParts = explode('->', $prop);
714714
$lastProp = array_pop($propParts);
715715
$prop = implode('->', $propParts) . '->>'.$lastProp;
716-
return ["$prop LIKE :a$argsCount", ["a$argsCount" => $filter->val()], ++$argsCount];
716+
return ["$prop iLIKE :a$argsCount", ["a$argsCount" => $filter->val()], ++$argsCount];
717717
case DocumentStore\Filter\NotFilter::class:
718718
/** @var DocumentStore\Filter\NotFilter $filter */
719719
$innerFilter = $filter->innerFilter();

tests/PostgresDocumentStoreTest.php

+29
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
use EventEngine\DocumentStore\Filter\EqFilter;
2020
use EventEngine\DocumentStore\Filter\GtFilter;
2121
use EventEngine\DocumentStore\Filter\InArrayFilter;
22+
use EventEngine\DocumentStore\Filter\LikeFilter;
2223
use EventEngine\DocumentStore\Filter\LtFilter;
2324
use EventEngine\DocumentStore\Filter\NotFilter;
2425
use EventEngine\DocumentStore\Filter\OrFilter;
@@ -345,6 +346,34 @@ public function it_handles_not_any_of_id_filter()
345346
$this->assertEquals(['bat'], $vals);
346347
}
347348

349+
/**
350+
* @test
351+
*/
352+
public function it_handles_case_insensitive_like_filter()
353+
{
354+
$collectionName = 'test_case_insensitive_like_filter';
355+
$this->documentStore->addCollection($collectionName);
356+
357+
$firstDocId = Uuid::uuid4()->toString();
358+
$secondDocId = Uuid::uuid4()->toString();
359+
$thirdDocId = Uuid::uuid4()->toString();
360+
361+
$this->documentStore->addDoc($collectionName, $firstDocId, ['foo' => 'some BaR val']);
362+
$this->documentStore->addDoc($collectionName, $secondDocId, ['foo' => 'some bAt val']);
363+
$this->documentStore->addDoc($collectionName, $thirdDocId, ['foo' => 'SOME baz VAL']);
364+
365+
$filteredDocs = \iterator_to_array($this->documentStore->filterDocs(
366+
$collectionName,
367+
new LikeFilter('foo', '%bat%')
368+
));
369+
370+
$vals = array_map(function (array $doc) {
371+
return $doc['foo'];
372+
}, $filteredDocs);
373+
374+
$this->assertEquals(['some bAt val'], $vals);
375+
}
376+
348377
/**
349378
* @test
350379
*/

0 commit comments

Comments
 (0)