return $this->helper->quoteColumnName($alias);
}
-
- /**
- * Either appends to or replaces a single, generic query part.
- *
- * The available parts are: 'select', 'from', 'set', 'where',
- * 'groupBy', 'having' and 'orderBy'.
- *
- * @param string $sqlPartName
- * @param mixed $sqlPart
- * @param bool $append
- *
- * @return $this This QueryBuilder instance.
- */
- public function add(string $sqlPartName, $sqlPart, bool $append = false) {
- $this->queryBuilder->add($sqlPartName, $sqlPart, $append);
- return $this;
- }
}
protected function buildSearchQuery(ISearchQuery $searchQuery): IQueryBuilder {
$builder = $this->getQueryBuilder();
- // mysql really likes to pick an index for sorting if it can't fully satisfy the where
- // filter with an index, since search queries pretty much never are fully filtered by index
- // mysql often picks an index for sorting instead of the *much* more useful index for filtering.
- //
- // To bypass this, we tell mysql explicitly not to use the mtime (the default order field) index,
- // so it will instead pick an index that is actually useful.
- $query = $builder->selectFileCache('file', 'ignore index for order by (fs_mtime)');
+ $query = $builder->selectFileCache('file');
$query->whereStorageId();
namespace OC\Files\Cache;
-use Doctrine\DBAL\Platforms\MySQLPlatform;
use OC\DB\QueryBuilder\QueryBuilder;
use OC\SystemConfig;
use OCP\DB\QueryBuilder\IQueryBuilder;
$this->cache = $cache;
}
- public function selectFileCache(string $alias = null, string $mysqlIndexHint = '') {
+ public function selectFileCache(string $alias = null) {
$name = $alias ? $alias : 'filecache';
$this->select("$name.fileid", 'storage', 'path', 'path_hash', "$name.parent", 'name', 'mimetype', 'mimepart', 'size', 'mtime',
'storage_mtime', 'encrypted', 'etag', 'permissions', 'checksum', 'metadata_etag', 'creation_time', 'upload_time')
- ->from('filecache', $name);
- if ($mysqlIndexHint !== '' && $this->getConnection()->getDatabasePlatform() instanceof MySQLPlatform) {
- $this->add('join', [
- $this->quoteAlias($name) => [
- // horrible query builder crimes to sneak in raw sql after the "FROM oc_filecache $name"
- 'joinType' => $mysqlIndexHint . ' left',
- 'joinTable' => $this->getTableName('filecache_extended'),
- 'joinAlias' => $this->quoteAlias('fe'),
- 'joinCondition' => $this->expr()->eq("$name.fileid", 'fe.fileid'),
- ],
- ], true);
- } else {
- $this->leftJoin($name, 'filecache_extended', 'fe', $this->expr()->eq("$name.fileid", 'fe.fileid'));
- }
+ ->from('filecache', $name)
+ ->leftJoin($name, 'filecache_extended', 'fe', $this->expr()->eq("$name.fileid", 'fe.fileid'));
$this->alias = $name;