- Модуль: disk
- Путь к файлу: ~/bitrix/modules/disk/lib/volume/base.php
- Класс: BitrixDiskVolumeBase
- Вызов: Base::getCorrespondingUnnecessaryVersionList
public function getCorrespondingUnnecessaryVersionList(array $additionalFilter = []): MainDBResult
{
$connection = Application::getConnection();
$parentFolderId = $this->getFilterValue('PARENT_ID', '=@!');
if (!empty($parentFolderId))
{
$this
->unsetFilter('PARENT_ID')
->addFilter('@PARENT_ID', VolumeQueryHelper::prepareFolderTreeQuery($parentFolderId));
}
$whereSql = VolumeQueryHelper::prepareWhere(
$this->getFilter([
'DELETED_TYPE' => ObjectTable::DELETED_TYPE_NONE,
]),
[
'ENTITY_TYPE' => 'storage.ENTITY_TYPE',
'ENTITY_ID' => 'storage.ENTITY_ID',
'USER_ID' => 'storage.ENTITY_ID',
'GROUP_ID' => 'storage.ENTITY_ID',
'DELETED_TYPE' => 'files.DELETED_TYPE',
'STORAGE_ID' => 'storage.ID',
'FOLDER_ID' => 'files.PARENT_ID',
'PARENT_ID' => 'files.PARENT_ID',
'FILE_ID' => 'files.ID',
'VERSION_ID' => 'ver.ID',
]
);
if ($whereSql != '')
{
$whereSql = " AND {$whereSql} ";
}
$limitSql = '';
if ($this->getLimit() > 0)
{
$limitSql = 'LIMIT '.$this->getLimit();
}
$querySql = "
SELECT
files.ID as FILE_ID,
ver.ID AS VERSION_ID
FROM
b_disk_version ver
INNER JOIN b_disk_object files ON ver.OBJECT_ID = files.ID AND ver.FILE_ID != files.FILE_ID /*no head */
INNER JOIN b_disk_storage storage ON files.STORAGE_ID = storage.ID
/* head */
INNER JOIN (
SELECT object_id, max(id) as id
FROM b_disk_version
GROUP BY object_id
ORDER BY NULL
) head ON head.OBJECT_ID = files.ID
LEFT JOIN b_disk_attached_object attached
ON attached.OBJECT_ID = ver.OBJECT_ID
AND attached.VERSION_ID = ver.ID
AND attached.VERSION_ID != head.ID
LEFT JOIN b_disk_external_link link
ON link.OBJECT_ID = ver.OBJECT_ID
AND link.VERSION_ID = ver.ID
AND link.VERSION_ID != head.ID
AND ifnull(link.TYPE, -1) != ". DiskInternalsExternalLinkTable::TYPE_AUTO. "
WHERE
files.TYPE = ". ObjectTable::TYPE_FILE. "
and files.ID = files.REAL_OBJECT_ID /* not link */
AND attached.VERSION_ID is null /* no attach */
AND link.VERSION_ID is null /*no ext link */
{$whereSql}
ORDER BY
files.ID ASC,
ver.ID ASC
{$limitSql}
";
return $connection->query($querySql);
}