Skip to content
Draft
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
perf(sharing): Remove the item_type from the query so other indices c…
…an be used

Signed-off-by: Joas Schilling <[email protected]>
  • Loading branch information
nickvergessen committed Feb 9, 2024
commit bd101e0cdebc2211d0534fe32a6ed267fb1bc307
48 changes: 21 additions & 27 deletions lib/private/Share20/DefaultShareProvider.php
Original file line number Diff line number Diff line change
Expand Up @@ -656,11 +656,7 @@ public function getSharesInFolder($userId, Folder $node, $reshares, $shallow = t
'f.fileid', 'f.path', 'f.permissions AS f_permissions', 'f.storage', 'f.path_hash',
'f.parent AS f_parent', 'f.name', 'f.mimetype', 'f.mimepart', 'f.size', 'f.mtime', 'f.storage_mtime',
'f.encrypted', 'f.unencrypted_size', 'f.etag', 'f.checksum')
->from('share', 's')
->andWhere($qb->expr()->orX(
$qb->expr()->eq('item_type', $qb->createNamedParameter('file')),
$qb->expr()->eq('item_type', $qb->createNamedParameter('folder'))
));
->from('share', 's');

$qb->andWhere($qb->expr()->orX(
$qb->expr()->eq('share_type', $qb->createNamedParameter(IShare::TYPE_USER)),
Expand Down Expand Up @@ -722,6 +718,9 @@ public function getSharesInFolder($userId, Folder $node, $reshares, $shallow = t
$qb->setParameter('chunk', $chunk, IQueryBuilder::PARAM_INT_ARRAY);
$cursor = $qb->executeQuery();
while ($data = $cursor->fetch()) {
if ($data['item_type'] !== 'file' && $data['item_type'] !== 'folder') {
continue;
}
$shares[$data['fileid']][] = $this->createShare($data);
}
$cursor->closeCursor();
Expand All @@ -737,12 +736,7 @@ public function getSharesBy($userId, $shareType, $node, $reshares, $limit, $offs
$qb = $this->dbConn->getQueryBuilder();
$qb->select('*')
->from('share')
->andWhere($qb->expr()->orX(
$qb->expr()->eq('item_type', $qb->createNamedParameter('file')),
$qb->expr()->eq('item_type', $qb->createNamedParameter('folder'))
));

$qb->andWhere($qb->expr()->eq('share_type', $qb->createNamedParameter($shareType)));
->andWhere($qb->expr()->eq('share_type', $qb->createNamedParameter($shareType)));

/**
* Reshares for this user are shares where they are the owner.
Expand Down Expand Up @@ -774,6 +768,9 @@ public function getSharesBy($userId, $shareType, $node, $reshares, $limit, $offs
$cursor = $qb->execute();
$shares = [];
while ($data = $cursor->fetch()) {
if ($data['item_type'] !== 'file' && $data['item_type'] !== 'folder') {
continue;
}
$shares[] = $this->createShare($data);
}
$cursor->closeCursor();
Expand Down Expand Up @@ -1030,10 +1027,6 @@ public function getShareByToken($token) {
->from('share')
->where($qb->expr()->eq('share_type', $qb->createNamedParameter(IShare::TYPE_LINK)))
->andWhere($qb->expr()->eq('token', $qb->createNamedParameter($token)))
->andWhere($qb->expr()->orX(
$qb->expr()->eq('item_type', $qb->createNamedParameter('file')),
$qb->expr()->eq('item_type', $qb->createNamedParameter('folder'))
))
->execute();

$data = $cursor->fetch();
Expand All @@ -1043,6 +1036,9 @@ public function getShareByToken($token) {
}

try {
if ($data['item_type'] !== 'file' && $data['item_type'] !== 'folder') {
throw new ShareNotFound();
}
$share = $this->createShare($data);
} catch (InvalidShare $e) {
throw new ShareNotFound();
Expand Down Expand Up @@ -1151,15 +1147,14 @@ private function resolveGroupShares($shares, $userId) {
$query = $qb->select('*')
->from('share')
->where($qb->expr()->in('parent', $qb->createNamedParameter($ids, IQueryBuilder::PARAM_INT_ARRAY)))
->andWhere($qb->expr()->eq('share_with', $qb->createNamedParameter($userId)))
->andWhere($qb->expr()->orX(
$qb->expr()->eq('item_type', $qb->createNamedParameter('file')),
$qb->expr()->eq('item_type', $qb->createNamedParameter('folder'))
));
->andWhere($qb->expr()->eq('share_with', $qb->createNamedParameter($userId)));

$stmt = $query->execute();

while ($data = $stmt->fetch()) {
if ($data['item_type'] !== 'file' && $data['item_type'] !== 'folder') {
continue;
}
$shareMap[$data['parent']]->setPermissions((int)$data['permissions']);
$shareMap[$data['parent']]->setStatus((int)$data['accepted']);
$shareMap[$data['parent']]->setTarget($data['file_target']);
Expand Down Expand Up @@ -1346,21 +1341,20 @@ public function getAccessList($nodes, $currentAccess) {
$or->add($qb->expr()->eq('share_type', $qb->createNamedParameter(IShare::TYPE_USERGROUP)));
}

$qb->select('id', 'parent', 'share_type', 'share_with', 'file_source', 'file_target', 'permissions')
$qb->select('id', 'parent', 'share_type', 'share_with', 'file_source', 'file_target', 'permissions', 'item_type')
->from('share')
->where(
$or
)
->andWhere($qb->expr()->in('file_source', $qb->createNamedParameter($ids, IQueryBuilder::PARAM_INT_ARRAY)))
->andWhere($qb->expr()->orX(
$qb->expr()->eq('item_type', $qb->createNamedParameter('file')),
$qb->expr()->eq('item_type', $qb->createNamedParameter('folder'))
));
$cursor = $qb->execute();
->andWhere($qb->expr()->in('file_source', $qb->createNamedParameter($ids, IQueryBuilder::PARAM_INT_ARRAY)));
$cursor = $qb->executeQuery();

$users = [];
$link = false;
while ($row = $cursor->fetch()) {
if ($row['item_type'] !== 'file' && $row['item_type'] !== 'folder') {
continue;
}
$type = (int)$row['share_type'];
if ($type === IShare::TYPE_USER) {
$uid = $row['share_with'];
Expand Down