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
