From e74264c071856844a3090400219f0f63ef620cb1 Mon Sep 17 00:00:00 2001 From: daniel Date: Wed, 1 Feb 2017 12:47:20 +0100 Subject: [PATCH] Avoid joining against page table when finding a page's oldest revision. Bug: T156537 Change-Id: Ifd27710cada823318ac3662d3c16323eb9a78839 --- includes/page/WikiPage.php | 6 +-- tests/phpunit/includes/page/WikiPageTest.php | 41 ++++++++++++++++++++ 2 files changed, 43 insertions(+), 4 deletions(-) diff --git a/includes/page/WikiPage.php b/includes/page/WikiPage.php index 1c1412a81f..d9f6f6376e 100644 --- a/includes/page/WikiPage.php +++ b/includes/page/WikiPage.php @@ -582,12 +582,10 @@ class WikiPage implements Page, IDBAccessObject { $row = null; while ( $continue ) { $row = $db->selectRow( - [ 'page', 'revision' ], + [ 'revision' ], $revSelectFields, [ - 'page_namespace' => $this->mTitle->getNamespace(), - 'page_title' => $this->mTitle->getDBkey(), - 'rev_page = page_id' + 'rev_page' => $this->getId() ], __METHOD__, [ diff --git a/tests/phpunit/includes/page/WikiPageTest.php b/tests/phpunit/includes/page/WikiPageTest.php index d32915b464..6b911bf3a6 100644 --- a/tests/phpunit/includes/page/WikiPageTest.php +++ b/tests/phpunit/includes/page/WikiPageTest.php @@ -752,6 +752,47 @@ more stuff } */ + /** + * @covers WikiPage::getOldestRevision + */ + public function testGetOldestRevision() { + $page = $this->newPage( "WikiPageTest_testGetOldestRevision" ); + $page->doEditContent( + new WikitextContent( 'one' ), + "first edit", + EDIT_NEW + ); + $rev1 = $page->getRevision(); + + $page = new WikiPage( $page->getTitle() ); + $page->doEditContent( + new WikitextContent( 'two' ), + "second edit", + EDIT_UPDATE + ); + + $page = new WikiPage( $page->getTitle() ); + $page->doEditContent( + new WikitextContent( 'three' ), + "third edit", + EDIT_UPDATE + ); + + // sanity check + $this->assertNotEquals( + $rev1->getId(), + $page->getRevision()->getId(), + '$page->getRevision()->getId()' + ); + + // actual test + $this->assertEquals( + $rev1->getId(), + $page->getOldestRevision()->getId(), + '$page->getOldestRevision()->getId()' + ); + } + /** * @todo FIXME: this is a better rollback test than the one below, but it * keeps failing in jenkins for some reason. -- 2.20.1