From fb9360767ea25281bc0d9761b80e068131a96beb Mon Sep 17 00:00:00 2001 From: mark_story Date: Wed, 12 Sep 2012 22:31:07 -0400 Subject: [PATCH] Make connection exceptions more helpful. Fixes #3204 --- lib/Cake/Model/Datasource/Database/Mysql.php | 5 ++++- lib/Cake/Model/Datasource/Database/Postgres.php | 5 ++++- lib/Cake/Model/Datasource/Database/Sqlite.php | 5 ++++- lib/Cake/Model/Datasource/Database/Sqlserver.php | 5 ++++- lib/Cake/Model/Datasource/DboSource.php | 1 + lib/Cake/Test/Case/Error/ExceptionRendererTest.php | 6 +++--- lib/Cake/View/Errors/missing_connection.ctp | 8 +++++++- 7 files changed, 27 insertions(+), 8 deletions(-) diff --git a/lib/Cake/Model/Datasource/Database/Mysql.php b/lib/Cake/Model/Datasource/Database/Mysql.php index c26de45e7ac..f96dfa42026 100644 --- a/lib/Cake/Model/Datasource/Database/Mysql.php +++ b/lib/Cake/Model/Datasource/Database/Mysql.php @@ -149,7 +149,10 @@ public function connect() { ); $this->connected = true; } catch (PDOException $e) { - throw new MissingConnectionException(array('class' => $e->getMessage())); + throw new MissingConnectionException(array( + 'class' => get_class($this), + 'message' => $e->getMessage() + )); } $this->_useAlias = (bool)version_compare($this->getVersion(), "4.1", ">="); diff --git a/lib/Cake/Model/Datasource/Database/Postgres.php b/lib/Cake/Model/Datasource/Database/Postgres.php index 2c7b8472e66..cca94a664de 100644 --- a/lib/Cake/Model/Datasource/Database/Postgres.php +++ b/lib/Cake/Model/Datasource/Database/Postgres.php @@ -121,7 +121,10 @@ public function connect() { $this->_execute('SET search_path TO ' . $config['schema']); } } catch (PDOException $e) { - throw new MissingConnectionException(array('class' => $e->getMessage())); + throw new MissingConnectionException(array( + 'class' => get_class($this), + 'message' => $e->getMessage() + )); } return $this->connected; diff --git a/lib/Cake/Model/Datasource/Database/Sqlite.php b/lib/Cake/Model/Datasource/Database/Sqlite.php index e267f5a6509..d30cc67dfdf 100644 --- a/lib/Cake/Model/Datasource/Database/Sqlite.php +++ b/lib/Cake/Model/Datasource/Database/Sqlite.php @@ -113,7 +113,10 @@ public function connect() { $this->_connection = new PDO('sqlite:' . $config['database'], null, null, $flags); $this->connected = true; } catch(PDOException $e) { - throw new MissingConnectionException(array('class' => $e->getMessage())); + throw new MissingConnectionException(array( + 'class' => get_class($this), + 'message' => $e->getMessage() + )); } return $this->connected; } diff --git a/lib/Cake/Model/Datasource/Database/Sqlserver.php b/lib/Cake/Model/Datasource/Database/Sqlserver.php index eaf93f43362..46d56540022 100644 --- a/lib/Cake/Model/Datasource/Database/Sqlserver.php +++ b/lib/Cake/Model/Datasource/Database/Sqlserver.php @@ -129,7 +129,10 @@ public function connect() { ); $this->connected = true; } catch (PDOException $e) { - throw new MissingConnectionException(array('class' => $e->getMessage())); + throw new MissingConnectionException(array( + 'class' => get_class($this), + 'message' => $e->getMessage() + )); } return $this->connected; diff --git a/lib/Cake/Model/Datasource/DboSource.php b/lib/Cake/Model/Datasource/DboSource.php index c8efb56fcff..bae55cff977 100644 --- a/lib/Cake/Model/Datasource/DboSource.php +++ b/lib/Cake/Model/Datasource/DboSource.php @@ -253,6 +253,7 @@ public function __construct($config = null, $autoConnect = true) { if (!$this->enabled()) { throw new MissingConnectionException(array( 'class' => get_class($this), + 'message' => __d('cake_dev', 'Selected driver is not enabled'), 'enabled' => false )); } diff --git a/lib/Cake/Test/Case/Error/ExceptionRendererTest.php b/lib/Cake/Test/Case/Error/ExceptionRendererTest.php index 956acecc2fd..46745e89e37 100644 --- a/lib/Cake/Test/Case/Error/ExceptionRendererTest.php +++ b/lib/Cake/Test/Case/Error/ExceptionRendererTest.php @@ -552,10 +552,10 @@ public static function testProvider() { 500 ), array( - new MissingConnectionException(array('class' => 'Article')), + new MissingConnectionException(array('class' => 'Mysql')), array( '/

Missing Database Connection<\/h2>/', - '/Article requires a database connection/' + '/A Database connection using "Mysql" was missing or unable to connect./', ), 500 ), @@ -563,7 +563,7 @@ public static function testProvider() { new MissingConnectionException(array('class' => 'Mysql', 'enabled' => false)), array( '/

Missing Database Connection<\/h2>/', - '/Mysql requires a database connection/', + '/A Database connection using "Mysql" was missing or unable to connect./', '/Mysql driver is NOT enabled/' ), 500 diff --git a/lib/Cake/View/Errors/missing_connection.ctp b/lib/Cake/View/Errors/missing_connection.ctp index b29fb9fc383..27d00a8ba78 100644 --- a/lib/Cake/View/Errors/missing_connection.ctp +++ b/lib/Cake/View/Errors/missing_connection.ctp @@ -19,7 +19,13 @@

: - + +
+