public function getIterator() : Traversable
 {
     if (null !== $this->iterator) {
         return $this->iterator;
     }
     if (empty($this->sparseRecords)) {
         return $this->iterator = new ArrayIterator();
     }
     $findQuery = new FindQuery();
     $findQuery->addOrQueries(...array_map(function (array $sparseRecord) : Query {
         return new Query($this->idFieldName, (string) $sparseRecord[$this->idFieldName]);
     }, $this->sparseRecords));
     return $this->iterator = new IteratorIterator($this->repository->findByQuery($findQuery));
 }
 public function testAddMultipleOrQueries()
 {
     $findQuery = new FindQuery();
     $findQuery->addOrQueries(new Query('foo', 'bar'), new Query('baz', 'bat', true));
     $this->assertSame(['-query' => '(q1);(!q2)', '-q1' => 'foo', '-q1.value' => 'bar', '-q2' => 'baz', '-q2.value' => 'bat'], $findQuery->toParameters());
 }
 public function findByQuery(FindQuery $findQuery, array $sort = [], int $limit = null, int $offset = null) : CollectionInterface
 {
     $resultSet = $this->execute(new Command($this->layout, $findQuery->toParameters() + $this->createSortParameters($sort) + $this->createLimitAndOffsetParameters($limit, $offset) + ['-findquery' => null]));
     return $this->createCollection($resultSet);
 }
 public function testFindByQueryWithParameters()
 {
     $entity = new stdClass();
     $hydration = $this->prophesize(HydrationInterface::class);
     $hydration->hydrateNewEntity(['record-id' => 1, 'mod-id' => 1, 'foo' => 'bar'])->willReturn($entity);
     $repository = $this->createAssertiveRepository(function (Command $command) {
         $this->assertSame('-lay=foo&-query=%28q1%29&-q1=foo&-q1.value=bar&-sortfield1=foo&-sortorder1=ascend&-max=1&-skip=2' . '&-findquery', (string) $command);
         return new ItemCollection([['record-id' => 1, 'mod-id' => 1, 'foo' => 'bar']], 1);
     }, $hydration->reveal());
     $query = new FindQuery();
     $query->addOrQueries(new Query('foo', 'bar'));
     $this->assertSame([$entity], iterator_to_array($repository->findByQuery($query, ['foo' => 'ascend'], 1, 2)));
 }