示例#1
0
 public function execute()
 {
     // Shouldn't be needed for Postgres
     $this->db = $this->getDB(DB_MASTER);
     if ($this->db->getType() == 'postgres') {
         $this->error("This script is not needed when using Postgres.\n", true);
     }
     if ($this->db->getType() == 'sqlite') {
         if (!DatabaseSqlite::getFulltextSearchModule()) {
             $this->error("Your version of SQLite module for PHP doesn't " . "support full-text search (FTS3).\n", true);
         }
         if (!$this->db->checkForEnabledSearch()) {
             $this->error("Your database schema is not configured for " . "full-text search support. Run update.php.\n", true);
         }
     }
     if ($this->db->getType() == 'mysql') {
         $this->dropMysqlTextIndex();
         $this->clearSearchIndex();
         $this->populateSearchIndex();
         $this->createMysqlTextIndex();
     } else {
         $this->clearSearchIndex();
         $this->populateSearchIndex();
     }
     $this->output("Done.\n");
 }
示例#2
0
 /**
  * @param DatabaseBase $db
  * @param bool $shared
  * @param Maintenance $maintenance
  *
  * @throws MWException
  * @return DatabaseUpdater
  */
 public static function newForDB(&$db, $shared = false, $maintenance = null)
 {
     $type = $db->getType();
     if (in_array($type, Installer::getDBTypes())) {
         $class = ucfirst($type) . 'Updater';
         return new $class($db, $shared, $maintenance);
     } else {
         throw new MWException(__METHOD__ . ' called for unsupported $wgDBtype');
     }
 }
示例#3
0
 /**
  * @throws MWException
  * @since 1.18
  */
 protected function checkDbIsSupported()
 {
     if (!in_array($this->db->getType(), $this->supportedDBs)) {
         throw new MWException($this->db->getType() . " is not currently supported for unit testing.");
     }
 }
 /**
  * @param $params array
  */
 function __construct($params)
 {
     $this->db = $params['connection'];
     parent::__construct(array('servers' => array(array('type' => $this->db->getType(), 'host' => $this->db->getServer(), 'dbname' => $this->db->getDBname(), 'load' => 1))));
 }
示例#5
0
 /**
  * @param array $params
  */
 public function __construct(array $params)
 {
     $this->db = $params['connection'];
     parent::__construct(['servers' => [['type' => $this->db->getType(), 'host' => $this->db->getServer(), 'dbname' => $this->db->getDBname(), 'load' => 1]], 'trxProfiler' => $this->trxProfiler]);
     if (isset($params['readOnlyReason'])) {
         $this->db->setLBInfo('readOnlyReason', $params['readOnlyReason']);
     }
 }
示例#6
0
 private function dropFunctions()
 {
     $this->db->query('DROP FUNCTION IF EXISTS mw_test_function' . ($this->db->getType() == 'postgres' ? '()' : ''));
 }
示例#7
0
 /**
  * Return an SQL expression selecting rows which sort above the given row,
  * assuming an ordering of cl_collation, cl_to, cl_type, cl_from
  * @param stdClass $row
  * @param DatabaseBase $dbw
  * @return string
  */
 function getBatchCondition($row, $dbw)
 {
     if ($this->hasOption('previous-collation')) {
         $fields = ['cl_to', 'cl_type', 'cl_from'];
     } else {
         $fields = ['cl_collation', 'cl_to', 'cl_type', 'cl_from'];
     }
     $first = true;
     $cond = false;
     $prefix = false;
     foreach ($fields as $field) {
         if ($dbw->getType() === 'mysql' && $field === 'cl_type') {
             // Range conditions with enums are weird in mysql
             // This must be a numeric literal, or it won't work.
             $encValue = intval($row->cl_type_numeric);
         } else {
             $encValue = $dbw->addQuotes($row->{$field});
         }
         $inequality = "{$field} > {$encValue}";
         $equality = "{$field} = {$encValue}";
         if ($first) {
             $cond = $inequality;
             $prefix = $equality;
             $first = false;
         } else {
             $cond .= " OR ({$prefix} AND {$inequality})";
             $prefix .= " AND {$equality}";
         }
     }
     return $cond;
 }