64 lines
1.6 KiB
Ruby
64 lines
1.6 KiB
Ruby
class StoredCourseProcess < ActiveRecord::Migration
|
|
def up
|
|
execute "
|
|
CREATE PROCEDURE sp_course_cursor ()
|
|
BEGIN
|
|
DECLARE course_uid int(10);
|
|
DECLARE _done tinyint(1) DEFAULT 0;
|
|
DECLARE cur_course CURSOR FOR
|
|
SELECT
|
|
`projects`.id
|
|
FROM `projects`
|
|
WHERE projects.status <> 9 AND projects.is_public = 1 AND projects.project_type = 1;
|
|
DECLARE CONTINUE HANDLER FOR NOT FOUND SET _done = 1;
|
|
|
|
OPEN cur_course;
|
|
loop_course:
|
|
LOOP
|
|
FETCH cur_course INTO course_uid;
|
|
IF _done = 1 THEN
|
|
LEAVE loop_course;
|
|
END IF;
|
|
|
|
BEGIN
|
|
DECLARE members_count int(4) DEFAULT 0;
|
|
DECLARE attachments_count int(4) DEFAULT 0;
|
|
DECLARE total_count int(4) DEFAULT 0;
|
|
SELECT
|
|
COUNT(*) INTO members_count
|
|
FROM `members` inner join `users`
|
|
WHERE `members`.`project_id` = course_uid AND `members`.`user_id` = `users`.`id` AND `users`.`type` = 'User' AND `users`.`status` = 1;
|
|
SELECT
|
|
COUNT(*) INTO attachments_count
|
|
FROM `attachments`
|
|
WHERE `attachments`.`container_id` = course_uid AND `attachments`.`container_type` = 'Project';
|
|
SET total_count = members_count + attachments_count;
|
|
UPDATE project_statuses
|
|
SET course_ac_para = total_count
|
|
WHERE project_statuses.project_id = course_uid;
|
|
COMMIT;
|
|
|
|
END;
|
|
END LOOP;
|
|
END;
|
|
"
|
|
execute "
|
|
CREATE EVENT IF NOT EXISTS e_project_status_course
|
|
ON SCHEDULE EVERY 1 DAY STARTS '2013-08-27 01:50:00'
|
|
ON COMPLETION PRESERVE
|
|
DO CALL sp_course_cursor();
|
|
"
|
|
execute "
|
|
SET GLOBAL event_scheduler = ON;
|
|
"
|
|
end
|
|
|
|
def down
|
|
execute " DROP PROCEDURE IF EXISTS sp_course_cursor;
|
|
"
|
|
execute "
|
|
DROP EVENT IF EXISTS e_project_status_course;
|
|
"
|
|
end
|
|
end
|