diff --git a/lib/private/DB/ConnectionFactory.php b/lib/private/DB/ConnectionFactory.php index 39f15ff4a6..d90d7737d4 100644 --- a/lib/private/DB/ConnectionFactory.php +++ b/lib/private/DB/ConnectionFactory.php @@ -25,6 +25,7 @@ */ namespace OC\DB; + use Doctrine\Common\EventManager; use Doctrine\DBAL\Configuration; use Doctrine\DBAL\DriverManager; @@ -33,15 +34,15 @@ use Doctrine\DBAL\Event\Listeners\SQLSessionInit; use OC\SystemConfig; /** -* Takes care of creating and configuring Doctrine connections. -*/ + * Takes care of creating and configuring Doctrine connections. + */ class ConnectionFactory { /** - * @var array - * - * Array mapping DBMS type to default connection parameters passed to - * \Doctrine\DBAL\DriverManager::getConnection(). - */ + * @var array + * + * Array mapping DBMS type to default connection parameters passed to + * \Doctrine\DBAL\DriverManager::getConnection(). + */ protected $defaultConnectionParams = [ 'mysql' => [ 'adapter' => '\OC\DB\AdapterMySQL', @@ -77,17 +78,17 @@ class ConnectionFactory { */ public function __construct(SystemConfig $systemConfig) { $this->config = $systemConfig; - if($this->config->getValue('mysql.utf8mb4', false)) { + if ($this->config->getValue('mysql.utf8mb4', false)) { $this->defaultConnectionParams['mysql']['charset'] = 'utf8mb4'; } } /** - * @brief Get default connection parameters for a given DBMS. - * @param string $type DBMS type - * @throws \InvalidArgumentException If $type is invalid - * @return array Default connection parameters. - */ + * @brief Get default connection parameters for a given DBMS. + * @param string $type DBMS type + * @throws \InvalidArgumentException If $type is invalid + * @return array Default connection parameters. + */ public function getDefaultConnectionParams($type) { $normalizedType = $this->normalizeType($type); if (!isset($this->defaultConnectionParams[$normalizedType])) { @@ -105,11 +106,11 @@ class ConnectionFactory { } /** - * @brief Get default connection parameters for a given DBMS. - * @param string $type DBMS type - * @param array $additionalConnectionParams Additional connection parameters - * @return \OC\DB\Connection - */ + * @brief Get default connection parameters for a given DBMS. + * @param string $type DBMS type + * @param array $additionalConnectionParams Additional connection parameters + * @return \OC\DB\Connection + */ public function getConnection($type, $additionalConnectionParams) { $normalizedType = $this->normalizeType($type); $eventManager = new EventManager(); @@ -124,6 +125,17 @@ class ConnectionFactory { if (isset($additionalConnectionParams['driverOptions'])) { $additionalConnectionParams = array_merge($additionalConnectionParams, $additionalConnectionParams['driverOptions']); } + $host = $additionalConnectionParams['host']; + $port = isset($additionalConnectionParams['port']) ? $additionalConnectionParams['port'] : null; + $dbName = $additionalConnectionParams['dbname']; + + // we set the connect string as dbname and unset the host to coerce doctrine into using it as connect string + if ($host === '') { + $additionalConnectionParams['dbname'] = $dbName; // use dbname as easy connect name + } else { + $additionalConnectionParams['dbname'] = '//' . $host . (!empty($port) ? ":{$port}" : "") . '/' . $dbName; + } + unset($additionalConnectionParams['host']); break; case 'sqlite3': $journalMode = $additionalConnectionParams['sqlite.journal_mode']; @@ -141,10 +153,10 @@ class ConnectionFactory { } /** - * @brief Normalize DBMS type - * @param string $type DBMS type - * @return string Normalized DBMS type - */ + * @brief Normalize DBMS type + * @param string $type DBMS type + * @return string Normalized DBMS type + */ public function normalizeType($type) { return $type === 'sqlite' ? 'sqlite3' : $type; } @@ -207,7 +219,7 @@ class ConnectionFactory { 'tablePrefix' => $connectionParams['tablePrefix'] ]; - if($this->config->getValue('mysql.utf8mb4', false)) { + if ($this->config->getValue('mysql.utf8mb4', false)) { $connectionParams['defaultTableOptions'] = [ 'collate' => 'utf8mb4_bin', 'charset' => 'utf8mb4', diff --git a/lib/private/Setup/OCI.php b/lib/private/Setup/OCI.php index 0538b3da98..d3fe3018f4 100644 --- a/lib/private/Setup/OCI.php +++ b/lib/private/Setup/OCI.php @@ -149,7 +149,7 @@ class OCI extends AbstractDatabase { if ($e_host == '') { $easy_connect_string = $e_dbname; // use dbname as easy connect name } else { - $easy_connect_string = '//'.$e_host.'/'.$e_dbname; + $easy_connect_string = '//' . $e_host . (!empty($e_port) ? ":{$e_port}" : "") . '/' . $e_dbname; } $connection = @oci_connect($this->dbUser, $this->dbPassword, $easy_connect_string); if(!$connection) {