Completed
Push — playlist-again ( b7d5ab...454ce7 )
by Pauli
13:03
created

Helper::cleanUp()   B

Complexity

Conditions 2
Paths 2

Size

Total Lines 43
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 43
rs 8.8571
c 0
b 0
f 0
cc 2
eloc 9
nc 2
nop 0
1
<?php
2
3
/**
4
 * ownCloud - Music app
5
 *
6
 * This file is licensed under the Affero General Public License version 3 or
7
 * later. See the COPYING file.
8
 *
9
 * @author Morris Jobke <[email protected]>
10
 * @copyright Morris Jobke 2014
11
 */
12
13
namespace OCA\Music\Utility;
14
15
use OCP\IDBConnection;
16
17
18
class Helper {
19
20
	/** @var IDBConnection */
21
	private $db;
22
23
	public function __construct(IDBConnection $db){
24
		$this->db = $db;
25
	}
26
27
	/**
28
	 * Removes orphaned data from the database
29
	 */
30
	public function cleanUp() {
31
		$sqls = array(
32
			'UPDATE `*PREFIX*music_albums` SET `cover_file_id` = NULL
33
				WHERE `cover_file_id` IS NOT NULL AND `cover_file_id` IN (
34
					SELECT `cover_file_id` FROM (
35
						SELECT `cover_file_id` FROM `*PREFIX*music_albums`
36
						LEFT JOIN `*PREFIX*filecache`
37
							ON `cover_file_id`=`fileid`
38
						WHERE `fileid` IS NULL
39
					) mysqlhack
40
				);',
41
			'DELETE FROM `*PREFIX*music_tracks` WHERE `file_id` IN (
42
				SELECT `file_id` FROM (
43
					SELECT `file_id` FROM `*PREFIX*music_tracks`
44
					LEFT JOIN `*PREFIX*filecache`
45
						ON `file_id`=`fileid`
46
					WHERE `fileid` IS NULL
47
					) mysqlhack
48
				);',
49
			'DELETE FROM `*PREFIX*music_albums` WHERE `id` IN (
50
				SELECT `id` FROM (
51
					SELECT `*PREFIX*music_albums`.`id`
52
					FROM `*PREFIX*music_albums`
53
					LEFT JOIN `*PREFIX*music_tracks`
54
						ON `*PREFIX*music_tracks`.`album_id` = `*PREFIX*music_albums`.`id`
55
					WHERE `*PREFIX*music_tracks`.`album_id` IS NULL
56
				) as tmp
57
			);',
58
			'DELETE FROM `*PREFIX*music_artists` WHERE `id` NOT IN (
59
				SELECT DISTINCT * FROM (
60
					SELECT `artist`.`id` FROM `*PREFIX*music_artists` `artist`
61
					JOIN `*PREFIX*music_albums` `album` ON
62
					`artist`.`id` = `album`.`album_artist_id` UNION SELECT `track`.`artist_id`
63
					FROM `*PREFIX*music_tracks` `track`
64
				) as tmp
65
			);'
66
		);
67
68
		foreach ($sqls as $sql) {
69
			$query = $this->db->prepare($sql);
70
			$query->execute();
71
		}
72
	}
73
}
74