1
0
mirror of https://github.com/phpbb/phpbb.git synced 2025-05-28 10:09:15 +02:00

[ticket/13238] Do not drop indexes that do not exist from fulltext search

PHPBB3-13238
This commit is contained in:
Joas Schilling 2014-11-28 20:13:49 +01:00
parent 8f1a1874a9
commit aab98b8626
2 changed files with 70 additions and 12 deletions

View File

@ -15,10 +15,18 @@ namespace phpbb\db\migration\data\v310;
class mysql_fulltext_drop extends \phpbb\db\migration\migration
{
protected $indexes;
public function effectively_installed()
{
// This migration is irrelevant for all non-MySQL DBMSes.
return strpos($this->db->get_sql_layer(), 'mysql') === false;
if (strpos($this->db->get_sql_layer(), 'mysql') === false)
{
return true;
}
$this->find_indexes_to_drop();
return empty($this->indexes);
}
static public function depends_on()
@ -30,6 +38,11 @@ class mysql_fulltext_drop extends \phpbb\db\migration\migration
public function update_schema()
{
if (empty($this->indexes))
{
return array();
}
/*
* Drop FULLTEXT indexes related to MySQL fulltext search.
* Doing so is equivalent to dropping the search index from the ACP.
@ -40,12 +53,28 @@ class mysql_fulltext_drop extends \phpbb\db\migration\migration
*/
return array(
'drop_keys' => array(
$this->table_prefix . 'posts' => array(
'post_subject',
'post_text',
'post_content',
),
$this->table_prefix . 'posts' => $this->indexes,
),
);
}
public function find_indexes_to_drop()
{
if ($this->indexes !== null)
{
return $this->indexes;
}
$this->indexes = array();
$potential_keys = array('post_subject', 'post_text', 'post_content');
foreach ($potential_keys as $key)
{
if ($this->db_tools->sql_index_exists($this->table_prefix . 'posts', $key))
{
$this->indexes[] = $key;
}
}
return $this->indexes;
}
}

View File

@ -15,10 +15,18 @@ namespace phpbb\db\migration\data\v310;
class postgres_fulltext_drop extends \phpbb\db\migration\migration
{
protected $indexes;
public function effectively_installed()
{
// This migration is irrelevant for all non-PostgreSQL DBMSes.
return strpos($this->db->get_sql_layer(), 'postgres') === false;
if (strpos($this->db->get_sql_layer(), 'postgres') === false)
{
return true;
}
$this->find_indexes_to_drop();
return empty($this->indexes);
}
static public function depends_on()
@ -30,6 +38,11 @@ class postgres_fulltext_drop extends \phpbb\db\migration\migration
public function update_schema()
{
if (empty($this->indexes))
{
return array();
}
/*
* Drop FULLTEXT indexes related to PostgreSQL fulltext search.
* Doing so is equivalent to dropping the search index from the ACP.
@ -40,12 +53,28 @@ class postgres_fulltext_drop extends \phpbb\db\migration\migration
*/
return array(
'drop_keys' => array(
$this->table_prefix . 'posts' => array(
'post_subject',
'post_text',
'post_content',
),
$this->table_prefix . 'posts' => $this->indexes,
),
);
}
public function find_indexes_to_drop()
{
if ($this->indexes !== null)
{
return $this->indexes;
}
$this->indexes = array();
$potential_keys = array('post_subject', 'post_text', 'post_content');
foreach ($potential_keys as $key)
{
if ($this->db_tools->sql_index_exists($this->table_prefix . 'posts', $key))
{
$this->indexes[] = $key;
}
}
return $this->indexes;
}
}