From b92e5101c50be29ca856697e87e3bda444d63389 Mon Sep 17 00:00:00 2001 From: Bill Pirkle Date: Tue, 16 Apr 2019 11:46:38 -0500 Subject: [PATCH] Remove usages of 'text' flag in revision-related getQueryInfo() calls Field rev_text_id will no longer be populated once the legacy schema is disabled, so joins against it will not work. Remove all usages of the 'text' flag in calls to both Revision::getQueryInfo() and RevisionStore::getQueryInfo() so that these joins are no longer attempted. Bug: T198342 Change-Id: I9be6a544c6f68555d4ea856f949f0040d05eac0f --- includes/api/ApiQueryAllRevisions.php | 4 +- includes/api/ApiQueryRevisions.php | 3 - maintenance/storage/testCompression.php | 4 +- tests/phpunit/includes/RevisionDbTestBase.php | 6 +- .../includes/RevisionMcrWriteBothDbTest.php | 5 ++ .../includes/RevisionNoContentModelDbTest.php | 6 ++ .../phpunit/includes/RevisionPreMcrDbTest.php | 5 ++ .../api/query/ApiQueryAllRevisionsTest.php | 64 +++++++++++++++++++ 8 files changed, 84 insertions(+), 13 deletions(-) create mode 100644 tests/phpunit/includes/api/query/ApiQueryAllRevisionsTest.php diff --git a/includes/api/ApiQueryAllRevisions.php b/includes/api/ApiQueryAllRevisions.php index 75d75ec8c0..58445a1faa 100644 --- a/includes/api/ApiQueryAllRevisions.php +++ b/includes/api/ApiQueryAllRevisions.php @@ -82,9 +82,7 @@ class ApiQueryAllRevisions extends ApiQueryRevisionsBase { if ( $resultPageSet === null ) { $this->parseParameters( $params ); - $revQuery = $revisionStore->getQueryInfo( - $this->fetchContent ? [ 'page', 'text' ] : [ 'page' ] - ); + $revQuery = $revisionStore->getQueryInfo( [ 'page' ] ); } else { $this->limit = $this->getParameter( 'limit' ) ?: 10; $revQuery = [ diff --git a/includes/api/ApiQueryRevisions.php b/includes/api/ApiQueryRevisions.php index 7e46c1a036..fc5028959f 100644 --- a/includes/api/ApiQueryRevisions.php +++ b/includes/api/ApiQueryRevisions.php @@ -153,9 +153,6 @@ class ApiQueryRevisions extends ApiQueryRevisionsBase { if ( $this->token !== null || $pageCount > 0 ) { $opts[] = 'page'; } - if ( $this->fetchContent ) { - $opts[] = 'text'; - } if ( $this->fld_user ) { $opts[] = 'user'; } diff --git a/maintenance/storage/testCompression.php b/maintenance/storage/testCompression.php index 7cac7287c1..fa5364dfce 100644 --- a/maintenance/storage/testCompression.php +++ b/maintenance/storage/testCompression.php @@ -47,8 +47,8 @@ if ( isset( $options['limit'] ) ) { } $type = $options['type'] ?? ConcatenatedGzipHistoryBlob::class; -$dbr = $this->getDB( DB_REPLICA ); -$revQuery = Revision::getQueryInfo( [ 'page', 'text' ] ); +$dbr = wfGetDB( DB_REPLICA ); +$revQuery = Revision::getQueryInfo( [ 'page' ] ); $res = $dbr->select( $revQuery['tables'], $revQuery['fields'], diff --git a/tests/phpunit/includes/RevisionDbTestBase.php b/tests/phpunit/includes/RevisionDbTestBase.php index d7f4fd62ea..983b701923 100644 --- a/tests/phpunit/includes/RevisionDbTestBase.php +++ b/tests/phpunit/includes/RevisionDbTestBase.php @@ -1585,11 +1585,7 @@ abstract class RevisionDbTestBase extends MediaWikiTestCase { $this->assertSame( $expected, $rev->getTextId() ); } - public function provideGetRevisionText() { - yield [ - [ 'text' ] - ]; - } + abstract public function provideGetRevisionText(); /** * @dataProvider provideGetRevisionText diff --git a/tests/phpunit/includes/RevisionMcrWriteBothDbTest.php b/tests/phpunit/includes/RevisionMcrWriteBothDbTest.php index bb62b2fda6..30a5484485 100644 --- a/tests/phpunit/includes/RevisionMcrWriteBothDbTest.php +++ b/tests/phpunit/includes/RevisionMcrWriteBothDbTest.php @@ -43,4 +43,9 @@ class RevisionMcrWriteBothDbTest extends RevisionDbTestBase { yield [ $row, 789 ]; } + public function provideGetRevisionText() { + yield [ + [ 'text' ] + ]; + } } diff --git a/tests/phpunit/includes/RevisionNoContentModelDbTest.php b/tests/phpunit/includes/RevisionNoContentModelDbTest.php index 19eeab3f1c..f19bc52bb8 100644 --- a/tests/phpunit/includes/RevisionNoContentModelDbTest.php +++ b/tests/phpunit/includes/RevisionNoContentModelDbTest.php @@ -44,4 +44,10 @@ class RevisionNoContentModelDbTest extends RevisionDbTestBase { yield [ $row, 789 ]; } + public function provideGetRevisionText() { + yield [ + [ 'text' ] + ]; + } + } diff --git a/tests/phpunit/includes/RevisionPreMcrDbTest.php b/tests/phpunit/includes/RevisionPreMcrDbTest.php index e520f2dd17..444c150efb 100644 --- a/tests/phpunit/includes/RevisionPreMcrDbTest.php +++ b/tests/phpunit/includes/RevisionPreMcrDbTest.php @@ -44,4 +44,9 @@ class RevisionPreMcrDbTest extends RevisionDbTestBase { yield [ $row, 789 ]; } + public function provideGetRevisionText() { + yield [ + [ 'text' ] + ]; + } } diff --git a/tests/phpunit/includes/api/query/ApiQueryAllRevisionsTest.php b/tests/phpunit/includes/api/query/ApiQueryAllRevisionsTest.php new file mode 100644 index 0000000000..6e4c3c0001 --- /dev/null +++ b/tests/phpunit/includes/api/query/ApiQueryAllRevisionsTest.php @@ -0,0 +1,64 @@ +tablesUsed[] = 'revision'; + } + + /** + * @group medium + */ + public function testContentComesWithContentModelAndFormat() { + $pageName = 'Help:' . __METHOD__; + $title = Title::newFromText( $pageName ); + $page = WikiPage::factory( $title ); + + $page->doEditContent( + ContentHandler::makeContent( 'Some text', $page->getTitle() ), + 'inserting content' + ); + $page->doEditContent( + ContentHandler::makeContent( 'Some other text', $page->getTitle() ), + 'adding revision' + ); + + $apiResult = $this->doApiRequest( [ + 'action' => 'query', + 'list' => 'allrevisions', + 'arvprop' => 'content', + 'arvslots' => 'main', + 'arvdir' => 'older', + ] ); + + $this->assertArrayHasKey( 'query', $apiResult[0] ); + $this->assertArrayHasKey( 'allrevisions', $apiResult[0]['query'] ); + $this->assertArrayHasKey( 0, $apiResult[0]['query']['allrevisions'] ); + $this->assertArrayHasKey( 'title', $apiResult[0]['query']['allrevisions'][0] ); + $this->assertSame( $pageName, $apiResult[0]['query']['allrevisions'][0]['title'] ); + $this->assertArrayHasKey( 'revisions', $apiResult[0]['query']['allrevisions'][0] ); + $this->assertCount( 2, $apiResult[0]['query']['allrevisions'][0]['revisions'] ); + + foreach ( $apiResult[0]['query']['allrevisions'] as $page ) { + $this->assertArrayHasKey( 'revisions', $page ); + foreach ( $page['revisions'] as $revision ) { + $this->assertArrayHasKey( 'slots', $revision ); + $this->assertArrayHasKey( 'main', $revision['slots'] ); + $this->assertArrayHasKey( 'contentformat', $revision['slots']['main'], + 'contentformat should be included when asking content so client knows how to interpret it' + ); + $this->assertArrayHasKey( 'contentmodel', $revision['slots']['main'], + 'contentmodel should be included when asking content so client knows how to interpret it' + ); + } + } + } +} -- 2.20.1