diff --git a/scripts/sql/manage_storage.php b/scripts/sql/manage_storage.php index 040046e75f..81d90059a0 100755 --- a/scripts/sql/manage_storage.php +++ b/scripts/sql/manage_storage.php @@ -85,7 +85,7 @@ $api->setNamespace($args->getArg('namespace')); try { queryfx( - $api->getConn('meta_data', $select_database = false), + $api->getConn(null), 'SELECT 1'); } catch (AphrontQueryException $ex) { echo phutil_console_format( diff --git a/src/infrastructure/storage/management/PhabricatorStorageManagementAPI.php b/src/infrastructure/storage/management/PhabricatorStorageManagementAPI.php index 9c012993f8..2421d50a6e 100644 --- a/src/infrastructure/storage/management/PhabricatorStorageManagementAPI.php +++ b/src/infrastructure/storage/management/PhabricatorStorageManagementAPI.php @@ -6,6 +6,7 @@ final class PhabricatorStorageManagementAPI { private $user; private $password; private $namespace; + private $conns = array(); public function setNamespace($namespace) { $this->namespace = $namespace; @@ -62,19 +63,24 @@ final class PhabricatorStorageManagementAPI { return $list; } - public function getConn($fragment, $select_database = true) { - return PhabricatorEnv::newObjectFromConfig( + public function getConn($fragment) { + $database = $this->getDatabaseName($fragment); + $return = &$this->conns[$this->host][$this->user][$database]; + if (!$return) { + $return = PhabricatorEnv::newObjectFromConfig( 'mysql.implementation', array( array( 'user' => $this->user, 'pass' => $this->password, 'host' => $this->host, - 'database' => $select_database - ? $this->getDatabaseName($fragment) + 'database' => $fragment + ? $database : null, ), )); + } + return $return; } public function getAppliedPatches() { @@ -90,7 +96,7 @@ final class PhabricatorStorageManagementAPI { public function createDatabase($fragment) { queryfx( - $this->getConn($fragment, $select_database = false), + $this->getConn(null), 'CREATE DATABASE IF NOT EXISTS %T COLLATE utf8_general_ci', $this->getDatabaseName($fragment)); } @@ -160,7 +166,7 @@ final class PhabricatorStorageManagementAPI { $queries = preg_split('/;\s+/', $sql); $queries = array_filter($queries); - $conn = $this->getConn('meta_data', $select_database = false); + $conn = $this->getConn(null); foreach ($queries as $query) { $query = str_replace('{$NAMESPACE}', $this->namespace, $query); @@ -172,7 +178,7 @@ final class PhabricatorStorageManagementAPI { } public function applyPatchPHP($script) { - $schema_conn = $this->getConn('meta_data', $select_database = false); + $schema_conn = $this->getConn(null); require_once $script; } diff --git a/src/infrastructure/storage/management/workflow/PhabricatorStorageManagementDestroyWorkflow.php b/src/infrastructure/storage/management/workflow/PhabricatorStorageManagementDestroyWorkflow.php index 4da1c88cd4..d26625e5c9 100644 --- a/src/infrastructure/storage/management/workflow/PhabricatorStorageManagementDestroyWorkflow.php +++ b/src/infrastructure/storage/management/workflow/PhabricatorStorageManagementDestroyWorkflow.php @@ -42,7 +42,7 @@ final class PhabricatorStorageManagementDestroyWorkflow $patches = $this->getPatches(); if ($args->getArg('unittest-fixtures')) { - $conn = $api->getConn(null, false); + $conn = $api->getConn(null); $databases = queryfx_all( $conn, 'SELECT DISTINCT(TABLE_SCHEMA) AS db '. @@ -64,7 +64,7 @@ final class PhabricatorStorageManagementDestroyWorkflow } else { echo "Dropping database '{$database}'...\n"; queryfx( - $api->getConn('meta_data', $select_database = false), + $api->getConn(null), 'DROP DATABASE IF EXISTS %T', $database); }