You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
79 lines
2.3 KiB
79 lines
2.3 KiB
<?php |
|
|
|
declare(strict_types=1); |
|
|
|
namespace PhpMyAdmin\Controllers\Database\Structure; |
|
|
|
use PhpMyAdmin\Controllers\Database\AbstractController; |
|
use PhpMyAdmin\DatabaseInterface; |
|
use PhpMyAdmin\ResponseRenderer; |
|
use PhpMyAdmin\Template; |
|
use PhpMyAdmin\Url; |
|
use PhpMyAdmin\Util; |
|
|
|
use function json_encode; |
|
|
|
/** |
|
* Handles request for real row count on database level view page. |
|
*/ |
|
final class RealRowCountController extends AbstractController |
|
{ |
|
/** @var DatabaseInterface */ |
|
private $dbi; |
|
|
|
public function __construct(ResponseRenderer $response, Template $template, string $db, DatabaseInterface $dbi) |
|
{ |
|
parent::__construct($response, $template, $db); |
|
$this->dbi = $dbi; |
|
} |
|
|
|
public function __invoke(): void |
|
{ |
|
global $cfg, $db, $errorUrl; |
|
|
|
$parameters = [ |
|
'real_row_count_all' => $_REQUEST['real_row_count_all'] ?? null, |
|
'table' => $_REQUEST['table'] ?? null, |
|
]; |
|
|
|
Util::checkParameters(['db']); |
|
|
|
$errorUrl = Util::getScriptNameForOption($cfg['DefaultTabDatabase'], 'database'); |
|
$errorUrl .= Url::getCommon(['db' => $db], '&'); |
|
|
|
if (! $this->hasDatabase() || ! $this->response->isAjax()) { |
|
return; |
|
} |
|
|
|
[$tables] = Util::getDbInfo($this->db, '_structure'); |
|
|
|
// If there is a request to update all table's row count. |
|
if (! isset($parameters['real_row_count_all'])) { |
|
// Get the real row count for the table. |
|
$realRowCount = (int) $this->dbi |
|
->getTable($this->db, (string) $parameters['table']) |
|
->getRealRowCountTable(); |
|
// Format the number. |
|
$realRowCount = Util::formatNumber($realRowCount, 0); |
|
|
|
$this->response->addJSON(['real_row_count' => $realRowCount]); |
|
|
|
return; |
|
} |
|
|
|
// Array to store the results. |
|
$realRowCountAll = []; |
|
// Iterate over each table and fetch real row count. |
|
foreach ($tables as $table) { |
|
$rowCount = $this->dbi |
|
->getTable($this->db, $table['TABLE_NAME']) |
|
->getRealRowCountTable(); |
|
$realRowCountAll[] = [ |
|
'table' => $table['TABLE_NAME'], |
|
'row_count' => $rowCount, |
|
]; |
|
} |
|
|
|
$this->response->addJSON(['real_row_count_all' => json_encode($realRowCountAll)]); |
|
} |
|
}
|
|
|