X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=maintenance%2Frebuildtextindex.php;h=7cc75753b22cb0f211ee9510800e0a966307eb11;hb=de64366f58f0af7a02a417833c8e0605e4140fab;hp=900a52a5701051a9f84d00c612cdab4a61e551f0;hpb=954327b642fcf869aab7fa75dd58a82935f9d2e1;p=lhc%2Fweb%2Fwiklou.git diff --git a/maintenance/rebuildtextindex.php b/maintenance/rebuildtextindex.php index 900a52a570..7cc75753b2 100644 --- a/maintenance/rebuildtextindex.php +++ b/maintenance/rebuildtextindex.php @@ -27,7 +27,6 @@ require_once __DIR__ . '/Maintenance.php'; -use Wikimedia\Rdbms\IMaintainableDatabase; use Wikimedia\Rdbms\DatabaseSqlite; /** @@ -38,11 +37,6 @@ use Wikimedia\Rdbms\DatabaseSqlite; class RebuildTextIndex extends Maintenance { const RTI_CHUNK_SIZE = 500; - /** - * @var IMaintainableDatabase - */ - private $db; - public function __construct() { parent::__construct(); $this->addDescription( 'Rebuild search index table from scratch' ); @@ -54,23 +48,19 @@ class RebuildTextIndex extends Maintenance { public function execute() { // Shouldn't be needed for Postgres - $this->db = $this->getDB( DB_MASTER ); - if ( $this->db->getType() == 'postgres' ) { + $dbw = $this->getDB( DB_MASTER ); + if ( $dbw->getType() == 'postgres' ) { $this->fatalError( "This script is not needed when using Postgres.\n" ); } - if ( $this->db->getType() == 'sqlite' ) { + if ( $dbw->getType() == 'sqlite' ) { if ( !DatabaseSqlite::getFulltextSearchModule() ) { $this->fatalError( "Your version of SQLite module for PHP doesn't " . "support full-text search (FTS3).\n" ); } - if ( !$this->db->checkForEnabledSearch() ) { - $this->fatalError( "Your database schema is not configured for " - . "full-text search support. Run update.php.\n" ); - } } - if ( $this->db->getType() == 'mysql' ) { + if ( $dbw->getType() == 'mysql' ) { $this->dropMysqlTextIndex(); $this->clearSearchIndex(); $this->populateSearchIndex(); @@ -87,13 +77,14 @@ class RebuildTextIndex extends Maintenance { * Populates the search index with content from all pages */ protected function populateSearchIndex() { - $res = $this->db->select( 'page', 'MAX(page_id) AS count' ); - $s = $this->db->fetchObject( $res ); + $dbw = $this->getDB( DB_MASTER ); + $res = $dbw->select( 'page', 'MAX(page_id) AS count' ); + $s = $dbw->fetchObject( $res ); $count = $s->count; $this->output( "Rebuilding index fields for {$count} pages...\n" ); $n = 0; - $revQuery = Revision::getQueryInfo( [ 'page', 'text' ] ); + $revQuery = Revision::getQueryInfo( [ 'page' ] ); while ( $n < $count ) { if ( $n ) { @@ -101,10 +92,10 @@ class RebuildTextIndex extends Maintenance { } $end = $n + self::RTI_CHUNK_SIZE - 1; - $res = $this->db->select( + $res = $dbw->select( $revQuery['tables'], $revQuery['fields'], - [ "page_id BETWEEN $n AND $end", 'page_latest = rev_id', 'rev_text_id = old_id' ], + [ "page_id BETWEEN $n AND $end", 'page_latest = rev_id' ], __METHOD__, [], $revQuery['joins'] @@ -131,11 +122,12 @@ class RebuildTextIndex extends Maintenance { * (MySQL only) Drops fulltext index before populating the table. */ private function dropMysqlTextIndex() { - $searchindex = $this->db->tableName( 'searchindex' ); - if ( $this->db->indexExists( 'searchindex', 'si_title', __METHOD__ ) ) { + $dbw = $this->getDB( DB_MASTER ); + $searchindex = $dbw->tableName( 'searchindex' ); + if ( $dbw->indexExists( 'searchindex', 'si_title', __METHOD__ ) ) { $this->output( "Dropping index...\n" ); $sql = "ALTER TABLE $searchindex DROP INDEX si_title, DROP INDEX si_text"; - $this->db->query( $sql, __METHOD__ ); + $dbw->query( $sql, __METHOD__ ); } } @@ -143,11 +135,12 @@ class RebuildTextIndex extends Maintenance { * (MySQL only) Adds back fulltext index after populating the table. */ private function createMysqlTextIndex() { - $searchindex = $this->db->tableName( 'searchindex' ); + $dbw = $this->getDB( DB_MASTER ); + $searchindex = $dbw->tableName( 'searchindex' ); $this->output( "\nRebuild the index...\n" ); foreach ( [ 'si_title', 'si_text' ] as $field ) { $sql = "ALTER TABLE $searchindex ADD FULLTEXT $field ($field)"; - $this->db->query( $sql, __METHOD__ ); + $dbw->query( $sql, __METHOD__ ); } } @@ -155,8 +148,9 @@ class RebuildTextIndex extends Maintenance { * Deletes everything from search index. */ private function clearSearchIndex() { + $dbw = $this->getDB( DB_MASTER ); $this->output( 'Clearing searchindex table...' ); - $this->db->delete( 'searchindex', '*', __METHOD__ ); + $dbw->delete( 'searchindex', '*', __METHOD__ ); $this->output( "Done\n" ); } }