protected static function deleteOldVersionedFileSyncs($objectType, $objectSubType) { if (!isset(self::$oldVersionsStartUpdatedAt[$objectType])) { self::$oldVersionsStartUpdatedAt[$objectType] = 0; } if (!isset(self::$oldVersionsEndUpdatedAt[$objectType])) { self::$oldVersionsEndUpdatedAt[$objectType] = 0; } $criteria = new Criteria(); switch ($objectType) { case FileSyncObjectType::ASSET: if ($objectSubType != asset::FILE_SYNC_ASSET_SUB_TYPE_ASSET) { return array(); } $join = new Join(); $join->addCondition(FileSyncPeer::OBJECT_ID, assetPeer::ID); $join->addCondition(FileSyncPeer::VERSION, assetPeer::VERSION, Criteria::NOT_EQUAL); $join->setJoinType(Criteria::LEFT_JOIN); $criteria->addJoinObject($join); $criteria->add(assetPeer::VERSION, null, Criteria::ISNOTNULL); break; case FileSyncObjectType::UICONF: $join = new Join(); $join->addCondition(FileSyncPeer::OBJECT_ID, uiConfPeer::ID); $join->addCondition(FileSyncPeer::VERSION, uiConfPeer::VERSION, Criteria::NOT_EQUAL); $join->setJoinType(Criteria::LEFT_JOIN); $criteria->addJoinObject($join); $criteria->add(uiConfPeer::VERSION, null, Criteria::ISNOTNULL); break; case FileSyncObjectType::ENTRY: $join = new Join(); $join->addCondition(FileSyncPeer::OBJECT_ID, entryPeer::ID); switch ($objectSubType) { case entry::FILE_SYNC_ENTRY_SUB_TYPE_THUMB: $join->addCondition(FileSyncPeer::VERSION, entryPeer::THUMBNAIL, Criteria::NOT_EQUAL); $criteria->add(entryPeer::THUMBNAIL, null, Criteria::ISNOTNULL); break; case entry::FILE_SYNC_ENTRY_SUB_TYPE_DATA: case entry::FILE_SYNC_ENTRY_SUB_TYPE_DOWNLOAD: $join->addCondition(FileSyncPeer::VERSION, entryPeer::DATA, Criteria::NOT_EQUAL); $criteria->add(entryPeer::DATA, null, Criteria::ISNOTNULL); break; default: return array(); } $join->setJoinType(Criteria::LEFT_JOIN); $criteria->addJoinObject($join); break; case FileSyncObjectType::METADATA: $join = new Join(); $join->addCondition(FileSyncPeer::OBJECT_ID, MetadataPeer::ID); $join->addCondition(FileSyncPeer::VERSION, MetadataPeer::VERSION, Criteria::NOT_EQUAL); $join->setJoinType(Criteria::LEFT_JOIN); $criteria->addJoinObject($join); $criteria->add(MetadataPeer::VERSION, null, Criteria::ISNOTNULL); break; case FileSyncObjectType::METADATA_PROFILE: $join = new Join(); $join->addCondition(FileSyncPeer::OBJECT_ID, MetadataProfilePeer::ID); switch ($objectSubType) { case MetadataProfile::FILE_SYNC_METADATA_DEFINITION: $join->addCondition(FileSyncPeer::VERSION, MetadataProfilePeer::FILE_SYNC_VERSION, Criteria::NOT_EQUAL); $criteria->add(MetadataProfilePeer::FILE_SYNC_VERSION, null, Criteria::ISNOTNULL); break; case MetadataProfile::FILE_SYNC_METADATA_VIEWS: $join->addCondition(FileSyncPeer::VERSION, MetadataProfilePeer::VIEWS_VERSION, Criteria::NOT_EQUAL); $criteria->add(MetadataProfilePeer::VIEWS_VERSION, null, Criteria::ISNOTNULL); break; default: return array(); } $join->setJoinType(Criteria::LEFT_JOIN); $criteria->addJoinObject($join); break; default: return array(); } $criteria->add(FileSyncPeer::DC, kDataCenterMgr::getCurrentDcId()); $criteria->add(FileSyncPeer::OBJECT_TYPE, $objectType); $criteria->add(FileSyncPeer::OBJECT_SUB_TYPE, $objectSubType); $criteria->add(FileSyncPeer::STATUS, array(FileSync::FILE_SYNC_STATUS_DELETED, FileSync::FILE_SYNC_STATUS_PURGED), Criteria::NOT_IN); $nextCriteria = clone $criteria; $criteria->add(FileSyncPeer::UPDATED_AT, self::$oldVersionsStartUpdatedAt[$objectType], Criteria::GREATER_EQUAL); $criteria->addAnd(FileSyncPeer::UPDATED_AT, self::$oldVersionsEndUpdatedAt[$objectType], Criteria::LESS_EQUAL); $criteria->addAscendingOrderByColumn(FileSyncPeer::UPDATED_AT); $criteria->setLimit(self::$queryLimit); $fileSyncs = FileSyncPeer::doSelect($criteria); if (count($fileSyncs)) { foreach ($fileSyncs as $fileSync) { /* @var $fileSync FileSync */ self::deleteFileSync($fileSync); if ($fileSync->getUpdatedAt(null)) { self::$oldVersionsNextStartUpdatedAt[$objectType] = $fileSync->getUpdatedAt(null); } } } else { self::$oldVersionsNextStartUpdatedAt[$objectType] = self::$oldVersionsStartUpdatedAt[$objectType]; $nextCriteria->add(FileSyncPeer::UPDATED_AT, self::$oldVersionsStartUpdatedAt[$objectType], Criteria::GREATER_THAN); $nextCriteria->addSelectColumn('UNIX_TIMESTAMP(MIN(' . FileSyncPeer::UPDATED_AT . '))'); $stmt = FileSyncPeer::doSelectStmt($nextCriteria); $mins = $stmt->fetchAll(PDO::FETCH_COLUMN); if (count($mins)) { $oldVersionsNextStartUpdatedAt = reset($mins); if (!is_null($oldVersionsNextStartUpdatedAt)) { self::$oldVersionsNextStartUpdatedAt[$objectType] = $oldVersionsNextStartUpdatedAt; } } } kMemoryManager::clearMemory(); }