$query = $this->getQueryBuilder();
$query->selectFileCache()
->whereStorageId()
- ->andWhere($query->expr()->like('path', $query->createNamedParameter($this->getRoot() . '/%')))
+ ->andWhere($query->expr()->orX(
+ $query->expr()->like('path', $query->createNamedParameter($this->getRoot() . '/%')),
+ $query->expr()->eq('path_hash', $query->createNamedParameter(md5($this->getRoot()))),
+ ))
->andWhere($query->expr()->iLike('name', $query->createNamedParameter($pattern)));
$result = $query->execute();
$query = $this->getQueryBuilder();
$query->selectFileCache()
->whereStorageId()
- ->andWhere($query->expr()->like('path', $query->createNamedParameter($this->getRoot() . '/%')));
+ ->andWhere($query->expr()->orX(
+ $query->expr()->like('path', $query->createNamedParameter($this->getRoot() . '/%')),
+ $query->expr()->eq('path_hash', $query->createNamedParameter(md5($this->getRoot()))),
+ ));
if (strpos($mimetype, '/')) {
$query->andWhere($query->expr()->eq('mimetype', $query->createNamedParameter($mimeId, IQueryBuilder::PARAM_INT)));
'path',
$this->getRoot() . '/%'
);
+ $rootFilter = new SearchComparison(
+ ISearchComparison::COMPARE_EQUAL,
+ 'path',
+ $this->getRoot()
+ );
$operation = new SearchBinaryOperator(
ISearchBinaryOperator::OPERATOR_AND,
- [$prefixFilter, $query->getSearchOperation()]
+ [new SearchBinaryOperator(ISearchBinaryOperator::OPERATOR_OR, [$prefixFilter, $rootFilter]) , $query->getSearchOperation()]
);
$simpleQuery = new SearchQuery($operation, 0, 0, $query->getOrder(), $query->getUser());
$results = $this->getCache()->searchQuery($simpleQuery);
}
public function testSearchOutsideJail() {
+ $this->storage->getScanner()->scan('');
$file1 = 'foo/foobar';
$file2 = 'folder/foobar';
$data1 = ['size' => 100, 'mtime' => 50, 'mimetype' => 'foo/folder'];
$result = $this->cache->search('%foobar%');
$this->assertCount(1, $result);
$this->assertEquals('foobar', $result[0]['path']);
+
+ $result = $this->cache->search('%foo%');
+ $this->assertCount(2, $result);
+ usort($result, function ($a, $b) {
+ return $a['path'] <=> $b['path'];
+ });
+ $this->assertEquals('', $result[0]['path']);
+ $this->assertEquals('foobar', $result[1]['path']);
}
public function testSearchMimeOutsideJail() {
+ $this->storage->getScanner()->scan('');
$file1 = 'foo/foobar';
$file2 = 'folder/foobar';
$data1 = ['size' => 100, 'mtime' => 50, 'mimetype' => 'foo/folder'];
}
public function testSearchQueryOutsideJail() {
+ $this->storage->getScanner()->scan('');
$file1 = 'foo/foobar';
$file2 = 'folder/foobar';
$data1 = ['size' => 100, 'mtime' => 50, 'mimetype' => 'foo/folder'];
$user = new User('foo', null, $this->createMock(EventDispatcherInterface::class));
$query = new SearchQuery(new SearchComparison(ISearchComparison::COMPARE_EQUAL, 'name', 'foobar'), 10, 0, [], $user);
- $this->assertCount(2, $this->sourceCache->searchQuery($query));
+ $result = $this->cache->searchQuery($query);
- $result = $this->cache->search('%foobar%');
$this->assertCount(1, $result);
$this->assertEquals('foobar', $result[0]['path']);
+
+ $query = new SearchQuery(new SearchComparison(ISearchComparison::COMPARE_EQUAL, 'name', 'foo'), 10, 0, [], $user);
+ $result = $this->cache->searchQuery($query);
+ $this->assertCount(1, $result);
+ $this->assertEquals('', $result[0]['path']);
}
public function testClearKeepEntriesOutsideJail() {