API Add optimistic_connect to SS_Database

Fixes #4765
This commit is contained in:
Damian Mooyman 2016-06-20 17:40:58 +12:00
parent 3906228fc1
commit e810a9928c
No known key found for this signature in database
GPG Key ID: 78B823A10DE27D1A

View File

@ -16,6 +16,15 @@ abstract class SS_Database {
*/
protected $connector = null;
/**
* In cases where your environment does not have 'SHOW DATABASES' permission,
* you can set this to true. Then selectDatabase() will always connect without
* doing databaseExists() check.
*
* @var bool
*/
private static $optimistic_connect = false;
/**
* Get the current connector
*
@ -630,18 +639,23 @@ abstract class SS_Database {
* @return boolean Flag indicating success
*/
public function selectDatabase($name, $create = false, $errorLevel = E_USER_ERROR) {
if (!$this->schemaManager->databaseExists($name)) {
// Check DB creation permisson
if (!$create) {
if ($errorLevel !== false) {
user_error("Attempted to connect to non-existing database \"$name\"", $errorLevel);
}
// Unselect database
$this->connector->unloadDatabase();
return false;
}
$this->schemaManager->createDatabase($name);
// In case our live environment is locked down, we can bypass a SHOW DATABASE check
$canConnect = Config::inst()->get(get_class($this), 'optimistic_connect')
|| $this->schemaManager->databaseExists($name);
if($canConnect) {
return $this->connector->selectDatabase($name);
}
// Check DB creation permisson
if (!$create) {
if ($errorLevel !== false) {
user_error("Attempted to connect to non-existing database \"$name\"", $errorLevel);
}
// Unselect database
$this->connector->unloadDatabase();
return false;
}
$this->schemaManager->createDatabase($name);
return $this->connector->selectDatabase($name);
}