SQL
AخA
USE metawiki_p;
-- Modify startdate and enddate to change dates
SET @startdate = '20180401000000';
SET @enddate = '20181001000000';
-- regex for exempt users
SET @exempt_username_pattern = ' \\(WMF\\)$|-WMF$|WMFOffice';
-- Define for what is a sysop action
SET @sysoplogtype = CAST(
"(
'abusefilter',
'block',
'contentmodel',
'delete',
'import',
'lock',
'managetags',
'massmessage',
'merge',
'protect',
'rights',
'tag',
'timedmediahandler'
)"
AS CHAR
);
-- misc
SET @logwhere = CONCAT(
"ug_group = 'sysop' ",
"AND log_type IN ",@sysoplogtype," ",
"AND log_user_text NOT REGEXP @exempt_username_pattern ",
"AND log_timestamp BETWEEN @startdate AND @enddate "
);
SET @zeroaction = CONCAT(
"SELECT ug_user as userid, user_name as username, 0 ",
"FROM user_groups JOIN user ON ug_user = user_id ",
"WHERE ug_group = 'sysop' ",
"AND user_name NOT REGEXP @exempt_username_pattern "
);
-- show count of sysop actions in the term
SET @logcountsql = CONCAT(
"SELECT userid, username, SUM(sysoplogs) as SysopActionCount ",
"FROM (",
"SELECT ug_user as userid, log_user_text as username, count(*) as sysoplogs FROM user_groups LEFT JOIN logging ON ug_user = log_user ",
"WHERE ",@logwhere,
"GROUP BY ug_user ",
"UNION ",
@zeroaction,
") as t GROUP BY userid ",
"ORDER BY SysopActionCount asc "
);
PREPARE stmt FROM @logcountsql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- show count of edits in the term
SELECT userid, username, SUM(edit) as edits
FROM (
SELECT ug_user as userid, rev_user_text as username, count(*) as edit FROM user_groups LEFT JOIN revision ON ug_user = rev_user
WHERE ug_group = 'sysop' AND rev_user_text NOT REGEXP @exempt_username_pattern AND rev_timestamp BETWEEN @startdate AND @enddate
GROUP BY ug_user
UNION
SELECT ug_user as userid, user_name as username, 0 as edit
FROM user_groups JOIN user ON ug_user = user_id
WHERE ug_group = 'sysop' AND user_name NOT REGEXP @exempt_username_pattern
) as t GROUP BY userid
ORDER BY edits asc;
-- show all edits in the term
SELECT CONCAT('[[Special:Redirect/user/',rev_user,'|',rev_user,']]') as userid,
rev_user_text as username,
CONCAT('[[Special:Diff/',rev_id,'|',rev_id,']]') as diff,
CONCAT('[[Special:Redirect/page/',rev_page,'|',rev_page,']]') AS pageid,
rev_timestamp
FROM user_groups LEFT JOIN revision ON ug_user = rev_user
WHERE ug_group = 'sysop' AND rev_user_text NOT REGEXP @exempt_username_pattern AND rev_timestamp BETWEEN @startdate AND @enddate
ORDER BY rev_user asc, rev_timestamp asc;
-- show all sysop actions in the term
SET @logsql = CONCAT(
"SELECT CONCAT('[[Special:Redirect/logid/',log_id,'|',log_id,']]') as logid, ",
"log_type, ",
"log_timestamp, ",
"CONCAT('[[Special:Redirect/user/',log_user,'|',log_user,']]') as loguserid, ",
"log_user_text ",
"FROM user_groups LEFT JOIN logging ON ug_user = log_user ",
"WHERE ",@logwhere
);
PREPARE stmt FROM @logsql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
By running queries you agree to the Cloud Services Terms of Use and you irrevocably agree to release your SQL under CC0 License.
All SQL code is licensed under CC0 License.