Hello Krinkle, I'd like you to do a code review. Please visit
https://gerrit.wikimedia.org/r/352646 to review the following change. Change subject: Overhaul site_stats table ...................................................................... Overhaul site_stats table The site stats table holds a bunch of metric fields, two of which are of data type "bigint unsigned", 3 are "bigint" (signed) and one is int (signed). Also the default values differ widely: It is 0 on the "unsigned" fields, 0 on the unsigned fields and the "int" field, but -1 on the three others. This patch makes all of this more consistent: Set all fields (except the ss_row_id, which isn't changed) data type to "bigint unsigned". Also set NULL as the default value for all those fields. Obviously -1 isn't a possible default value any more. Also, 0 can easily be mistaken for a real value (e.g. ss_active_users=0 --> "there is nobody active on this wiki"). NULL, by it's definition, is the value of choice for a value to insert into fields of which we don't know a correct value. Bug: T56888 Change-Id: I7d42aae434852a56b6f8dd559d8a5f3bce416021 --- A maintenance/archives/patch-site_stats-modify.sql A maintenance/mssql/archives/patch-site_stats-modify.sql M maintenance/mssql/tables.sql A maintenance/oracle/archives/patch-site_stats-modify.sql M maintenance/oracle/tables.sql A maintenance/postgres/archives/patch-site_stats-modify.sql M maintenance/postgres/tables.sql A maintenance/sqlite/archives/patch-site_stats-modify.sql M maintenance/tables.sql 9 files changed, 134 insertions(+), 25 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/mediawiki/core refs/changes/46/352646/1 diff --git a/maintenance/archives/patch-site_stats-modify.sql b/maintenance/archives/patch-site_stats-modify.sql new file mode 100644 index 0000000..690a04f --- /dev/null +++ b/maintenance/archives/patch-site_stats-modify.sql @@ -0,0 +1,7 @@ +ALTER TABLE /*_*/site_stats + ALTER ss_total_edits SET DEFAULT NULL, + ALTER ss_good_articles SET DEFAULT NULL, + MODIFY COLUMN ss_total_pages bigint unsigned DEFAULT NULL, + MODIFY COLUMN ss_users bigint unsigned DEFAULT NULL, + MODIFY COLUMN ss_active_users bigint unsigned DEFAULT NULL, + MODIFY COLUMN ss_images bigint unsigned DEFAULT NULL; diff --git a/maintenance/mssql/archives/patch-site_stats-modify.sql b/maintenance/mssql/archives/patch-site_stats-modify.sql new file mode 100644 index 0000000..b2de948 --- /dev/null +++ b/maintenance/mssql/archives/patch-site_stats-modify.sql @@ -0,0 +1,32 @@ +/* Delete old default constraints */ +DECLARE @sql nvarchar(max) +SET @sql='' + +/* IMHO: A DBMS where you have to do THIS to change a default value sucks. */ +SELECT @sql= @sql + 'ALTER TABLE site_stats DROP CONSTRAINT ' + df.name + '; ' +FROM sys.default_constraints df +JOIN sys.columns c + ON c.object_id = df.parent_object_id + AND c.column_id = df.parent_column_id +WHERE + df.parent_object_id = OBJECT_ID('site_stats');-- + +EXEC sp_executesql @sql; + +/* Change data type of ss_images from int to bigint. + * All other fields (except ss_row_id) already are bigint. + * This MUST happen before adding new constraints. */ +ALTER TABLE site_stats ALTER COLUMN ss_images bigint; + +/* Add new default constraints. + * Don't ask me why I have to repeat ALTER TABLE site_stats + * instead of using commas, for some reason SQL Server 2016 + * didn't accept it in any other way. Maybe I just don't know + * enough about mssql, but this works. + */ +ALTER TABLE site_stats ADD CONSTRAINT col_ss_total_edits DEFAULT NULL FOR ss_total_edits; +ALTER TABLE site_stats ADD CONSTRAINT col_ss_good_article DEFAULT NULL FOR ss_good_articles; +ALTER TABLE site_stats ADD CONSTRAINT col_ss_total_pages DEFAULT NULL FOR ss_total_pages; +ALTER TABLE site_stats ADD CONSTRAINT col_ss_users DEFAULT NULL FOR ss_users; +ALTER TABLE site_stats ADD CONSTRAINT col_ss_active_users DEFAULT NULL FOR ss_active_users; +ALTER TABLE site_stats ADD CONSTRAINT col_ss_images DEFAULT NULL FOR ss_images; diff --git a/maintenance/mssql/tables.sql b/maintenance/mssql/tables.sql index 3babb39..697ac42 100644 --- a/maintenance/mssql/tables.sql +++ b/maintenance/mssql/tables.sql @@ -453,26 +453,26 @@ ss_row_id int NOT NULL, -- Total number of edits performed. - ss_total_edits bigint default 0, + ss_total_edits bigint default NULL, -- An approximate count of pages matching the following criteria: -- * in namespace 0 -- * not a redirect -- * contains the text '[[' -- See Article::isCountable() in includes/Article.php - ss_good_articles bigint default 0, + ss_good_articles bigint default NULL, -- Total pages, theoretically equal to SELECT COUNT(*) FROM page; except faster - ss_total_pages bigint default '-1', + ss_total_pages bigint default NULL, -- Number of users, theoretically equal to SELECT COUNT(*) FROM user; - ss_users bigint default '-1', + ss_users bigint default NULL, -- Number of users that still edit - ss_active_users bigint default '-1', + ss_active_users bigint default NULL, -- Number of images, equivalent to SELECT COUNT(*) FROM image - ss_images int default 0 + ss_images bigint default NULL ); -- Pointless index to assuage developer superstitions diff --git a/maintenance/oracle/archives/patch-site_stats-modify.sql b/maintenance/oracle/archives/patch-site_stats-modify.sql new file mode 100644 index 0000000..9882410 --- /dev/null +++ b/maintenance/oracle/archives/patch-site_stats-modify.sql @@ -0,0 +1,7 @@ +ALTER TABLE /*_*/site_stats + ALTER ss_total_edits SET DEFAULT NULL, + ALTER ss_good_articles SET DEFAULT NULL, + ALTER ss_total_pages SET DEFAULT NULL, + ALTER ss_users SET DEFAULT NULL, + ALTER ss_active_users SET DEFAULT NULL, + ALTER ss_images SET DEFAULT NULL; diff --git a/maintenance/oracle/tables.sql b/maintenance/oracle/tables.sql index fc3c696..7e9a95b 100644 --- a/maintenance/oracle/tables.sql +++ b/maintenance/oracle/tables.sql @@ -251,12 +251,12 @@ CREATE TABLE &mw_prefix.site_stats ( ss_row_id NUMBER NOT NULL , - ss_total_edits NUMBER DEFAULT 0, - ss_good_articles NUMBER DEFAULT 0, - ss_total_pages NUMBER DEFAULT -1, - ss_users NUMBER DEFAULT -1, - ss_active_users NUMBER DEFAULT -1, - ss_images NUMBER DEFAULT 0 + ss_total_edits NUMBER DEFAULT NULL, + ss_good_articles NUMBER DEFAULT NULL, + ss_total_pages NUMBER DEFAULT NULL, + ss_users NUMBER DEFAULT NULL, + ss_active_users NUMBER DEFAULT NULL, + ss_images NUMBER DEFAULT NULL ); CREATE UNIQUE INDEX &mw_prefix.site_stats_u01 ON &mw_prefix.site_stats (ss_row_id); diff --git a/maintenance/postgres/archives/patch-site_stats-modify.sql b/maintenance/postgres/archives/patch-site_stats-modify.sql new file mode 100644 index 0000000..9882410 --- /dev/null +++ b/maintenance/postgres/archives/patch-site_stats-modify.sql @@ -0,0 +1,7 @@ +ALTER TABLE /*_*/site_stats + ALTER ss_total_edits SET DEFAULT NULL, + ALTER ss_good_articles SET DEFAULT NULL, + ALTER ss_total_pages SET DEFAULT NULL, + ALTER ss_users SET DEFAULT NULL, + ALTER ss_active_users SET DEFAULT NULL, + ALTER ss_images SET DEFAULT NULL; diff --git a/maintenance/postgres/tables.sql b/maintenance/postgres/tables.sql index e19c447..a73acb5 100644 --- a/maintenance/postgres/tables.sql +++ b/maintenance/postgres/tables.sql @@ -279,13 +279,13 @@ CREATE TABLE site_stats ( ss_row_id INTEGER NOT NULL UNIQUE, - ss_total_edits INTEGER DEFAULT 0, - ss_good_articles INTEGER DEFAULT 0, - ss_total_pages INTEGER DEFAULT -1, - ss_users INTEGER DEFAULT -1, - ss_active_users INTEGER DEFAULT -1, - ss_admins INTEGER DEFAULT -1, - ss_images INTEGER DEFAULT 0 + ss_total_edits INTEGER DEFAULT NULL, + ss_good_articles INTEGER DEFAULT NULL, + ss_total_pages INTEGER DEFAULT NULL, + ss_users INTEGER DEFAULT NULL, + ss_active_users INTEGER DEFAULT NULL, + ss_admins INTEGER DEFAULT NULL, + ss_images INTEGER DEFAULT NULL ); diff --git a/maintenance/sqlite/archives/patch-site_stats-modify.sql b/maintenance/sqlite/archives/patch-site_stats-modify.sql new file mode 100644 index 0000000..860ddc4 --- /dev/null +++ b/maintenance/sqlite/archives/patch-site_stats-modify.sql @@ -0,0 +1,56 @@ +DROP TABLE IF EXISTS /*_*/site_stats_tmp; + +/* Copy & paste from maintenance/tables.sql begins, just table name changed */ +CREATE TABLE /*_*/site_stats_tmp ( + -- The single row should contain 1 here. + ss_row_id int unsigned NOT NULL, + + -- Total number of edits performed. + ss_total_edits bigint unsigned default NULL, + + -- An approximate count of pages matching the following criteria: + -- * in namespace 0 + -- * not a redirect + -- * contains the text '[[' + -- See Article::isCountable() in includes/Article.php + ss_good_articles bigint unsigned default NULL, + + -- Total pages, theoretically equal to SELECT COUNT(*) FROM page; except faster + ss_total_pages bigint unsigned default NULL, + + -- Number of users, theoretically equal to SELECT COUNT(*) FROM user; + ss_users bigint unsigned default NULL, + + -- Number of users that still edit + ss_active_users bigint unsigned default NULL, + + -- Number of images, equivalent to SELECT COUNT(*) FROM image + ss_images bigint unsigned default NULL +) /*$wgDBTableOptions*/; +/* Copy & paste from maintenance/tables.sql ends */ + +INSERT OR IGNORE INTO /*_*/site_stats_tmp ( + ss_row_id, + ss_total_edits, + ss_good_articles, + ss_total_pages, + ss_active_users, + ss_images +) SELECT + ss_row_id, + ss_total_edits, + ss_good_articles, + ss_total_pages, + ss_active_users, + ss_images +FROM /*_*/site_stats; + +DROP TABLE /*_*/site_stats; + +ALTER TABLE /*_*/site_stats_tmp RENAME TO /*_*/site_stats; + + +/* Copy & paste from maintenance/tables.sql begins */ +-- Pointless index to assuage developer superstitions +CREATE UNIQUE INDEX /*i*/ss_row_id ON /*_*/site_stats (ss_row_id); +/* Copy & paste from maintenance/tables.sql ends */ diff --git a/maintenance/tables.sql b/maintenance/tables.sql index d4147f4..7eab308 100644 --- a/maintenance/tables.sql +++ b/maintenance/tables.sql @@ -806,26 +806,26 @@ ss_row_id int unsigned NOT NULL, -- Total number of edits performed. - ss_total_edits bigint unsigned default 0, + ss_total_edits bigint unsigned default NULL, -- An approximate count of pages matching the following criteria: -- * in namespace 0 -- * not a redirect -- * contains the text '[[' -- See Article::isCountable() in includes/Article.php - ss_good_articles bigint unsigned default 0, + ss_good_articles bigint unsigned default NULL, -- Total pages, theoretically equal to SELECT COUNT(*) FROM page; except faster - ss_total_pages bigint default '-1', + ss_total_pages bigint unsigned default NULL, -- Number of users, theoretically equal to SELECT COUNT(*) FROM user; - ss_users bigint default '-1', + ss_users bigint unsigned default NULL, -- Number of users that still edit - ss_active_users bigint default '-1', + ss_active_users bigint unsigned default NULL, -- Number of images, equivalent to SELECT COUNT(*) FROM image - ss_images int default 0 + ss_images bigint unsigned default NULL ) /*$wgDBTableOptions*/; -- Pointless index to assuage developer superstitions -- To view, visit https://gerrit.wikimedia.org/r/352646 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I7d42aae434852a56b6f8dd559d8a5f3bce416021 Gerrit-PatchSet: 1 Gerrit-Project: mediawiki/core Gerrit-Branch: master Gerrit-Owner: EddieGP <wikimedia....@eddie-sh.de> Gerrit-Reviewer: Krinkle <krinklem...@gmail.com> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits