Line 253 | Line 253 |
---|
$keywords[$i] = ' '; break; case '-':
|
$keywords[$i] = ' '; break; case '-':
|
| // Ignore hyphen if followed by a space if (isset($keywords[$i + 1]) && $keywords[$i + 1] == ' ') { $keywords[$i] = ' '; } else { $space = $keywords[$i]; } break;
|
case '+': $space = $keywords[$i]; break;
| case '+': $space = $keywords[$i]; break;
|
Line 289 | Line 299 |
---|
);
$keywords = preg_replace($match, $replace, $keywords);
|
);
$keywords = preg_replace($match, $replace, $keywords);
|
$num_keywords = count(explode(' ', $keywords));
| // Ensure a space exists before +, - and | to make the split and count work correctly $countable_keywords = preg_replace('/(?<!\s)(\+|\-|\|)/', ' $1', $keywords);
$num_keywords = count(explode(' ', $countable_keywords));
|
// We limit the number of allowed keywords to minimize load on the database if ($this->config['max_num_search_keywords'] && $num_keywords > $this->config['max_num_search_keywords'])
| // We limit the number of allowed keywords to minimize load on the database if ($this->config['max_num_search_keywords'] && $num_keywords > $this->config['max_num_search_keywords'])
|
Line 383 | Line 397 |
---|
$word = substr($word, 1);
// a group of which at least one may not be in the resulting posts
|
$word = substr($word, 1);
// a group of which at least one may not be in the resulting posts
|
if ($word[0] == '(')
| if (isset($word[0]) && $word[0] == '(')
|
{ $word = array_unique(explode('|', substr($word, 1, -1))); $mode = 'must_exclude_one';
| { $word = array_unique(explode('|', substr($word, 1, -1))); $mode = 'must_exclude_one';
|
Line 624 | Line 638 |
---|
$w_num = 0;
$sql_array = array(
|
$w_num = 0;
$sql_array = array(
|
'SELECT' => ($type == 'posts') ? 'p.post_id' : 'p.topic_id',
| 'SELECT' => ($type == 'posts') ? 'DISTINCT p.post_id' : 'DISTINCT p.topic_id',
|
'FROM' => array( SEARCH_WORDMATCH_TABLE => array(), SEARCH_WORDLIST_TABLE => array(),
| 'FROM' => array( SEARCH_WORDMATCH_TABLE => array(), SEARCH_WORDLIST_TABLE => array(),
|
Line 898 | Line 912 |
---|
switch ($this->db->get_sql_layer()) { case 'mysqli':
|
switch ($this->db->get_sql_layer()) { case 'mysqli':
|
// 3.x does not support SQL_CALC_FOUND_ROWS // $sql_array['SELECT'] = 'SQL_CALC_FOUND_ROWS ' . $sql_array['SELECT'];
| |
$is_mysql = true;
break;
| $is_mysql = true;
break;
|
Line 956 | Line 967 |
---|
'FROM' => array(TOPICS_TABLE => 't'), 'ON' => 'p.topic_id = t.topic_id' );
|
'FROM' => array(TOPICS_TABLE => 't'), 'ON' => 'p.topic_id = t.topic_id' );
|
}
// if using mysql and the total result count is not calculated yet, get it from the db if (!$total_results && $is_mysql) { // Also count rows for the query as if there was not LIMIT. Add SQL_CALC_FOUND_ROWS to SQL $sql_array['SELECT'] = 'SQL_CALC_FOUND_ROWS ' . $sql_array['SELECT'];
| |
}
$sql_array['WHERE'] = implode(' AND ', $sql_where); $sql_array['GROUP_BY'] = ($group_by) ? (($type == 'posts') ? 'p.post_id' : 'p.topic_id') . ', ' . $sort_by_sql[$sort_key] : ''; $sql_array['ORDER_BY'] = $sql_sort;
|
}
$sql_array['WHERE'] = implode(' AND ', $sql_where); $sql_array['GROUP_BY'] = ($group_by) ? (($type == 'posts') ? 'p.post_id' : 'p.topic_id') . ', ' . $sort_by_sql[$sort_key] : ''; $sql_array['ORDER_BY'] = $sql_sort;
|
| $sql_array['SELECT'] .= $sort_by_sql[$sort_key] ? ", {$sort_by_sql[$sort_key]}" : '';
|
unset($sql_where, $sql_sort, $group_by);
| unset($sql_where, $sql_sort, $group_by);
|
Line 980 | Line 985 |
---|
} $this->db->sql_freeresult($result);
|
} $this->db->sql_freeresult($result);
|
| // If using mysql and the total result count is not calculated yet, get it from the db
|
if (!$total_results && $is_mysql) {
|
if (!$total_results && $is_mysql) {
|
// Get the number of results as calculated by MySQL $sql_count = 'SELECT FOUND_ROWS() as total_results';
| $sql_count = str_replace("SELECT {$sql_array['SELECT']}", "SELECT COUNT({$sql_array['SELECT']}) as total_results", $sql);
|
$result = $this->db->sql_query($sql_count);
|
$result = $this->db->sql_query($sql_count);
|
$total_results = (int) $this->db->sql_fetchfield('total_results');
| $total_results = $sql_array['GROUP_BY'] ? count($this->db->sql_fetchrowset($result)) : $this->db->sql_fetchfield('total_results');
|
$this->db->sql_freeresult($result);
if (!$total_results)
| $this->db->sql_freeresult($result);
if (!$total_results)
|
Line 1005 | Line 1010 |
---|
$id_ary[] = (int) $row[(($type == 'posts') ? 'post_id' : 'topic_id')]; } $this->db->sql_freeresult($result);
|
$id_ary[] = (int) $row[(($type == 'posts') ? 'post_id' : 'topic_id')]; } $this->db->sql_freeresult($result);
|
| |
}
// store the ids, from start on then delete anything that isn't on the current page because we only need ids for one page
| }
// store the ids, from start on then delete anything that isn't on the current page because we only need ids for one page
|
Line 1137 | Line 1141 |
---|
}
$select = ($type == 'posts') ? 'p.post_id' : 't.topic_id';
|
}
$select = ($type == 'posts') ? 'p.post_id' : 't.topic_id';
|
| $select .= $sort_by_sql[$sort_key] ? ", {$sort_by_sql[$sort_key]}" : '';
|
$is_mysql = false;
/**
| $is_mysql = false;
/**
|
Line 1192 | Line 1197 |
---|
switch ($this->db->get_sql_layer()) { case 'mysqli':
|
switch ($this->db->get_sql_layer()) { case 'mysqli':
|
// $select = 'SQL_CALC_FOUND_ROWS ' . $select;
| |
$is_mysql = true; break;
| $is_mysql = true; break;
|
Line 1285 | Line 1289 |
---|
if (!$total_results && $is_mysql) {
|
if (!$total_results && $is_mysql) {
|
// Count rows for the executed queries. Replace $select within $sql with SQL_CALC_FOUND_ROWS, and run it. $sql_calc = str_replace('SELECT ' . $select, 'SELECT SQL_CALC_FOUND_ROWS ' . $select, $sql);
$result = $this->db->sql_query($sql_calc); $this->db->sql_freeresult($result);
$sql_count = 'SELECT FOUND_ROWS() as total_results';
| $sql_count = str_replace("SELECT $select", "SELECT COUNT(*) as total_results", $sql);
|
$result = $this->db->sql_query($sql_count);
|
$result = $this->db->sql_query($sql_count);
|
$total_results = (int) $this->db->sql_fetchfield('total_results');
| $total_results = ($type == 'posts') ? (int) $this->db->sql_fetchfield('total_results') : count($this->db->sql_fetchrowset($result));
|
$this->db->sql_freeresult($result);
if (!$total_results)
| $this->db->sql_freeresult($result);
if (!$total_results)
|
Line 1830 | Line 1828 |
---|
/** * Replace HTML entities and NCRs */
|
/** * Replace HTML entities and NCRs */
|
$text = htmlspecialchars_decode(utf8_decode_ncr($text), ENT_QUOTES);
| $text = html_entity_decode(utf8_decode_ncr($text), ENT_QUOTES);
|
/** * Normalize to NFC
| /** * Normalize to NFC
|