/** * Looks for files used in system and create where clause which contains all ID's of files. * * @returns String where clause which will work as filter. */ public function getUnusedFilesListFilter() { $result = DB::query("SELECT DISTINCT \"FileID\" FROM \"SiteTree_ImageTracking\""); $usedFiles = array(); $where = ''; $classes = ClassInfo::subclassesFor('SiteTree'); if ($result->numRecords() > 0) { while ($nextResult = $result->next()) { $where .= $nextResult['FileID'] . ','; } } foreach ($classes as $className) { $query = new DataQuery($className); $ids = $query->execute()->column(); if (!count($ids)) { continue; } foreach (singleton($className)->hasOne() as $relName => $joinClass) { if ($joinClass == 'Image' || $joinClass == 'File') { $fieldName = $relName . 'ID'; $query = DataList::create($className)->where("{$fieldName} > 0"); $query->distinct = true; $query->select(array($fieldName)); $usedFiles = array_merge($usedFiles, $query->execute()->column()); } elseif ($joinClass == 'Folder') { // @todo } } } if ($usedFiles) { return "\"File\".\"ID\" NOT IN (" . implode(', ', $usedFiles) . ") AND (\"ClassName\" = 'File' OR \"ClassName\" = 'Image')"; } else { return "(\"ClassName\" = 'File' OR \"ClassName\" = 'Image')"; } return $where; // @todo - How? }
public function testRelationOrderWithCustomJoin() { $dataQuery = new DataQuery('DataQueryTest_B'); $dataQuery->innerJoin('DataQueryTest_D', '"DataQueryTest_D"."RelationID" = "DataQueryTest_B"."ID"'); $dataQuery->execute(); }