From d0d90551c39e584aaf0b9ecc61810bcec5fc122a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maur=C3=ADcio=20Meneghini=20Fauth?= Date: Sun, 13 Nov 2022 20:26:27 -0300 Subject: [PATCH] Remove the dblist global variable MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: MaurĂ­cio Meneghini Fauth --- .../Database/Structure/CopyFormController.php | 4 +- .../Controllers/DatabaseController.php | 3 +- .../Server/Databases/DestroyController.php | 3 +- .../Server/DatabasesController.php | 3 +- .../Table/OperationsController.php | 5 +- .../Controllers/Table/RelationController.php | 6 +- libraries/classes/Database/DatabaseList.php | 48 -------- libraries/classes/DatabaseInterface.php | 31 +++-- libraries/classes/Export.php | 2 +- libraries/classes/Export/Options.php | 2 +- libraries/classes/Operations.php | 2 +- libraries/classes/ReplicationGui.php | 2 +- libraries/classes/Server/Privileges.php | 34 +++-- libraries/classes/Table.php | 9 +- phpstan-baseline.neon | 5 - psalm-baseline.xml | 116 ++++-------------- psalm.xml | 1 - .../Export/ExportControllerTest.php | 6 +- .../Server/DatabasesControllerTest.php | 13 +- .../Table/OperationsControllerTest.php | 6 +- .../Table/RelationControllerTest.php | 13 -- test/classes/DatabaseInterfaceTest.php | 43 +++---- test/classes/ExportTest.php | 9 +- test/classes/Server/PrivilegesTest.php | 18 +-- test/classes/TableTest.php | 17 +-- 25 files changed, 134 insertions(+), 267 deletions(-) delete mode 100644 libraries/classes/Database/DatabaseList.php diff --git a/libraries/classes/Controllers/Database/Structure/CopyFormController.php b/libraries/classes/Controllers/Database/Structure/CopyFormController.php index a85421f77d..a7193c5140 100644 --- a/libraries/classes/Controllers/Database/Structure/CopyFormController.php +++ b/libraries/classes/Controllers/Database/Structure/CopyFormController.php @@ -13,8 +13,6 @@ final class CopyFormController extends AbstractController { public function __invoke(ServerRequest $request): void { - $GLOBALS['dblist'] = $GLOBALS['dblist'] ?? null; - $selected = $_POST['selected_tbl'] ?? []; if (empty($selected)) { @@ -29,7 +27,7 @@ final class CopyFormController extends AbstractController $urlParams['selected'][] = $selectedValue; } - $databasesList = $GLOBALS['dblist']->databases; + $databasesList = $GLOBALS['dbi']->getDatabaseList(); foreach ($databasesList as $key => $databaseName) { if ($databaseName == $GLOBALS['db']) { $databasesList->offsetUnset($key); diff --git a/libraries/classes/Controllers/DatabaseController.php b/libraries/classes/Controllers/DatabaseController.php index 8cbf5524fb..a761e475b5 100644 --- a/libraries/classes/Controllers/DatabaseController.php +++ b/libraries/classes/Controllers/DatabaseController.php @@ -10,7 +10,6 @@ final class DatabaseController extends AbstractController { public function __invoke(ServerRequest $request): void { - $GLOBALS['dblist'] = $GLOBALS['dblist'] ?? null; - $this->response->addJSON(['databases' => $GLOBALS['dblist']->databases]); + $this->response->addJSON(['databases' => $GLOBALS['dbi']->getDatabaseList()]); } } diff --git a/libraries/classes/Controllers/Server/Databases/DestroyController.php b/libraries/classes/Controllers/Server/Databases/DestroyController.php index d69d30d071..31f37fccc8 100644 --- a/libraries/classes/Controllers/Server/Databases/DestroyController.php +++ b/libraries/classes/Controllers/Server/Databases/DestroyController.php @@ -48,7 +48,6 @@ final class DestroyController extends AbstractController { $GLOBALS['selected'] = $GLOBALS['selected'] ?? null; $GLOBALS['errorUrl'] = $GLOBALS['errorUrl'] ?? null; - $GLOBALS['dblist'] = $GLOBALS['dblist'] ?? null; $GLOBALS['reload'] = $GLOBALS['reload'] ?? null; $selected_dbs = $_POST['selected_dbs'] ?? null; @@ -90,7 +89,7 @@ final class DestroyController extends AbstractController $this->transformations->clear($database); } - $GLOBALS['dblist']->databases->build(); + $this->dbi->getDatabaseList()->build(); $message = Message::success( _ngettext( diff --git a/libraries/classes/Controllers/Server/DatabasesController.php b/libraries/classes/Controllers/Server/DatabasesController.php index e188d7c06e..3ffef00251 100644 --- a/libraries/classes/Controllers/Server/DatabasesController.php +++ b/libraries/classes/Controllers/Server/DatabasesController.php @@ -78,7 +78,6 @@ class DatabasesController extends AbstractController public function __invoke(ServerRequest $request): void { $GLOBALS['server'] = $GLOBALS['server'] ?? null; - $GLOBALS['dblist'] = $GLOBALS['dblist'] ?? null; $GLOBALS['is_create_db_priv'] = $GLOBALS['is_create_db_priv'] ?? null; $GLOBALS['db_to_create'] = $GLOBALS['db_to_create'] ?? null; $GLOBALS['text_dir'] = $GLOBALS['text_dir'] ?? null; @@ -121,7 +120,7 @@ class DatabasesController extends AbstractController $this->position, true ); - $this->databaseCount = count($GLOBALS['dblist']->databases); + $this->databaseCount = count($this->dbi->getDatabaseList()); } $urlParams = [ diff --git a/libraries/classes/Controllers/Table/OperationsController.php b/libraries/classes/Controllers/Table/OperationsController.php index 10d83dd87d..65f8ea55c6 100644 --- a/libraries/classes/Controllers/Table/OperationsController.php +++ b/libraries/classes/Controllers/Table/OperationsController.php @@ -489,8 +489,9 @@ class OperationsController extends AbstractController $possibleRowFormats = $this->operations->getPossibleRowFormat(); $databaseList = []; - if (count($GLOBALS['dblist']->databases) <= $GLOBALS['cfg']['MaxDbList']) { - $databaseList = $GLOBALS['dblist']->databases->getList(); + $listDatabase = $this->dbi->getDatabaseList(); + if (count($listDatabase) <= $GLOBALS['cfg']['MaxDbList']) { + $databaseList = $listDatabase->getList(); } $hasForeignKeys = ! empty($this->relation->getForeigners($GLOBALS['db'], $GLOBALS['table'], '', 'foreign')); diff --git a/libraries/classes/Controllers/Table/RelationController.php b/libraries/classes/Controllers/Table/RelationController.php index cff9cb83d3..1a4c105d3f 100644 --- a/libraries/classes/Controllers/Table/RelationController.php +++ b/libraries/classes/Controllers/Table/RelationController.php @@ -179,7 +179,7 @@ final class RelationController extends AbstractController 'db' => $GLOBALS['db'], 'table' => $GLOBALS['table'], 'url_params' => $GLOBALS['urlParams'], - 'databases' => $GLOBALS['dblist']->databases, + 'databases' => $this->dbi->getDatabaseList(), 'foreign_db' => $foreignDb, 'foreign_table' => $foreignTable, 'unique_columns' => $uniqueColumns, @@ -198,7 +198,7 @@ final class RelationController extends AbstractController 'db' => $GLOBALS['db'], 'table' => $GLOBALS['table'], 'url_params' => $GLOBALS['urlParams'], - 'databases' => $GLOBALS['dblist']->databases, + 'databases' => $this->dbi->getDatabaseList(), 'foreign_db' => false, 'foreign_table' => false, 'unique_columns' => [], @@ -220,7 +220,7 @@ final class RelationController extends AbstractController 'column_hash_array' => $column_hash_array, 'save_row' => array_values($columns), 'url_params' => $GLOBALS['urlParams'], - 'databases' => $GLOBALS['dblist']->databases, + 'databases' => $this->dbi->getDatabaseList(), 'dbi' => $this->dbi, 'default_sliders_state' => $GLOBALS['cfg']['InitialSlidersState'], 'route' => $request->getRoute(), diff --git a/libraries/classes/Database/DatabaseList.php b/libraries/classes/Database/DatabaseList.php deleted file mode 100644 index 957cca5a94..0000000000 --- a/libraries/classes/Database/DatabaseList.php +++ /dev/null @@ -1,48 +0,0 @@ -getDatabaseList(); - } - - return null; - } - - /** - * Accessor to PMA::$databases - */ - public function getDatabaseList(): ListDatabase - { - if ($this->databases === null) { - $this->databases = new ListDatabase(); - } - - return $this->databases; - } -} diff --git a/libraries/classes/DatabaseInterface.php b/libraries/classes/DatabaseInterface.php index 7a6254ad73..86907884b9 100644 --- a/libraries/classes/DatabaseInterface.php +++ b/libraries/classes/DatabaseInterface.php @@ -9,7 +9,6 @@ namespace PhpMyAdmin; use PhpMyAdmin\Config\Settings\Server; use PhpMyAdmin\ConfigStorage\Relation; -use PhpMyAdmin\Database\DatabaseList; use PhpMyAdmin\Dbal\DatabaseName; use PhpMyAdmin\Dbal\DbalInterface; use PhpMyAdmin\Dbal\DbiExtension; @@ -141,6 +140,9 @@ class DatabaseInterface implements DbalInterface /** @var float */ public $lastQueryExecutionTime = 0; + /** @var ListDatabase|null */ + private $databaseList = null; + /** * @param DbiExtension $ext Object to be used for database queries */ @@ -701,14 +703,14 @@ class DatabaseInterface implements DbalInterface // f.e. to apply hide_db and only_db $drops = array_diff( array_keys($databases), - (array) $GLOBALS['dblist']->databases + (array) $this->getDatabaseList() ); foreach ($drops as $drop) { unset($databases[$drop]); } } else { $databases = []; - foreach ($GLOBALS['dblist']->databases as $databaseName) { + foreach ($this->getDatabaseList() as $databaseName) { // Compatibility with INFORMATION_SCHEMA output $databases[$databaseName]['SCHEMA_NAME'] = $databaseName; @@ -843,7 +845,7 @@ class DatabaseInterface implements DbalInterface $columns = []; if ($database === null) { - foreach ($GLOBALS['dblist']->databases as $database) { + foreach ($this->getDatabaseList() as $database) { $columns[$database] = $this->getColumnsFull($database, null, null, $link); } @@ -1145,10 +1147,7 @@ class DatabaseInterface implements DbalInterface /* Loads closest context to this version. */ Context::loadClosest(($this->isMariaDb ? 'MariaDb' : 'MySql') . $this->versionInt); - /** - * the DatabaseList class as a stub for the ListDatabase class - */ - $GLOBALS['dblist'] = new DatabaseList(); + $this->databaseList = null; } /** @@ -1190,14 +1189,11 @@ class DatabaseInterface implements DbalInterface public function postConnectControl(Relation $relation): void { // If Zero configuration mode enabled, check PMA tables in current db. - if ($GLOBALS['cfg']['ZeroConf'] != true) { + if (! $GLOBALS['cfg']['ZeroConf']) { return; } - /** - * the DatabaseList class as a stub for the ListDatabase class - */ - $GLOBALS['dblist'] = new DatabaseList(); + $this->databaseList = null; $relation->initRelationParamsCache(); } @@ -2108,4 +2104,13 @@ class DatabaseInterface implements DbalInterface { return $this->extension->prepare($this->links[$link], $query); } + + public function getDatabaseList(): ListDatabase + { + if ($this->databaseList === null) { + $this->databaseList = new ListDatabase(); + } + + return $this->databaseList; + } } diff --git a/libraries/classes/Export.php b/libraries/classes/Export.php index 69c4c5af23..7edcb1bc11 100644 --- a/libraries/classes/Export.php +++ b/libraries/classes/Export.php @@ -594,7 +594,7 @@ class Export } // Walk over databases - foreach ($GLOBALS['dblist']->databases as $currentDb) { + foreach ($this->dbi->getDatabaseList() as $currentDb) { if (! isset($tmpSelect) || ! mb_strpos(' ' . $tmpSelect, '|' . $currentDb . '|')) { continue; } diff --git a/libraries/classes/Export/Options.php b/libraries/classes/Export/Options.php index 75fd8f1e11..5ec5252a27 100644 --- a/libraries/classes/Export/Options.php +++ b/libraries/classes/Export/Options.php @@ -67,7 +67,7 @@ final class Options } $databases = []; - foreach ($GLOBALS['dblist']->databases as $currentDb) { + foreach ($GLOBALS['dbi']->getDatabaseList() as $currentDb) { if (Utilities::isSystemSchema($currentDb, true)) { continue; } diff --git a/libraries/classes/Operations.php b/libraries/classes/Operations.php index e939e38ba0..30d3088570 100644 --- a/libraries/classes/Operations.php +++ b/libraries/classes/Operations.php @@ -122,7 +122,7 @@ class Operations // rebuild the database list because Table::moveCopy // checks in this list if the target db exists - $GLOBALS['dblist']->databases->build(); + $this->dbi->getDatabaseList()->build(); } /** diff --git a/libraries/classes/ReplicationGui.php b/libraries/classes/ReplicationGui.php index 766370248c..74b1bfb808 100644 --- a/libraries/classes/ReplicationGui.php +++ b/libraries/classes/ReplicationGui.php @@ -212,7 +212,7 @@ class ReplicationGui public function getHtmlForReplicationDbMultibox(): string { $databases = []; - foreach ($GLOBALS['dblist']->databases as $database) { + foreach ($GLOBALS['dbi']->getDatabaseList() as $database) { if (Utilities::isSystemSchema($database)) { continue; } diff --git a/libraries/classes/Server/Privileges.php b/libraries/classes/Server/Privileges.php index fc745a1d42..db7451494a 100644 --- a/libraries/classes/Server/Privileges.php +++ b/libraries/classes/Server/Privileges.php @@ -1914,7 +1914,7 @@ class Privileges $data['type'] = $type; if ($type === 'database') { - $predDbArray = $GLOBALS['dblist']->databases; + $predDbArray = $this->dbi->getDatabaseList(); $databasesToSkip = [ 'information_schema', 'performance_schema', @@ -1922,24 +1922,22 @@ class Privileges $databases = []; $escapedDatabases = []; - if (! empty($predDbArray)) { - foreach ($predDbArray as $currentDb) { - if (in_array($currentDb, $databasesToSkip)) { - continue; - } - - $currentDbEscaped = Util::escapeMysqlWildcards($currentDb); - // cannot use array_diff() once, outside of the loop, - // because the list of databases has special characters - // already escaped in $foundRows, - // contrary to the output of SHOW DATABASES - if (in_array($currentDbEscaped, $foundRows)) { - continue; - } - - $databases[] = $currentDb; - $escapedDatabases[] = $currentDbEscaped; + foreach ($predDbArray as $currentDb) { + if (in_array($currentDb, $databasesToSkip)) { + continue; } + + $currentDbEscaped = Util::escapeMysqlWildcards($currentDb); + // cannot use array_diff() once, outside of the loop, + // because the list of databases has special characters + // already escaped in $foundRows, + // contrary to the output of SHOW DATABASES + if (in_array($currentDbEscaped, $foundRows)) { + continue; + } + + $databases[] = $currentDb; + $escapedDatabases[] = $currentDbEscaped; } $data['databases'] = $databases; diff --git a/libraries/classes/Table.php b/libraries/classes/Table.php index 273f84e266..03ca38cb81 100644 --- a/libraries/classes/Table.php +++ b/libraries/classes/Table.php @@ -984,8 +984,9 @@ class Table implements Stringable $GLOBALS['asfile'] = 1; // Ensuring the target database is valid. - if (! $GLOBALS['dblist']->databases->exists($sourceDb, $targetDb)) { - if (! $GLOBALS['dblist']->databases->exists($sourceDb)) { + $databaseList = $GLOBALS['dbi']->getDatabaseList(); + if (! $databaseList->exists($sourceDb, $targetDb)) { + if (! $databaseList->exists($sourceDb)) { $GLOBALS['message'] = Message::rawError( sprintf( __('Source database `%s` was not found!'), @@ -994,7 +995,7 @@ class Table implements Stringable ); } - if (! $GLOBALS['dblist']->databases->exists($targetDb)) { + if (! $databaseList->exists($targetDb)) { $GLOBALS['message'] = Message::rawError( sprintf( __('Target database `%s` was not found!'), @@ -1461,7 +1462,7 @@ class Table implements Stringable if ($newDb !== null && $newDb !== $this->getDbName()) { // Ensure the target is valid - if (! $GLOBALS['dblist']->databases->exists($newDb)) { + if (! $this->dbi->getDatabaseList()->exists($newDb)) { $this->errors[] = __('Invalid database:') . ' ' . $newDb; return false; diff --git a/phpstan-baseline.neon b/phpstan-baseline.neon index 37af1af3af..6ac5f9dcc5 100644 --- a/phpstan-baseline.neon +++ b/phpstan-baseline.neon @@ -11165,11 +11165,6 @@ parameters: count: 1 path: test/classes/TableTest.php - - - message: "#^Strict comparison using \\=\\=\\= between mixed and mixed will always evaluate to true\\.$#" - count: 1 - path: test/classes/TableTest.php - - message: "#^Method PhpMyAdmin\\\\Tests\\\\TemplateTest\\:\\:providerTestDynamicRender\\(\\) return type has no value type specified in iterable type array\\.$#" count: 1 diff --git a/psalm-baseline.xml b/psalm-baseline.xml index 8e44134e2d..c1d50d70b6 100644 --- a/psalm-baseline.xml +++ b/psalm-baseline.xml @@ -1480,30 +1480,13 @@ - - $databaseName - $databasesList - $key + $selectedValue $urlParams['selected'][] - - getList - offsetUnset - $selected - - $databasesList - - - $GLOBALS['dblist']->databases - - - getList - offsetUnset - @@ -1876,11 +1859,6 @@ $GLOBALS['total_num_tables'] - - - $GLOBALS['dblist']->databases - - $decoded_response['success'] @@ -2598,9 +2576,6 @@ $GLOBALS['reload'] $GLOBALS['selected'] - - build - $database $database @@ -2610,12 +2585,6 @@ $database $database - - $GLOBALS['dblist']->databases - - - build - $selected_dbs === [] @@ -2624,8 +2593,7 @@ $GLOBALS['cfg']['AllowUserDropDatabase'] - - $GLOBALS['dblist']->databases + $database['DEFAULT_COLLATION_NAME'] $database['SCHEMA_NAME'] $primaryInfo['Do_DB'] @@ -2680,12 +2648,6 @@ $params['sort_by'] $params['sort_order'] - - $GLOBALS['dblist']->databases - - - $GLOBALS['dblist']->databases - $hasStatistics $position @@ -3560,10 +3522,9 @@ - + $GLOBALS['create_options']['pack_keys'] $GLOBALS['create_options']['page_checksum'] ?? '' - $GLOBALS['dblist']->databases $GLOBALS['row_format'] $GLOBALS['warning_messages'] $_message @@ -3576,7 +3537,7 @@ $GLOBALS['showtable']['Row_format'] - + $GLOBALS['auto_increment'] $GLOBALS['columns'] $GLOBALS['comment'] @@ -3604,11 +3565,7 @@ $GLOBALS['tbl_collation'] $GLOBALS['tbl_is_view'] $GLOBALS['warning_messages'] - $databaseList - - getList - @@ -4838,14 +4795,6 @@ (int) $GLOBALS['cfg']['MaxRows'] - - - $this->databases === null - - - null - - escapeString @@ -5867,11 +5816,9 @@ int|bool - + $a $b - $database - $databaseName $grant $grant $host @@ -5923,8 +5870,7 @@ $tableData['Engine'] $tableData['Index_length'] - - $databases[$databaseName] + $resultRows[$row[$key]] $resultTarget[$row[$keyIndex]] $resultTarget[$row[$keyIndex]] @@ -5936,12 +5882,9 @@ $this->links[$link] $this->links[$link] - + $aLength $bLength - $database - $databaseName - $databases[$databaseName]['SCHEMA_NAME'] $grant $grant $keyIndex @@ -6593,9 +6536,8 @@ int - + $GLOBALS['xkana'] ?? '' - $currentDb $dbAlias $dbAlias $dbAlias @@ -6627,7 +6569,7 @@ $aliases[$dbName]['tables'][$tableName] $aliases[$dbName]['tables'][$tableName] - + $GLOBALS['active_page'] $GLOBALS['save_filename'] $GLOBALS['time_start'] @@ -6636,7 +6578,6 @@ $aliases[$dbName]['tables'][$tableName]['columns'][$col] $col $colAs - $currentDb $dbAlias $dbAlias $table @@ -6654,8 +6595,7 @@ $view $views[] - - $currentDb + $table $table $this->dumpBufferObjects[$objectName] @@ -6676,9 +6616,6 @@ $GLOBALS['cfg']['Export'] $GLOBALS['cfg']['Export'] - - $currentDb - $GLOBALS['cfg']['Export']['compression'] $GLOBALS['cfg']['Export']['file_template_database'] @@ -6686,9 +6623,8 @@ $GLOBALS['cfg']['Export']['file_template_table'] $_SESSION['tmpval']['aliases'] - + $aliases - $currentDb $selectedCompression @@ -9054,9 +8990,6 @@ $trigger $view - - build - $old_priv[$i] $old_priv[0] @@ -12224,8 +12157,7 @@ - - $database + $errorMessage $serverReplicationVariable $successMessage @@ -12266,8 +12198,7 @@ $_SESSION['replication']['sr_action_status'] $_SESSION['replication']['sr_action_status'] - - $database + $errorMessage $linkToPrimary $serverReplicationVariable @@ -12507,12 +12438,11 @@ array - + $GLOBALS['dbname'] $alterRealSqlQuery $alterSqlQuery $createUserReal - $currentDb $exportUser $exportUser $exportUser @@ -12632,7 +12562,7 @@ $specificPrivileges[$grant[0]] $specificPrivileges[$grant[0]] - + $GLOBALS[$key] $GLOBALS['new_username'] $GLOBALS['pred_hostname'] @@ -12641,9 +12571,7 @@ $authenticationPlugin $authenticationPlugin $authenticationPlugin - $currentDb $currentGrant - $databases[] $exportUser $extraData['db_wildcard_privs'] $foundRows[] @@ -12660,7 +12588,6 @@ $paramRoutineName $paramTableName $password - $predDbArray $privilege $privilege['routine'] $privilege['table'] @@ -13405,6 +13332,13 @@ escapeString escapeString + + $newDb + $sourceDb + $sourceDb + $targetDb + $targetDb + $tableAutoIncrement ?? '' @@ -13588,12 +13522,6 @@ string string - - exists - exists - exists - exists - $backquoted ? Util::backquote($column) : $column $index[0] diff --git a/psalm.xml b/psalm.xml index 2670e932d1..24323efebb 100644 --- a/psalm.xml +++ b/psalm.xml @@ -240,7 +240,6 @@ db_priv: bool, dbi: PhpMyAdmin\DatabaseInterface, dbs_to_test: string[]|false, - dblist: PhpMyAdmin\Database\DatabaseList, display_query: string, errno: int, error: bool, diff --git a/test/classes/Controllers/Export/ExportControllerTest.php b/test/classes/Controllers/Export/ExportControllerTest.php index c433a957dc..113cfd4f81 100644 --- a/test/classes/Controllers/Export/ExportControllerTest.php +++ b/test/classes/Controllers/Export/ExportControllerTest.php @@ -53,10 +53,14 @@ class ExportControllerTest extends AbstractTestCase $GLOBALS['PMA_PHP_SELF'] = 'index.php'; $GLOBALS['sql_indexes'] = null; $GLOBALS['sql_auto_increments'] = null; - $GLOBALS['dblist'] = (object) ['databases' => ['test_db']]; $GLOBALS['config']->selectServer(); $GLOBALS['cfg'] = $GLOBALS['config']->settings; + $this->dummyDbi->addResult( + 'SELECT `SCHEMA_NAME` FROM `INFORMATION_SCHEMA`.`SCHEMATA`', + [['test_db']], + ['SCHEMA_NAME'] + ); $this->dummyDbi->addResult('SET SQL_MODE=""', [[]]); $this->dummyDbi->addResult('SET time_zone = "+00:00"', [[]]); $this->dummyDbi->addResult('SELECT @@session.time_zone', [['SYSTEM']]); diff --git a/test/classes/Controllers/Server/DatabasesControllerTest.php b/test/classes/Controllers/Server/DatabasesControllerTest.php index a74da76a8a..df99b7515e 100644 --- a/test/classes/Controllers/Server/DatabasesControllerTest.php +++ b/test/classes/Controllers/Server/DatabasesControllerTest.php @@ -14,7 +14,6 @@ use PhpMyAdmin\Tests\AbstractTestCase; use PhpMyAdmin\Tests\Stubs\DbiDummy; use PhpMyAdmin\Tests\Stubs\ResponseRenderer; use PhpMyAdmin\Transformations; -use stdClass; use function __; @@ -48,12 +47,7 @@ class DatabasesControllerTest extends AbstractTestCase public function testIndexAction(): void { - $GLOBALS['dblist'] = new stdClass(); - $GLOBALS['dblist']->databases = [ - 'sakila', - 'employees', - ]; - + $GLOBALS['cfg']['Server']['only_db'] = ''; $template = new Template(); $transformations = new Transformations(); $relationCleanup = new RelationCleanup( @@ -71,6 +65,11 @@ class DatabasesControllerTest extends AbstractTestCase $GLOBALS['dbi'] ); + $this->dummyDbi->addResult( + 'SELECT `SCHEMA_NAME` FROM `INFORMATION_SCHEMA`.`SCHEMATA`', + [['sakila'], ['employees']], + ['SCHEMA_NAME'] + ); $this->dummyDbi->addSelectDb('mysql'); $controller($this->createStub(ServerRequest::class)); $this->dummyDbi->assertAllSelectsConsumed(); diff --git a/test/classes/Controllers/Table/OperationsControllerTest.php b/test/classes/Controllers/Table/OperationsControllerTest.php index 776ec753b4..abdad97956 100644 --- a/test/classes/Controllers/Table/OperationsControllerTest.php +++ b/test/classes/Controllers/Table/OperationsControllerTest.php @@ -39,7 +39,6 @@ class OperationsControllerTest extends AbstractTestCase $GLOBALS['text_dir'] = 'ltr'; $GLOBALS['lang'] = 'en'; $GLOBALS['PMA_PHP_SELF'] = 'index.php'; - $GLOBALS['dblist'] = (object) ['databases' => ['test_db']]; $GLOBALS['db'] = 'test_db'; $GLOBALS['table'] = 'test_table'; @@ -53,6 +52,11 @@ class OperationsControllerTest extends AbstractTestCase $GLOBALS['containerBuilder']->setParameter('db', 'test_db'); $GLOBALS['containerBuilder']->setParameter('table', 'test_table'); + $this->dummyDbi->addResult( + 'SELECT `SCHEMA_NAME` FROM `INFORMATION_SCHEMA`.`SCHEMATA`', + [['test_db']], + ['SCHEMA_NAME'] + ); $this->dummyDbi->addSelectDb('test_db'); $this->dummyDbi->addSelectDb('test_db'); // phpcs:disable Generic.Files.LineLength.TooLong diff --git a/test/classes/Controllers/Table/RelationControllerTest.php b/test/classes/Controllers/Table/RelationControllerTest.php index 179af36f60..4aa8a53fad 100644 --- a/test/classes/Controllers/Table/RelationControllerTest.php +++ b/test/classes/Controllers/Table/RelationControllerTest.php @@ -13,7 +13,6 @@ use PhpMyAdmin\Template; use PhpMyAdmin\Tests\AbstractTestCase; use PhpMyAdmin\Tests\Stubs\DummyResult; use PhpMyAdmin\Tests\Stubs\ResponseRenderer as ResponseStub; -use stdClass; /** * @covers \PhpMyAdmin\Controllers\Table\RelationController @@ -45,18 +44,6 @@ class RelationControllerTest extends AbstractTestCase $_POST['foreignDb'] = 'db'; $_POST['foreignTable'] = 'table'; - $GLOBALS['dblist'] = new stdClass(); - $GLOBALS['dblist']->databases = new class - { - /** - * @param mixed $name name - */ - public function exists($name): bool - { - return true; - } - }; - $dbi = $this->getMockBuilder(DatabaseInterface::class) ->disableOriginalConstructor() ->getMock(); diff --git a/test/classes/DatabaseInterfaceTest.php b/test/classes/DatabaseInterfaceTest.php index cb83b3f03e..66924af0c6 100644 --- a/test/classes/DatabaseInterfaceTest.php +++ b/test/classes/DatabaseInterfaceTest.php @@ -6,15 +6,14 @@ namespace PhpMyAdmin\Tests; use mysqli_stmt; use PhpMyAdmin\ConfigStorage\Relation; -use PhpMyAdmin\Database\DatabaseList; use PhpMyAdmin\DatabaseInterface; use PhpMyAdmin\Dbal\DbiExtension; use PhpMyAdmin\Dbal\ResultInterface; +use PhpMyAdmin\LanguageManager; use PhpMyAdmin\Query\Utilities; use PhpMyAdmin\SqlParser\Context; use PhpMyAdmin\SystemDatabase; use PhpMyAdmin\Utils\SessionCache; -use stdClass; /** * @covers \PhpMyAdmin\DatabaseInterface @@ -168,22 +167,22 @@ class DatabaseInterfaceTest extends AbstractTestCase $this->assertInstanceOf(SystemDatabase::class, $sd); } - /** - * Tests for DBI::postConnectControl() method. - */ - public function testPostConnectControl(): void + public function testPostConnectControlWithZeroConf(): void { - $dummyDbi = $this->createDbiDummy(); - $dbi = $this->createDatabaseInterface($dummyDbi); + $GLOBALS['cfg']['ZeroConf'] = true; + $dbi = $this->createDatabaseInterface(); + $relationMock = $this->createMock(Relation::class); + $relationMock->expects($this->once())->method('initRelationParamsCache'); + $dbi->postConnectControl($relationMock); + } - $dummyDbi->addResult( - 'SHOW TABLES FROM `phpmyadmin`;', - [] - ); - $GLOBALS['db'] = ''; - $GLOBALS['cfg']['Server']['only_db'] = []; - $dbi->postConnectControl(new Relation($dbi)); - $this->assertInstanceOf(DatabaseList::class, $GLOBALS['dblist']); + public function testPostConnectControlWithoutZeroConf(): void + { + $GLOBALS['cfg']['ZeroConf'] = false; + $dbi = $this->createDatabaseInterface(); + $relationMock = $this->createMock(Relation::class); + $relationMock->expects($this->never())->method('initRelationParamsCache'); + $dbi->postConnectControl($relationMock); } /** @@ -194,6 +193,7 @@ class DatabaseInterfaceTest extends AbstractTestCase { $GLOBALS['lang'] = 'en'; $GLOBALS['cfg']['Server']['SessionTimeZone'] = ''; + LanguageManager::getInstance()->availableLanguages(); $mock = $this->getMockBuilder(DatabaseInterface::class) ->disableOriginalConstructor() @@ -221,6 +221,7 @@ class DatabaseInterfaceTest extends AbstractTestCase '@@version' => '10.20.7-MariaDB-1:10.9.3+maria~ubu2204', '@@version_comment' => 'mariadb.org binary distribution', ]; + LanguageManager::getInstance()->availableLanguages(); $mock = $this->getMockBuilder(DatabaseInterface::class) ->disableOriginalConstructor() @@ -256,6 +257,7 @@ class DatabaseInterfaceTest extends AbstractTestCase ): void { $GLOBALS['lang'] = 'en'; $GLOBALS['cfg']['Server']['SessionTimeZone'] = ''; + LanguageManager::getInstance()->availableLanguages(); $mock = $this->getMockBuilder(DatabaseInterface::class) ->disableOriginalConstructor() @@ -625,18 +627,17 @@ class DatabaseInterfaceTest extends AbstractTestCase { $dummyDbi = $this->createDbiDummy(); $dbi = $this->createDatabaseInterface($dummyDbi); + $GLOBALS['dbi'] = $dbi; $GLOBALS['db'] = ''; $GLOBALS['table'] = ''; $GLOBALS['server'] = 1; $GLOBALS['cfg']['Server']['DisableIS'] = true; + $GLOBALS['cfg']['Server']['only_db'] = ''; $GLOBALS['cfg']['NaturalOrder'] = true; - $GLOBALS['dblist'] = new stdClass(); - $GLOBALS['dblist']->databases = [ - 'db1', - 'db2', - ]; $dummyDbi->removeDefaultResults(); + $dummyDbi->addResult('SELECT CURRENT_USER();', []); + $dummyDbi->addResult('SHOW DATABASES', [['db1'], ['db2']], ['Database']); $dummyDbi->addResult( 'SELECT @@collation_database', [ diff --git a/test/classes/ExportTest.php b/test/classes/ExportTest.php index 0ee750ae82..9d4d74d6f3 100644 --- a/test/classes/ExportTest.php +++ b/test/classes/ExportTest.php @@ -10,7 +10,6 @@ use PhpMyAdmin\Export; use PhpMyAdmin\Plugins\Export\ExportPhparray; use PhpMyAdmin\Plugins\Export\ExportSql; use PhpMyAdmin\Transformations; -use stdClass; use function htmlspecialchars; @@ -189,18 +188,22 @@ SQL; public function testExportServer(): void { $GLOBALS['plugin_param'] = ['export_type' => 'server', 'single_table' => false]; - $GLOBALS['dblist'] = new stdClass(); - $GLOBALS['dblist']->databases = ['test_db']; $GLOBALS['output_kanji_conversion'] = false; $GLOBALS['buffer_needed'] = false; $GLOBALS['asfile'] = false; $GLOBALS['cfg']['Server']['DisableIS'] = false; + $GLOBALS['cfg']['Server']['only_db'] = ''; $GLOBALS['sql_structure_or_data'] = 'structure_and_data'; $GLOBALS['sql_insert_syntax'] = 'both'; $GLOBALS['sql_max_query_size'] = '50000'; // phpcs:disable Generic.Files.LineLength.TooLong $dbiDummy = $this->createDbiDummy(); + $dbiDummy->addResult( + 'SELECT `SCHEMA_NAME` FROM `INFORMATION_SCHEMA`.`SCHEMATA`', + [['test_db']], + ['SCHEMA_NAME'] + ); $dbiDummy->addResult( 'SHOW TABLES FROM `test_db`;', [['test_table']], diff --git a/test/classes/Server/PrivilegesTest.php b/test/classes/Server/PrivilegesTest.php index 12baac0b2c..7c9847ba8b 100644 --- a/test/classes/Server/PrivilegesTest.php +++ b/test/classes/Server/PrivilegesTest.php @@ -21,7 +21,6 @@ use PhpMyAdmin\Tests\Stubs\DummyResult; use PhpMyAdmin\Url; use PhpMyAdmin\Util; use ReflectionMethod; -use stdClass; use function __; use function _pgettext; @@ -1684,7 +1683,9 @@ class PrivilegesTest extends AbstractTestCase ); // phpcs:enable - $serverPrivileges = $this->getPrivileges($this->createDatabaseInterface($dummyDbi)); + $dbi = $this->createDatabaseInterface($dummyDbi); + $GLOBALS['dbi'] = $dbi; + $serverPrivileges = $this->getPrivileges($dbi); // Test case 1 $actual = $serverPrivileges->getHtmlForAllTableSpecificRights('pma', 'host', 'table', 'pmadb'); @@ -1697,12 +1698,13 @@ class PrivilegesTest extends AbstractTestCase $this->assertStringContainsString('Table-specific privileges', $actual); // Test case 2 - $GLOBALS['dblist'] = new stdClass(); - $GLOBALS['dblist']->databases = [ - 'x', - 'y', - 'z', - ]; + $GLOBALS['cfg']['Server']['DisableIS'] = false; + $GLOBALS['cfg']['Server']['only_db'] = ''; + $dummyDbi->addResult( + 'SELECT `SCHEMA_NAME` FROM `INFORMATION_SCHEMA`.`SCHEMATA`', + [['x'], ['y'], ['z']], + ['SCHEMA_NAME'] + ); $actual = $serverPrivileges->getHtmlForAllTableSpecificRights('pma2', 'host2', 'database', ''); $this->assertStringContainsString( '
', diff --git a/test/classes/TableTest.php b/test/classes/TableTest.php index 434b66f8f0..4b34a016b5 100644 --- a/test/classes/TableTest.php +++ b/test/classes/TableTest.php @@ -7,11 +7,11 @@ namespace PhpMyAdmin\Tests; use PhpMyAdmin\ConfigStorage\RelationParameters; use PhpMyAdmin\DatabaseInterface; use PhpMyAdmin\Index; +use PhpMyAdmin\ListDatabase; use PhpMyAdmin\Query\Cache; use PhpMyAdmin\Table; use PhpMyAdmin\Tests\Stubs\DbiDummy; use PhpMyAdmin\Tests\Stubs\DummyResult; -use stdClass; /** * @covers \PhpMyAdmin\Table @@ -37,17 +37,6 @@ class TableTest extends AbstractTestCase $GLOBALS['sql_if_not_exists'] = true; $GLOBALS['sql_drop_table'] = true; $GLOBALS['cfg']['Server']['table_uiprefs'] = 'pma__table_uiprefs'; - $GLOBALS['dblist'] = new stdClass(); - $GLOBALS['dblist']->databases = new class - { - /** - * @param mixed $name name - */ - public function exists($name): bool - { - return $name === $name;// unused $name hack - } - }; $sql_isView_true = 'SELECT TABLE_NAME' . ' FROM information_schema.VIEWS' @@ -269,6 +258,10 @@ class TableTest extends AbstractTestCase ->disableOriginalConstructor() ->getMock(); + $databaseList = $this->createStub(ListDatabase::class); + $databaseList->method('exists')->willReturn(true); + $dbi->expects($this->any())->method('getDatabaseList')->willReturn($databaseList); + $dbi->expects($this->any())->method('fetchResult') ->will($this->returnValueMap($fetchResult));