2024-10-03 10:42:42 +02:00
< ? php
declare ( strict_types = 1 );
/**
* SPDX - FileCopyrightText : 2024 Nextcloud GmbH and Nextcloud contributors
* SPDX - License - Identifier : AGPL - 3.0 - or - later
*/
namespace OCA\Settings\SetupChecks ;
use Doctrine\DBAL\Platforms\MySQLPlatform ;
use OC\DB\Connection ;
use OCP\IConfig ;
use OCP\IL10N ;
use OCP\IURLGenerator ;
use OCP\SetupCheck\ISetupCheck ;
use OCP\SetupCheck\SetupResult ;
class MysqlRowFormat implements ISetupCheck {
public function __construct (
private IL10N $l10n ,
private IConfig $config ,
private Connection $connection ,
private IURLGenerator $urlGenerator ,
) {
}
public function getName () : string {
return $this -> l10n -> t ( 'MySQL row format' );
}
public function getCategory () : string {
return 'database' ;
}
public function run () : SetupResult {
if ( ! $this -> connection -> getDatabasePlatform () instanceof MySQLPlatform ) {
return SetupResult :: success ( $this -> l10n -> t ( 'You are not using MySQL' ));
}
$wrongRowFormatTables = $this -> getRowNotDynamicTables ();
if ( empty ( $wrongRowFormatTables )) {
2024-11-03 16:34:57 +01:00
return SetupResult :: success ( $this -> l10n -> t ( 'None of your tables use ROW_FORMAT=Compressed' ));
2024-10-03 10:42:42 +02:00
}
return SetupResult :: warning (
2024-10-18 14:19:34 +02:00
$this -> l10n -> t (
'Incorrect row format found in your database. ROW_FORMAT=Dynamic offers the best database performances for Nextcloud. Please update row format on the following list: %s.' ,
2024-10-03 10:42:42 +02:00
[ implode ( ', ' , $wrongRowFormatTables )],
),
'https://dev.mysql.com/doc/refman/en/innodb-row-format.html' ,
);
}
/**
* @ return string []
*/
private function getRowNotDynamicTables () : array {
2025-02-26 15:43:36 +01:00
$sql = " SELECT table_name
2024-10-03 10:42:42 +02:00
FROM information_schema . tables
WHERE table_schema = ?
2025-02-26 15:43:36 +01:00
AND table_name LIKE '*PREFIX*%'
AND row_format != 'Dynamic' ; " ;
2024-10-03 10:42:42 +02:00
return $this -> connection -> executeQuery (
$sql ,
[ $this -> config -> getSystemValueString ( 'dbname' )],
) -> fetchFirstColumn ();
}
}