diff --git a/libraries/classes/DatabaseInterface.php b/libraries/classes/DatabaseInterface.php index 761bb5600b..87b40e5208 100644 --- a/libraries/classes/DatabaseInterface.php +++ b/libraries/classes/DatabaseInterface.php @@ -1794,7 +1794,7 @@ class DatabaseInterface implements DbalInterface return $hasGrantPrivilege; } - $collation = $this->getServerCollation(); + $collation = (string) $this->getVariable('collation_connection'); [$user, $host] = $this->getCurrentUserAndHost(); $query = QueryGenerator::getInformationSchemaDataForGranteeRequest($user, $host, $collation); @@ -1853,7 +1853,7 @@ class DatabaseInterface implements DbalInterface return $hasCreatePrivilege; } - $collation = $this->getServerCollation(); + $collation = (string) $this->getVariable('collation_connection'); [$user, $host] = $this->getCurrentUserAndHost(); $query = QueryGenerator::getInformationSchemaDataForCreateRequest($user, $host, $collation); diff --git a/test/classes/Controllers/Database/PrivilegesControllerTest.php b/test/classes/Controllers/Database/PrivilegesControllerTest.php index 5d56a4ee53..155ac1c31f 100644 --- a/test/classes/Controllers/Database/PrivilegesControllerTest.php +++ b/test/classes/Controllers/Database/PrivilegesControllerTest.php @@ -39,12 +39,12 @@ class PrivilegesControllerTest extends AbstractTestCase $PMA_PHP_SELF = 'index.php'; $dbiDummy = $this->createDbiDummy(); - $dbiDummy->addResult('SELECT @@collation_server', [['utf8mb4_uca1400_ai_ci']]); - // phpcs:ignore Generic.Files.LineLength.TooLong + // phpcs:disable Generic.Files.LineLength.TooLong + $dbiDummy->addResult('SHOW SESSION VARIABLES LIKE \'collation_connection\';', [['collation_connection', 'utf8mb4_uca1400_ai_ci']]); $dbiDummy->addResult("SELECT 1 FROM `INFORMATION_SCHEMA`.`USER_PRIVILEGES` WHERE `PRIVILEGE_TYPE` = 'CREATE USER' AND '''pma_test''@''localhost''' LIKE `GRANTEE` UNION SELECT 1 FROM mysql.user WHERE `create_user_priv` = 'Y' COLLATE utf8mb4_uca1400_ai_ci AND 'pma_test' LIKE `User` AND '' LIKE `Host` LIMIT 1", [['1']]); - $dbiDummy->addResult('SELECT @@collation_server', [['utf8mb4_uca1400_ai_ci']]); - // phpcs:ignore Generic.Files.LineLength.TooLong + $dbiDummy->addResult('SHOW SESSION VARIABLES LIKE \'collation_connection\';', [['collation_connection', 'utf8mb4_uca1400_ai_ci']]); $dbiDummy->addResult("SELECT 1 FROM (SELECT `GRANTEE`, `IS_GRANTABLE` FROM `INFORMATION_SCHEMA`.`COLUMN_PRIVILEGES` UNION SELECT `GRANTEE`, `IS_GRANTABLE` FROM `INFORMATION_SCHEMA`.`TABLE_PRIVILEGES` UNION SELECT `GRANTEE`, `IS_GRANTABLE` FROM `INFORMATION_SCHEMA`.`SCHEMA_PRIVILEGES` UNION SELECT `GRANTEE`, `IS_GRANTABLE` FROM `INFORMATION_SCHEMA`.`USER_PRIVILEGES`) t WHERE `IS_GRANTABLE` = 'YES' AND '''pma_test''@''localhost''' LIKE `GRANTEE` UNION SELECT 1 FROM mysql.user WHERE `create_user_priv` = 'Y' COLLATE utf8mb4_uca1400_ai_ci AND 'pma_test' LIKE `User` AND '' LIKE `Host` LIMIT 1", [['1']]); + // phpcs:enable $dbi = $this->createDatabaseInterface($dbiDummy); $GLOBALS['dbi'] = $dbi; @@ -62,6 +62,8 @@ class PrivilegesControllerTest extends AbstractTestCase $dbi ))(['checkprivsdb' => $db]); + $dbiDummy->assertAllQueriesConsumed(); + self::assertStringContainsString(Url::getCommon(['db' => $db], ''), $actual); self::assertStringContainsString($db, $actual); diff --git a/test/classes/Controllers/Table/PrivilegesControllerTest.php b/test/classes/Controllers/Table/PrivilegesControllerTest.php index 6a0a7f3896..360a9aecd8 100644 --- a/test/classes/Controllers/Table/PrivilegesControllerTest.php +++ b/test/classes/Controllers/Table/PrivilegesControllerTest.php @@ -40,12 +40,12 @@ class PrivilegesControllerTest extends AbstractTestCase $PMA_PHP_SELF = 'index.php'; $dbiDummy = $this->createDbiDummy(); - $dbiDummy->addResult('SELECT @@collation_server', [['utf8mb4_general_ci']]); - // phpcs:ignore Generic.Files.LineLength.TooLong + // phpcs:disable Generic.Files.LineLength.TooLong + $dbiDummy->addResult('SHOW SESSION VARIABLES LIKE \'collation_connection\';', [['collation_connection', 'utf8mb4_general_ci']]); $dbiDummy->addResult("SELECT 1 FROM `INFORMATION_SCHEMA`.`USER_PRIVILEGES` WHERE `PRIVILEGE_TYPE` = 'CREATE USER' AND '''pma_test''@''localhost''' LIKE `GRANTEE` UNION SELECT 1 FROM mysql.user WHERE `create_user_priv` = 'Y' COLLATE utf8mb4_general_ci AND 'pma_test' LIKE `User` AND '' LIKE `Host` LIMIT 1", [['1']]); - $dbiDummy->addResult('SELECT @@collation_server', [['utf8mb4_general_ci']]); - // phpcs:ignore Generic.Files.LineLength.TooLong + $dbiDummy->addResult('SHOW SESSION VARIABLES LIKE \'collation_connection\';', [['collation_connection', 'utf8mb4_general_ci']]); $dbiDummy->addResult("SELECT 1 FROM (SELECT `GRANTEE`, `IS_GRANTABLE` FROM `INFORMATION_SCHEMA`.`COLUMN_PRIVILEGES` UNION SELECT `GRANTEE`, `IS_GRANTABLE` FROM `INFORMATION_SCHEMA`.`TABLE_PRIVILEGES` UNION SELECT `GRANTEE`, `IS_GRANTABLE` FROM `INFORMATION_SCHEMA`.`SCHEMA_PRIVILEGES` UNION SELECT `GRANTEE`, `IS_GRANTABLE` FROM `INFORMATION_SCHEMA`.`USER_PRIVILEGES`) t WHERE `IS_GRANTABLE` = 'YES' AND '''pma_test''@''localhost''' LIKE `GRANTEE` UNION SELECT 1 FROM mysql.user WHERE `create_user_priv` = 'Y' COLLATE utf8mb4_general_ci AND 'pma_test' LIKE `User` AND '' LIKE `Host` LIMIT 1", [['1']]); + // phpcs:enable $dbi = $this->createDatabaseInterface($dbiDummy); $GLOBALS['dbi'] = $dbi; @@ -64,6 +64,8 @@ class PrivilegesControllerTest extends AbstractTestCase $dbi ))(['checkprivsdb' => $db, 'checkprivstable' => $table]); + $dbiDummy->assertAllQueriesConsumed(); + self::assertStringContainsString($db . '.' . $table, $actual); //validate 2: Url::getCommon diff --git a/test/classes/Stubs/DbiDummy.php b/test/classes/Stubs/DbiDummy.php index 5056760d08..bae5b7bd7c 100644 --- a/test/classes/Stubs/DbiDummy.php +++ b/test/classes/Stubs/DbiDummy.php @@ -581,6 +581,10 @@ class DbiDummy implements DbiExtension 'query' => 'SELECT 1 FROM mysql.user LIMIT 1', 'result' => [['1']], ], + [ + 'query' => "SHOW SESSION VARIABLES LIKE 'collation_connection';", + 'result' => [['collation_connection', 'utf8_general_ci']], + ], [ 'query' => 'SELECT 1 FROM (SELECT `GRANTEE`, `IS_GRANTABLE`' . ' FROM `INFORMATION_SCHEMA`.`COLUMN_PRIVILEGES`'