From 618328ace7303271b3cc436c14dde78b1cfb11a3 Mon Sep 17 00:00:00 2001 From: Ingo Schommer Date: Wed, 14 Apr 2010 03:32:30 +0000 Subject: [PATCH] API CHANGE Installer now uses a database configuration helper class which isolates the logic of checking the database away from the installer, this interface can be used by other databases like MSSQL and PostgreSQL. The installer now looks for a specific file inside each database module, provided it's configured in install.php MySQL is provided by default, as it lives in sapphire (from r98786) git-svn-id: svn://svn.silverstripe.com/silverstripe/open/modules/sapphire/trunk@102798 467b73ca-7a2a-4603-9d3b-597d59a354a9 --- dev/install/DatabaseConfigurationHelper.php | 42 +++++++++ .../MySQLDatabaseConfigurationHelper.php | 93 +++++++++++++++++++ 2 files changed, 135 insertions(+) create mode 100644 dev/install/DatabaseConfigurationHelper.php create mode 100644 dev/install/MySQLDatabaseConfigurationHelper.php diff --git a/dev/install/DatabaseConfigurationHelper.php b/dev/install/DatabaseConfigurationHelper.php new file mode 100644 index 000000000..70f7029ea --- /dev/null +++ b/dev/install/DatabaseConfigurationHelper.php @@ -0,0 +1,42 @@ + true, 'error' => 'details of error') + */ + public function requireDatabaseServer($databaseConfig); + + /** + * Ensure a database connection is possible using credentials provided. + * The established connection resource is returned with the results as well. + * + * @param array $databaseConfig Associative array of db configuration, e.g. "server", "username" etc + * @return array Result - e.g. array('okay' => true, 'connection' => mysql link, 'error' => 'details of error') + */ + public function requireDatabaseConnection($databaseConfig); + + /** + * Ensure that the database connection is able to use an existing database, + * or be able to create one if it doesn't exist. + * + * @param array $databaseConfig Associative array of db configuration, e.g. "server", "username" etc + * @return array Result - e.g. array('okay' => true, 'existsAlready' => 'true') + */ + public function requireDatabaseOrCreatePermissions($databaseConfig); + +} \ No newline at end of file diff --git a/dev/install/MySQLDatabaseConfigurationHelper.php b/dev/install/MySQLDatabaseConfigurationHelper.php new file mode 100644 index 000000000..4a4bea65a --- /dev/null +++ b/dev/install/MySQLDatabaseConfigurationHelper.php @@ -0,0 +1,93 @@ + true, 'error' => 'details of error') + */ + public function requireDatabaseServer($databaseConfig) { + $okay = false; + $conn = @mysql_connect($databaseConfig['server'], null, null); + if($conn || mysql_errno() < 2000) { + $okay = true; + } else { + $okay = false; + $error = mysql_error(); + } + return array( + 'okay' => $okay, + 'error' => $error + ); + } + + /** + * Ensure a database connection is possible using credentials provided. + * The established connection resource is returned with the results as well. + * + * @param array $databaseConfig Associative array of db configuration, e.g. "server", "username" etc + * @return array Result - e.g. array('okay' => true, 'connection' => mysql link, 'error' => 'details of error') + */ + public function requireDatabaseConnection($databaseConfig) { + $okay = false; + $conn = @mysql_connect($databaseConfig['server'], $databaseConfig['username'], $databaseConfig['password']); + if($conn) { + $okay = true; + } else { + $okay = false; + $error = mysql_error(); + } + return array( + 'okay' => $okay, + 'connection' => $conn, + 'error' => $error + ); + } + + /** + * Ensure that the database connection is able to use an existing database, + * or be able to create one if it doesn't exist. + * + * @param array $databaseConfig Associative array of db configuration, e.g. "server", "username" etc + * @return array Result - e.g. array('okay' => true, 'existsAlready' => 'true') + */ + public function requireDatabaseOrCreatePermissions($databaseConfig) { + $okay = false; + $existsAlready = false; + $conn = @mysql_connect($databaseConfig['server'], $databaseConfig['username'], $databaseConfig['password']); + if(@mysql_select_db($databaseConfig['database'], $conn)) { + $okay = true; + $existsAlready = true; + } else { + if(@mysql_query("CREATE DATABASE testing123", $conn)) { + mysql_query("DROP DATABASE testing123", $conn); + $okay = true; + $existsAlready = false; + } + } + return array( + 'okay' => $okay, + 'existsAlready' => $existsAlready + ); + } + +} \ No newline at end of file