Avoid joining against page table when finding a page's oldest revision.
authordaniel <daniel.kinzler@wikimedia.de>
Wed, 1 Feb 2017 11:47:20 +0000 (12:47 +0100)
committerdaniel <daniel.kinzler@wikimedia.de>
Wed, 1 Feb 2017 12:05:00 +0000 (13:05 +0100)
Bug: T156537
Change-Id: Ifd27710cada823318ac3662d3c16323eb9a78839

includes/page/WikiPage.php
tests/phpunit/includes/page/WikiPageTest.php

index 1c1412a..d9f6f63 100644 (file)
@@ -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__,
                                [
index d32915b..6b911bf 100644 (file)
@@ -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.