simplify subscribing/unsubscribing podcasts
[mygpo.git] / install / update-14.sql
blobd22660a3dc280bf6bc55f26d82cdb90fbf1e308b
1 ALTER TABLE podcast ADD COLUMN `author` varchar(100);
2 ALTER TABLE podcast ADD COLUMN `language` varchar(10);
4 ALTER TABLE episode ADD COLUMN `author` varchar(100);
5 ALTER TABLE episode ADD COLUMN `duration` integer UNSIGNED;
6 ALTER TABLE episode ADD COLUMN `filesize` integer UNSIGNED;
9 DROP VIEW IF EXISTS current_subscription;
11 CREATE VIEW current_subscription AS SELECT device_id, podcast_id, c.user_ptr_id AS user_id, a.timestamp as subscribed_since, sum(a.action) as summe
12     FROM (subscription_log a JOIN device b on a.device_id=b.id)
13         JOIN user c on b.user_id=c.user_ptr_id
14     WHERE b.deleted = 0
15     GROUP BY a.podcast_id, device_id
16     having summe>0;
19 DELIMITER $$
20 DROP PROCEDURE IF EXISTS delete_inactive_users $$
21 CREATE PROCEDURE delete_inactive_users()
22 BEGIN
23     DECLARE deadlock INT DEFAULT 0;
24     DECLARE attempts INT DEFAULT 0;
25     DECLARE done INT DEFAULT 0;
26     DECLARE user_help INT DEFAULT 0;
27     DECLARE day_count INT DEFAULT 0;
28     DECLARE cur1 CURSOR FOR select user_id from registration_registrationprofile where activation_key<>"ALREADY_ACTIVATED";
29     DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
31     try_loop:WHILE (attempts<3) DO
32     BEGIN
33          DECLARE deadlock_detected CONDITION FOR 1213;
34          DECLARE EXIT HANDLER FOR deadlock_detected
35                 BEGIN
36                     ROLLBACK;
37                     SET deadlock=1;
38                 END;
39          SET deadlock=0;
41          START TRANSACTION;
42 OPEN cur1;
44             REPEAT
45                 FETCH cur1 INTO user_help;
47                 IF NOT done THEN
49                     SELECT datediff(date(now()), date(date_joined)) into day_count FROM auth_user where id=user_help;
51                     IF day_count > 7 THEN
52                         delete from auth_user where id=user_help;
53                         delete from registration_registrationprofile where user_id=user_help;
54                     END IF;
55                 END IF;
56             UNTIL done END REPEAT;
58             CLOSE cur1;
60             COMMIT;
61         END;
62         IF deadlock=0 THEN
63                 LEAVE try_loop;
64             ELSE
65                 SET attempts=attempts+1;
66             END IF;
67             END WHILE try_loop;
69         IF deadlock=1 THEN
70             call FAIL('Inactive users are not deleted!');
71         END IF;
73 END $$
74 DELIMITER ;