1
0
mirror of https://github.com/phpbb/phpbb.git synced 2025-08-05 16:27:38 +02:00

[ticket/10653] Add ability to count table rows to database abstraction layer.

PHPBB3-10653
This commit is contained in:
Andreas Fischer
2012-02-18 19:29:32 +01:00
parent 97cf433dea
commit f9953fc339
4 changed files with 177 additions and 44 deletions

View File

@@ -1458,53 +1458,11 @@ class fulltext_native extends search_backend
}
function get_stats()
{
$this->stats['total_words'] = $this->get_table_row_count(SEARCH_WORDLIST_TABLE);
$this->stats['total_matches'] = $this->get_table_row_count(SEARCH_WORDMATCH_TABLE);
}
/**
* Gets statistics for a specific database table.
*
* @param string $table_name Table name
*
* @return string Row count. Prefixed with ~ if estimated.
*
* @access protected
*/
function get_table_row_count($table_name)
{
global $db;
if (stripos($db->sql_layer, 'mysql') === 0)
{
$sql = "SHOW TABLE STATUS
LIKE '" . $table_name . "'";
$result = $db->sql_query($sql);
$table_status = $db->sql_fetchrow($result);
$db->sql_freeresult($result);
if (isset($table_status['Engine']))
{
if ($table_status['Engine'] === 'MyISAM')
{
return $table_status['Rows'];
}
else if ($table_status['Engine'] === 'InnoDB' && $table_status['Rows'] > 100000)
{
return '~' . $table_status['Rows'];
}
}
}
// Get exact row count by actually counting rows
$sql = 'SELECT COUNT(*) AS rows_total
FROM ' . $table_name;
$result = $db->sql_query($sql);
$rows_total = $db->sql_fetchfield('rows_total');
$db->sql_freeresult($result);
return $rows_total;
$this->stats['total_words'] = $db->get_estimated_row_count(SEARCH_WORDLIST_TABLE);
$this->stats['total_matches'] = $db->get_estimated_row_count(SEARCH_WORDMATCH_TABLE);
}
/**