From 55ef9f0564c4a6794dd6ce4794e3776ea11fc12d Mon Sep 17 00:00:00 2001 From: michalsn Date: Tue, 12 Aug 2025 21:05:51 +0200 Subject: [PATCH 1/2] fix: prevent non-shared DB instances from polluting shared cache --- system/Database/Config.php | 4 +++- tests/system/Database/Live/ConnectTest.php | 18 ++++++++++++++++++ user_guide_src/source/changelogs/v4.6.4.rst | 2 ++ 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/system/Database/Config.php b/system/Database/Config.php index 6f25ad3c0059..fcf700ee3bcb 100644 --- a/system/Database/Config.php +++ b/system/Database/Config.php @@ -81,7 +81,9 @@ public static function connect($group = null, bool $getShared = true) $connection = static::$factory->load($config, $group); - static::$instances[$group] = $connection; + if ($getShared) { + static::$instances[$group] = $connection; + } return $connection; } diff --git a/tests/system/Database/Live/ConnectTest.php b/tests/system/Database/Live/ConnectTest.php index 3f7941a201ec..e41fdbdfc114 100644 --- a/tests/system/Database/Live/ConnectTest.php +++ b/tests/system/Database/Live/ConnectTest.php @@ -115,4 +115,22 @@ public function testConnectWithFailover(): void $this->assertGreaterThanOrEqual(0, count($db1->listTables())); } + + public function testNonSharedInstanceDoesNotAffectSharedInstances(): void + { + $firstSharedDb = Database::connect('tests'); + $originalDebugValue = (bool) self::getPrivateProperty($firstSharedDb, 'DBDebug'); + + $nonSharedDb = Database::connect('tests', false); + self::setPrivateProperty($nonSharedDb, 'DBDebug', ! $originalDebugValue); + + $secondSharedDb = Database::connect('tests'); + + $this->assertSame($firstSharedDb, $secondSharedDb); + $this->assertNotSame($firstSharedDb, $nonSharedDb); + + $this->assertSame($originalDebugValue, self::getPrivateProperty($firstSharedDb, 'DBDebug')); + $this->assertSame($originalDebugValue, self::getPrivateProperty($secondSharedDb, 'DBDebug')); + $this->assertSame(! $originalDebugValue, self::getPrivateProperty($nonSharedDb, 'DBDebug')); + } } diff --git a/user_guide_src/source/changelogs/v4.6.4.rst b/user_guide_src/source/changelogs/v4.6.4.rst index 7cae67431354..dfe8bd86dd29 100644 --- a/user_guide_src/source/changelogs/v4.6.4.rst +++ b/user_guide_src/source/changelogs/v4.6.4.rst @@ -30,6 +30,8 @@ Deprecations Bugs Fixed ********** +- **Database:** Fixed a bug in ``Database::connect()`` which was causing storing non-shared connection instances in shared cache. + See the repo's `CHANGELOG.md `_ for a complete list of bugs fixed. From bca4d82d58b616a79f06dd28427d6df1c6380613 Mon Sep 17 00:00:00 2001 From: Michal Sniatala Date: Wed, 13 Aug 2025 06:52:39 +0200 Subject: [PATCH 2/2] Update user_guide_src/source/changelogs/v4.6.4.rst Co-authored-by: John Paul E. Balandan, CPA --- user_guide_src/source/changelogs/v4.6.4.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/user_guide_src/source/changelogs/v4.6.4.rst b/user_guide_src/source/changelogs/v4.6.4.rst index dfe8bd86dd29..8ef80eabbfcf 100644 --- a/user_guide_src/source/changelogs/v4.6.4.rst +++ b/user_guide_src/source/changelogs/v4.6.4.rst @@ -30,7 +30,7 @@ Deprecations Bugs Fixed ********** -- **Database:** Fixed a bug in ``Database::connect()`` which was causing storing non-shared connection instances in shared cache. +- **Database:** Fixed a bug in ``Database::connect()`` which was causing to store non-shared connection instances in shared cache. See the repo's `CHANGELOG.md `_