• Модуль: 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);
}