blob: 68b17a9a06eced55a82b10825ed90c0d39faee8a [file] [log] [blame]
-- Copyright 2016 The Chromium Authors. All Rights Reserved.
--
-- Use of this source code is governed by a BSD-style
-- license that can be found in the LICENSE file or at
-- https://developers.google.com/open-source/licenses/bsd
DROP PROCEDURE IF EXISTS BackfillLastVisitTimestamp;
delimiter //
CREATE PROCEDURE BackfillLastVisitTimestamp(
IN in_now_ts INT, IN in_days_ago INT, IN in_num_days INT)
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE c_user_id INT;
DECLARE c_comment_ts INT;
DECLARE curs CURSOR FOR
SELECT MAX(created), commenter_id FROM Comment
WHERE created >= in_now_ts - 60 * 60 * 24 * in_days_ago
AND created < in_now_ts - 60 * 60 * 24 * (in_days_ago - in_num_days)
GROUP BY commenter_id
ORDER BY MAX(created);
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN curs;
user_loop: LOOP
FETCH curs INTO c_comment_ts, c_user_id;
IF done THEN
LEAVE user_loop;
END IF;
-- Indicate progress.
SELECT c_comment_ts AS 'Processing:';
-- Set last_visit_timestamp for one user if not already set.
UPDATE User
SET last_visit_timestamp = IFNULL(last_visit_timestamp, c_comment_ts)
WHERE user_id = c_user_id;
END LOOP;
END;
//
delimiter ;
-- If run locally do all at once:
-- CALL BackfillLastVisitTimestamp(1476915669, 180, 180);
-- If run on staging or production, consider the last 180 days
-- in chunks of 30 days at a time:
-- CALL BackfillLastVisitTimestamp(1476915669, 30, 30);
-- CALL BackfillLastVisitTimestamp(1476915669, 60, 30);
-- CALL BackfillLastVisitTimestamp(1476915669, 90, 30);
-- CALL BackfillLastVisitTimestamp(1476915669, 120, 30);
-- CALL BackfillLastVisitTimestamp(1476915669, 150, 30);
-- CALL BackfillLastVisitTimestamp(1476915669, 180, 30);