[ticket/16096] Use InnoDB fulltext limits for InnoDB tables

The max and min search length for the MySQL database vary based on the
engine for the underlying table. For MyISAM tables, the variables are
ft_max_word_len and ft_min_word_len, but for InnoDB tables the
variables are innodb_ft_max_token_size and innodb_ft_min_token_size.

Take the posts table type into account when setting the max and min
search length.

PHPBB3-16096
This commit is contained in:
Casey Peel 2019-07-08 05:46:41 +00:00
parent 9e9bdb69b5
commit e33e572741

View file

@ -188,7 +188,7 @@ class fulltext_mysql extends \phpbb\search\base
} }
$sql = 'SHOW VARIABLES $sql = 'SHOW VARIABLES
LIKE \'ft\_%\''; LIKE \'%ft\_%\'';
$result = $this->db->sql_query($sql); $result = $this->db->sql_query($sql);
$mysql_info = array(); $mysql_info = array();
@ -198,8 +198,16 @@ class fulltext_mysql extends \phpbb\search\base
} }
$this->db->sql_freeresult($result); $this->db->sql_freeresult($result);
if ($engine === 'MyISAM')
{
$this->config->set('fulltext_mysql_max_word_len', $mysql_info['ft_max_word_len']); $this->config->set('fulltext_mysql_max_word_len', $mysql_info['ft_max_word_len']);
$this->config->set('fulltext_mysql_min_word_len', $mysql_info['ft_min_word_len']); $this->config->set('fulltext_mysql_min_word_len', $mysql_info['ft_min_word_len']);
}
else if ($engine === 'InnoDB')
{
$this->config->set('fulltext_mysql_max_word_len', $mysql_info['innodb_ft_max_token_size']);
$this->config->set('fulltext_mysql_min_word_len', $mysql_info['innodb_ft_min_token_size']);
}
return false; return false;
} }