From 2607977c31698d6d4070205700b5a28f1015dace Mon Sep 17 00:00:00 2001 From: Nanne Date: Thu, 26 Jan 2017 09:39:08 +0100 Subject: [PATCH 1/3] Fix drop_connection for the default connection While `get_connection()` used `get_default_connection()` if there is no specific connection, (aka `$name = null`) , `drop_connection()` didn't and therefore did not drop a connection if no specific name was given. In `Table::reestablish_connection()` the connection (name) is retrieved like this: $connection = $this->class->getStaticPropertyValue('connection',null); This meant that if no static property 'connection' is set, the `$connection` will be `null`. This should mean that the default connection is use, but currently nothing will be dropped, which is a bug. This fix changes that, so that if the default connection is used, the default connection is dropped. An alternative might have been to change this in the call (`Table::reestablish_connection()` for instance), but it seems to me that keeping `drop_connection`'s behaviour the same as `get_connection()` is the best way. --- lib/ConnectionManager.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lib/ConnectionManager.php b/lib/ConnectionManager.php index fb16d167f..727c33dac 100644 --- a/lib/ConnectionManager.php +++ b/lib/ConnectionManager.php @@ -39,10 +39,15 @@ public static function get_connection($name=null) * Drops the connection from the connection manager. Does not actually close it since there * is no close method in PDO. * + * If $name is null then the default connection will be returned. + * * @param string $name Name of the connection to forget about */ public static function drop_connection($name=null) { + $config = Config::instance(); + $name = $name ? $name : $config->get_default_connection(); + if (isset(self::$connections[$name])) unset(self::$connections[$name]); } From 652c3b2a24572bd071f70b5d390531ee4df5419a Mon Sep 17 00:00:00 2001 From: Koen Punt Date: Sat, 3 Jun 2017 13:55:28 +0200 Subject: [PATCH 2/3] cleanup indentation --- test/ConnectionManagerTest.php | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/test/ConnectionManagerTest.php b/test/ConnectionManagerTest.php index ca29b0452..2dc36111a 100644 --- a/test/ConnectionManagerTest.php +++ b/test/ConnectionManagerTest.php @@ -10,7 +10,7 @@ public function test_get_connection_with_null_connection() $this->assert_not_null(ConnectionManager::get_connection(null)); $this->assert_not_null(ConnectionManager::get_connection()); } - + public function test_get_connection() { $this->assert_not_null(ConnectionManager::get_connection('mysql')); @@ -24,16 +24,15 @@ public function test_get_connection_uses_existing_object() $this->assert_same($a,ConnectionManager::get_connection('mysql')); } - public function test_gh_91_get_connection_with_null_connection_is_always_default() - { - $conn_one = ConnectionManager::get_connection('mysql'); - $conn_two = ConnectionManager::get_connection(); - $conn_three = ConnectionManager::get_connection('mysql'); - $conn_four = ConnectionManager::get_connection(); + public function test_gh_91_get_connection_with_null_connection_is_always_default() + { + $conn_one = ConnectionManager::get_connection('mysql'); + $conn_two = ConnectionManager::get_connection(); + $conn_three = ConnectionManager::get_connection('mysql'); + $conn_four = ConnectionManager::get_connection(); - $this->assert_same($conn_one, $conn_three); - $this->assert_same($conn_two, $conn_three); - $this->assert_same($conn_four, $conn_three); - } + $this->assert_same($conn_one, $conn_three); + $this->assert_same($conn_two, $conn_three); + $this->assert_same($conn_four, $conn_three); + } } -?> From 3226ef83877035657c69f95140df9a7fbd34315c Mon Sep 17 00:00:00 2001 From: Koen Punt Date: Sat, 3 Jun 2017 14:13:29 +0200 Subject: [PATCH 3/3] update tests for ConnectionManager --- test/ConnectionManagerTest.php | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/test/ConnectionManagerTest.php b/test/ConnectionManagerTest.php index 2dc36111a..6e1e02580 100644 --- a/test/ConnectionManagerTest.php +++ b/test/ConnectionManagerTest.php @@ -18,10 +18,15 @@ public function test_get_connection() public function test_get_connection_uses_existing_object() { - $a = ConnectionManager::get_connection('mysql'); - $a->harro = 'harro there'; + $connection = ConnectionManager::get_connection('mysql'); + $this->assert_same($connection, ConnectionManager::get_connection('mysql')); + } - $this->assert_same($a,ConnectionManager::get_connection('mysql')); + public function test_get_connection_with_default() + { + $default = ActiveRecord\Config::instance()->get_default_connection('mysql'); + $connection = ConnectionManager::get_connection(); + $this->assert_same(ConnectionManager::get_connection($default), $connection); } public function test_gh_91_get_connection_with_null_connection_is_always_default() @@ -35,4 +40,18 @@ public function test_gh_91_get_connection_with_null_connection_is_always_default $this->assert_same($conn_two, $conn_three); $this->assert_same($conn_four, $conn_three); } + + public function test_drop_connection() + { + $connection = ConnectionManager::get_connection('mysql'); + ConnectionManager::drop_connection('mysql'); + $this->assert_not_same($connection, ConnectionManager::get_connection('mysql')); + } + + public function test_drop_connection_with_default() + { + $connection = ConnectionManager::get_connection(); + ConnectionManager::drop_connection(); + $this->assert_not_same($connection, ConnectionManager::get_connection()); + } }