diff --git a/libraries/classes/DatabaseInterface.php b/libraries/classes/DatabaseInterface.php index 87b40e5208..1a527de611 100644 --- a/libraries/classes/DatabaseInterface.php +++ b/libraries/classes/DatabaseInterface.php @@ -1104,10 +1104,11 @@ class DatabaseInterface implements DbalInterface */ public function postConnect(): void { - $version = $this->fetchSingleRow('SELECT @@version, @@version_comment'); + $version = $this->fetchSingleRow('SELECT @@version, @@version_comment, @@sql_mode'); if (is_array($version)) { $this->setVersion($version); + Context::setMode($version['@@sql_mode']); } if ($this->versionInt > 50503) { diff --git a/libraries/classes/Table.php b/libraries/classes/Table.php index e7e79a238e..b899b19740 100644 --- a/libraries/classes/Table.php +++ b/libraries/classes/Table.php @@ -1103,11 +1103,6 @@ class Table implements Stringable */ $destination = new Expression($targetDb, $targetTable, ''); - // Find server's SQL mode so the builder can generate correct - // queries. - // One of the options that alters the behaviour is `ANSI_QUOTES`. - Context::setMode((string) $dbi->fetchValue('SELECT @@sql_mode')); - // ----------------------------------------------------------------- // Phase 1: Dropping existent element of the same name (if exists // and required). diff --git a/phpstan-baseline.neon b/phpstan-baseline.neon index 98d8dee941..04d009bc37 100644 --- a/phpstan-baseline.neon +++ b/phpstan-baseline.neon @@ -15065,6 +15065,11 @@ parameters: count: 1 path: libraries/classes/DatabaseInterface.php + - + message: "#^Parameter \\#1 \\$mode of static method PhpMyAdmin\\\\SqlParser\\\\Context\\:\\:setMode\\(\\) expects int\\|string, mixed given\\.$#" + count: 1 + path: libraries/classes/DatabaseInterface.php + - message: "#^Parameter \\#1 \\$path of function basename expects string, mixed given\\.$#" count: 1 @@ -35120,11 +35125,6 @@ parameters: count: 4 path: libraries/classes/Table.php - - - message: "#^Cannot call method fetchValue\\(\\) on mixed\\.$#" - count: 1 - path: libraries/classes/Table.php - - message: "#^Cannot call method insertId\\(\\) on mixed\\.$#" count: 1 @@ -35152,7 +35152,7 @@ parameters: - message: "#^Cannot cast mixed to string\\.$#" - count: 4 + count: 3 path: libraries/classes/Table.php - diff --git a/psalm-baseline.xml b/psalm-baseline.xml index a171c3106b..232362d17b 100644 --- a/psalm-baseline.xml +++ b/psalm-baseline.xml @@ -5706,7 +5706,7 @@ int|bool - + $a $arrayKeys $b @@ -5752,6 +5752,7 @@ $user $user $user + $version['@@sql_mode'] $warningsCount diff --git a/test/classes/DatabaseInterfaceTest.php b/test/classes/DatabaseInterfaceTest.php index b6fab1e98d..80d34d6f14 100644 --- a/test/classes/DatabaseInterfaceTest.php +++ b/test/classes/DatabaseInterfaceTest.php @@ -277,6 +277,8 @@ class DatabaseInterfaceTest extends AbstractTestCase $versionQueryResult = [ '@@version' => '10.20.7-MariaDB-1:10.9.3+maria~ubu2204', '@@version_comment' => 'mariadb.org binary distribution', + '@@sql_mode' => 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,' + . 'NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION', ]; $mock = $this->getMockBuilder(DatabaseInterface::class) @@ -905,6 +907,8 @@ class DatabaseInterfaceTest extends AbstractTestCase [ '@@version' => '6.1.0', '@@version_comment' => "Percona Server (GPL), Release '11', Revision 'c1y2gr1df4a'", + '@@sql_mode' => 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,' + . 'NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION', ], 60100, false, @@ -914,6 +918,8 @@ class DatabaseInterfaceTest extends AbstractTestCase [ '@@version' => '10.01.40-MariaDB-1:10.01.40+maria~ubu2204', '@@version_comment' => 'mariadb.org binary distribution', + '@@sql_mode' => 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,' + . 'NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION', ], 100140, true, @@ -923,6 +929,8 @@ class DatabaseInterfaceTest extends AbstractTestCase [ '@@version' => '7.10.3', '@@version_comment' => 'MySQL Community Server (GPL)', + '@@sql_mode' => 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,' + . 'NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION', ], 71003, false, @@ -932,6 +940,8 @@ class DatabaseInterfaceTest extends AbstractTestCase [ '@@version' => '5.5.0', '@@version_comment' => '', + '@@sql_mode' => 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,' + . 'NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION', ], 50500, false,