Skip to content

Commit 7edb158

Browse files
author
Alexander Miertsch
authored
Merge pull request #10 from martin-schilling/feature/doc-id-retrieval
Implemented doc id retrieval as altered in the DocumentStore interface
2 parents ebf2dfa + a33946f commit 7edb158

File tree

2 files changed

+51
-1
lines changed

2 files changed

+51
-1
lines changed

src/PostgresDocumentStore.php

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -500,7 +500,7 @@ public function filterDocs(string $collectionName, Filter $filter, int $skip = n
500500
{
501501
[$filterStr, $args] = $this->filterToWhereClause($filter);
502502

503-
$where = $filterStr? "WHERE $filterStr" : '';
503+
$where = $filterStr ? "WHERE $filterStr" : '';
504504

505505
$offset = $skip !== null ? "OFFSET $skip" : '';
506506
$limit = $limit !== null ? "LIMIT $limit" : '';
@@ -524,6 +524,29 @@ public function filterDocs(string $collectionName, Filter $filter, int $skip = n
524524
}
525525
}
526526

527+
/**
528+
* @param string $collectionName
529+
* @param Filter $filter
530+
* @return array
531+
*/
532+
public function filterDocIds(string $collectionName, Filter $filter): array
533+
{
534+
[$filterStr, $args] = $this->filterToWhereClause($filter);
535+
536+
$where = $filterStr ? "WHERE {$filterStr}" : '';
537+
$query = "SELECT id FROM {$this->schemaName($collectionName)}.{$this->tableName($collectionName)} {$where}";
538+
539+
$stmt = $this->connection->prepare($query);
540+
$stmt->execute($args);
541+
542+
$docIds = [];
543+
while ($row = $stmt->fetch(\PDO::FETCH_ASSOC)) {
544+
$docIds[] = $row['id'];
545+
}
546+
547+
return $docIds;
548+
}
549+
527550
/**
528551
* @param string $collectionName
529552
* @param Filter $filter

tests/PostgresDocumentStoreTest.php

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,11 @@
1616
use EventEngine\DocumentStore\Filter\AnyOfFilter;
1717
use EventEngine\DocumentStore\Filter\DocIdFilter;
1818
use EventEngine\DocumentStore\Filter\EqFilter;
19+
use EventEngine\DocumentStore\Filter\GtFilter;
1920
use EventEngine\DocumentStore\Filter\InArrayFilter;
21+
use EventEngine\DocumentStore\Filter\LtFilter;
2022
use EventEngine\DocumentStore\Filter\NotFilter;
23+
use EventEngine\DocumentStore\Filter\OrFilter;
2124
use PHPUnit\Framework\TestCase;
2225
use EventEngine\DocumentStore\FieldIndex;
2326
use EventEngine\DocumentStore\Index;
@@ -434,6 +437,30 @@ public function it_handles_not_filter_nested_in_and_filter()
434437
$this->assertEquals([$thirdDocId], $refs);
435438
}
436439

440+
/**
441+
* @test
442+
*/
443+
public function it_retrieves_doc_ids_by_filter()
444+
{
445+
$collectionName = 'test_not_filter_nested_in_and_filter';
446+
$this->documentStore->addCollection($collectionName);
447+
448+
$firstDocId = Uuid::uuid4()->toString();
449+
$secondDocId = Uuid::uuid4()->toString();
450+
$thirdDocId = Uuid::uuid4()->toString();
451+
452+
$this->documentStore->addDoc($collectionName, $firstDocId, ['number' => 10]);
453+
$this->documentStore->addDoc($collectionName, $secondDocId, ['number' => 20]);
454+
$this->documentStore->addDoc($collectionName, $thirdDocId, ['number' => 30]);
455+
456+
$result = $this->documentStore->filterDocIds($collectionName, new OrFilter(
457+
new GtFilter('number', 21),
458+
new LtFilter('number', 19)
459+
));
460+
461+
$this->assertEquals([$firstDocId, $thirdDocId], $result);
462+
}
463+
437464
/**
438465
* @test
439466
*/

0 commit comments

Comments
 (0)