saper has uploaded a new change for review.
https://gerrit.wikimedia.org/r/100141
Change subject: Crude way to recreate PgSQL references in tables
......................................................................
Crude way to recreate PgSQL references in tables
This is a crude way to re-apply all reference
checks (foreign key constraints) to see how
that impacts unit testing code.
This is work in progress, do not merge.
Bug: 37702
Change-Id: I326bb4a189bf881299b9fb678033a927b916efac
---
M includes/db/CloneDatabase.php
M includes/db/Database.php
M includes/db/DatabasePostgres.php
A maintenance/postgres/archives/refs.sql
4 files changed, 240 insertions(+), 1 deletion(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/core
refs/changes/41/100141/1
diff --git a/includes/db/CloneDatabase.php b/includes/db/CloneDatabase.php
index 1e01d29..5b0829c 100644
--- a/includes/db/CloneDatabase.php
+++ b/includes/db/CloneDatabase.php
@@ -109,6 +109,7 @@
wfDebug( __METHOD__ . " duplicating $oldTableName to
$newTableName\n", true );
$this->db->duplicateTableStructure( $oldTableName,
$newTableName, $this->useTemporaryTables );
}
+ $this->db->recreateReferences();
}
/**
diff --git a/includes/db/Database.php b/includes/db/Database.php
index fa12595..164cd2e 100644
--- a/includes/db/Database.php
+++ b/includes/db/Database.php
@@ -3525,6 +3525,9 @@
'DatabaseBase::duplicateTableStructure is not
implemented in descendant class' );
}
+ public function recreateReferences( ) {
+ }
+
/**
* List all tables on the database
*
diff --git a/includes/db/DatabasePostgres.php b/includes/db/DatabasePostgres.php
index cfa2074..30d87a7 100644
--- a/includes/db/DatabasePostgres.php
+++ b/includes/db/DatabasePostgres.php
@@ -1039,7 +1039,11 @@
$oldName = $this->addIdentifierQuotes( $oldName );
return $this->query( 'CREATE ' . ( $temporary ? 'TEMPORARY ' :
'' ) . " TABLE $newName " .
- "(LIKE $oldName INCLUDING DEFAULTS)", $fname );
+ "(LIKE $oldName INCLUDING ALL)", $fname );
+ }
+
+ public function recreateReferences( ) {
+ $this->sourceFile( $this->patchPath( "refs.sql" ) );
}
function listTables( $prefix = null, $fname = __METHOD__ ) {
diff --git a/maintenance/postgres/archives/refs.sql
b/maintenance/postgres/archives/refs.sql
new file mode 100644
index 0000000..a6bff17
--- /dev/null
+++ b/maintenance/postgres/archives/refs.sql
@@ -0,0 +1,231 @@
+-- Name: archive_ar_user_fkey; Type: FK CONSTRAINT; Schema: mediawiki; Owner:
wikiuser
+--
+
+INSERT INTO unittest_mwuser SELECT * FROM mwuser;
+
+ALTER TABLE ONLY unittest_archive
+ ADD CONSTRAINT ut_archive_ar_user_fkey FOREIGN KEY (ar_user) REFERENCES
unittest_mwuser(user_id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: categorylinks_cl_from_fkey; Type: FK CONSTRAINT; Schema: mediawiki;
Owner: wikiuser
+--
+
+ALTER TABLE ONLY unittest_categorylinks
+ ADD CONSTRAINT ut_categorylinks_cl_from_fkey FOREIGN KEY (cl_from)
REFERENCES unittest_page(page_id) ON DELETE CASCADE DEFERRABLE INITIALLY
DEFERRED;
+
+
+--
+-- Name: externallinks_el_from_fkey; Type: FK CONSTRAINT; Schema: mediawiki;
Owner: wikiuser
+--
+
+ALTER TABLE ONLY unittest_externallinks
+ ADD CONSTRAINT ut_externallinks_el_from_fkey FOREIGN KEY (el_from)
REFERENCES unittest_page(page_id) ON DELETE CASCADE DEFERRABLE INITIALLY
DEFERRED;
+
+
+--
+-- Name: filearchive_fa_deleted_user_fkey; Type: FK CONSTRAINT; Schema:
mediawiki; Owner: wikiuser
+--
+
+ALTER TABLE ONLY unittest_filearchive
+ ADD CONSTRAINT ut_filearchive_fa_deleted_user_fkey FOREIGN KEY
(fa_deleted_user) REFERENCES unittest_mwuser(user_id) ON DELETE SET NULL
DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: filearchive_fa_user_fkey; Type: FK CONSTRAINT; Schema: mediawiki;
Owner: wikiuser
+--
+
+ALTER TABLE ONLY unittest_filearchive
+ ADD CONSTRAINT ut_filearchive_fa_user_fkey FOREIGN KEY (fa_user)
REFERENCES unittest_mwuser(user_id) ON DELETE SET NULL DEFERRABLE INITIALLY
DEFERRED;
+
+
+--
+-- Name: image_img_user_fkey; Type: FK CONSTRAINT; Schema: mediawiki; Owner:
wikiuser
+--
+
+ALTER TABLE ONLY unittest_image
+ ADD CONSTRAINT ut_image_img_user_fkey FOREIGN KEY (img_user) REFERENCES
unittest_mwuser(user_id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: imagelinks_il_from_fkey; Type: FK CONSTRAINT; Schema: mediawiki;
Owner: wikiuser
+--
+
+ALTER TABLE ONLY unittest_imagelinks
+ ADD CONSTRAINT ut_imagelinks_il_from_fkey FOREIGN KEY (il_from) REFERENCES
unittest_page(page_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: ipblocks_ipb_by_fkey; Type: FK CONSTRAINT; Schema: mediawiki; Owner:
wikiuser
+--
+
+ALTER TABLE ONLY unittest_ipblocks
+ ADD CONSTRAINT ut_ipblocks_ipb_by_fkey FOREIGN KEY (ipb_by) REFERENCES
unittest_mwuser(user_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: ipblocks_ipb_parent_block_id_fkey; Type: FK CONSTRAINT; Schema:
mediawiki; Owner: wikiuser
+--
+
+ALTER TABLE ONLY unittest_ipblocks
+ ADD CONSTRAINT ut_ipblocks_ipb_parent_block_id_fkey FOREIGN KEY
(ipb_parent_block_id) REFERENCES unittest_ipblocks(ipb_id) ON DELETE SET NULL
DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: ipblocks_ipb_user_fkey; Type: FK CONSTRAINT; Schema: mediawiki;
Owner: wikiuser
+--
+
+ALTER TABLE ONLY unittest_ipblocks
+ ADD CONSTRAINT ut_ipblocks_ipb_user_fkey FOREIGN KEY (ipb_user) REFERENCES
unittest_mwuser(user_id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: langlinks_ll_from_fkey; Type: FK CONSTRAINT; Schema: mediawiki;
Owner: wikiuser
+--
+
+ALTER TABLE ONLY unittest_langlinks
+ ADD CONSTRAINT ut_langlinks_ll_from_fkey FOREIGN KEY (ll_from) REFERENCES
unittest_page(page_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: logging_log_user_fkey; Type: FK CONSTRAINT; Schema: mediawiki; Owner:
wikiuser
+--
+
+ALTER TABLE ONLY unittest_logging
+ ADD CONSTRAINT ut_logging_log_user_fkey FOREIGN KEY (log_user) REFERENCES
unittest_mwuser(user_id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: oldimage_oi_name_fkey_cascaded; Type: FK CONSTRAINT; Schema:
mediawiki; Owner: wikiuser
+--
+
+ALTER TABLE ONLY unittest_oldimage
+ ADD CONSTRAINT ut_oldimage_oi_name_fkey_cascaded FOREIGN KEY (oi_name)
REFERENCES unittest_image(img_name) ON UPDATE CASCADE ON DELETE CASCADE
DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: oldimage_oi_user_fkey; Type: FK CONSTRAINT; Schema: mediawiki; Owner:
wikiuser
+--
+
+ALTER TABLE ONLY unittest_oldimage
+ ADD CONSTRAINT ut_oldimage_oi_user_fkey FOREIGN KEY (oi_user) REFERENCES
unittest_mwuser(user_id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: page_props_pp_page_fkey; Type: FK CONSTRAINT; Schema: mediawiki;
Owner: wikiuser
+--
+
+ALTER TABLE ONLY unittest_page_props
+ ADD CONSTRAINT ut_page_props_pp_page_fkey FOREIGN KEY (pp_page) REFERENCES
unittest_page(page_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: page_restrictions_pr_page_fkey; Type: FK CONSTRAINT; Schema:
mediawiki; Owner: wikiuser
+--
+
+ALTER TABLE ONLY unittest_page_restrictions
+ ADD CONSTRAINT ut_page_restrictions_pr_page_fkey FOREIGN KEY (pr_page)
REFERENCES unittest_page(page_id) ON DELETE CASCADE DEFERRABLE INITIALLY
DEFERRED;
+
+
+--
+-- Name: pagelinks_pl_from_fkey; Type: FK CONSTRAINT; Schema: mediawiki;
Owner: wikiuser
+--
+
+ALTER TABLE ONLY unittest_pagelinks
+ ADD CONSTRAINT ut_pagelinks_pl_from_fkey FOREIGN KEY (pl_from) REFERENCES
unittest_page(page_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: protected_titles_pt_user_fkey; Type: FK CONSTRAINT; Schema:
mediawiki; Owner: wikiuser
+--
+
+ALTER TABLE ONLY unittest_protected_titles
+ ADD CONSTRAINT ut_protected_titles_pt_user_fkey FOREIGN KEY (pt_user)
REFERENCES unittest_mwuser(user_id) ON DELETE SET NULL DEFERRABLE INITIALLY
DEFERRED;
+
+
+--
+-- Name: recentchanges_rc_cur_id_fkey; Type: FK CONSTRAINT; Schema: mediawiki;
Owner: wikiuser
+--
+
+ALTER TABLE ONLY unittest_recentchanges
+ ADD CONSTRAINT ut_recentchanges_rc_cur_id_fkey FOREIGN KEY (rc_cur_id)
REFERENCES unittest_page(page_id) ON DELETE SET NULL DEFERRABLE INITIALLY
DEFERRED;
+
+
+--
+-- Name: recentchanges_rc_user_fkey; Type: FK CONSTRAINT; Schema: mediawiki;
Owner: wikiuser
+--
+
+ALTER TABLE ONLY unittest_recentchanges
+ ADD CONSTRAINT ut_recentchanges_rc_user_fkey FOREIGN KEY (rc_user)
REFERENCES unittest_mwuser(user_id) ON DELETE SET NULL DEFERRABLE INITIALLY
DEFERRED;
+
+
+--
+-- Name: redirect_rd_from_fkey; Type: FK CONSTRAINT; Schema: mediawiki; Owner:
wikiuser
+--
+
+ALTER TABLE ONLY unittest_redirect
+ ADD CONSTRAINT ut_redirect_rd_from_fkey FOREIGN KEY (rd_from) REFERENCES
unittest_page(page_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: revision_rev_page_fkey; Type: FK CONSTRAINT; Schema: mediawiki;
Owner: wikiuser
+--
+
+ALTER TABLE ONLY unittest_revision
+ ADD CONSTRAINT ut_revision_rev_page_fkey FOREIGN KEY (rev_page) REFERENCES
unittest_page(page_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: revision_rev_user_fkey; Type: FK CONSTRAINT; Schema: mediawiki;
Owner: wikiuser
+--
+
+ALTER TABLE ONLY unittest_revision
+ ADD CONSTRAINT ut_revision_rev_user_fkey FOREIGN KEY (rev_user) REFERENCES
unittest_mwuser(user_id) ON DELETE RESTRICT DEFERRABLE INITIALLY DEFERRED;
+
+
+--
+-- Name: templatelinks_tl_from_fkey; Type: FK CONSTRAINT; Schema: mediawiki;
Owner: wikiuser
+--
+
+ALTER TABLE ONLY unittest_templatelinks
+ ADD CONSTRAINT ut_templatelinks_tl_from_fkey FOREIGN KEY (tl_from)
REFERENCES unittest_page(page_id) ON DELETE CASCADE DEFERRABLE INITIALLY
DEFERRED;
+
+
+--
+-- Name: user_former_groups_ufg_user_fkey; Type: FK CONSTRAINT; Schema:
mediawiki; Owner: wikiuser
+--
+
+ALTER TABLE ONLY unittest_user_former_groups
+ ADD CONSTRAINT ut_user_former_groups_ufg_user_fkey FOREIGN KEY (ufg_user)
REFERENCES unittest_mwuser(user_id) ON DELETE CASCADE DEFERRABLE INITIALLY
DEFERRED;
+
+
+--
+-- Name: user_groups_ug_user_fkey; Type: FK CONSTRAINT; Schema: mediawiki;
Owner: wikiuser
+--
+
+ALTER TABLE ONLY unittest_user_groups
+ ADD CONSTRAINT ut_user_groups_ug_user_fkey FOREIGN KEY (ug_user)
REFERENCES unittest_mwuser(user_id) ON DELETE CASCADE DEFERRABLE INITIALLY
DEFERRED;
+
+
+--
+-- Name: user_newtalk_user_id_fkey; Type: FK CONSTRAINT; Schema: mediawiki;
Owner: wikiuser
+--
+
+ALTER TABLE ONLY unittest_user_newtalk
+ ADD CONSTRAINT ut_user_newtalk_user_id_fkey FOREIGN KEY (user_id)
REFERENCES unittest_mwuser(user_id) ON DELETE CASCADE DEFERRABLE INITIALLY
DEFERRED;
+
+
+--
+-- Name: user_properties_up_user_fkey; Type: FK CONSTRAINT; Schema: mediawiki;
Owner: wikiuser
+--
+
+ALTER TABLE ONLY unittest_user_properties
+ ADD CONSTRAINT ut_user_properties_up_user_fkey FOREIGN KEY (up_user)
REFERENCES unittest_mwuser(user_id) ON DELETE CASCADE DEFERRABLE INITIALLY
DEFERRED;
+
+
+--
+-- Name: watchlist_wl_user_fkey; Type: FK CONSTRAINT; Schema: mediawiki;
Owner: wikiuser
+--
+
+ALTER TABLE ONLY unittest_watchlist
+ ADD CONSTRAINT ut_watchlist_wl_user_fkey FOREIGN KEY (wl_user) REFERENCES
unittest_mwuser(user_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
--
To view, visit https://gerrit.wikimedia.org/r/100141
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I326bb4a189bf881299b9fb678033a927b916efac
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/core
Gerrit-Branch: master
Gerrit-Owner: saper <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits