From 8a79d314cf544cf2ca261cbac7ea07570e9ed8e5 Mon Sep 17 00:00:00 2001
From: Robin Appelman <icewind@owncloud.com>
Date: Tue, 12 Jul 2016 13:11:44 +0200
Subject: [PATCH] Remove duplicate database connect logic in mysql setup

---
 lib/private/AllConfig.php              |  4 +++
 lib/private/Setup/AbstractDatabase.php | 22 +++++++++++++++-
 lib/private/Setup/MySQL.php            | 35 --------------------------
 3 files changed, 25 insertions(+), 36 deletions(-)

diff --git a/lib/private/AllConfig.php b/lib/private/AllConfig.php
index c8b2009fcc7..b50fc0f42ce 100644
--- a/lib/private/AllConfig.php
+++ b/lib/private/AllConfig.php
@@ -428,4 +428,8 @@ class AllConfig implements \OCP\IConfig {
 
 		return $userIDs;
 	}
+
+	public function getSystemConfig() {
+		return $this->systemConfig;
+	}
 }
diff --git a/lib/private/Setup/AbstractDatabase.php b/lib/private/Setup/AbstractDatabase.php
index 08ed741f51c..62e9b2e823f 100644
--- a/lib/private/Setup/AbstractDatabase.php
+++ b/lib/private/Setup/AbstractDatabase.php
@@ -23,6 +23,8 @@
  */
 namespace OC\Setup;
 
+use OC\AllConfig;
+use OC\DB\ConnectionFactory;
 use OCP\IConfig;
 use OCP\ILogger;
 use OCP\Security\ISecureRandom;
@@ -45,7 +47,7 @@ abstract class AbstractDatabase {
 	protected $dbPort;
 	/** @var string */
 	protected $tablePrefix;
-	/** @var IConfig */
+	/** @var AllConfig */
 	protected $config;
 	/** @var ILogger */
 	protected $logger;
@@ -98,6 +100,24 @@ abstract class AbstractDatabase {
 		$this->tablePrefix = $dbTablePrefix;
 	}
 
+	/**
+	 * @return \OC\DB\Connection
+	 * @throws \OC\DatabaseSetupException
+	 */
+	protected function connect() {
+		$systemConfig = $this->config->getSystemConfig();
+		$cf = new ConnectionFactory();
+		$connectionParams = $cf->createConnectionParams($systemConfig);
+		// we don't save username/password to the config immediately so this might not be set
+		if (!$connectionParams['user']) {
+			$connectionParams['user'] = $this->dbUser;
+		}
+		if (!$connectionParams['password']) {
+			$connectionParams['password'] = $this->dbPassword;
+		}
+		return $cf->getConnection($systemConfig->getValue('dbtype', 'sqlite'), $connectionParams);
+	}
+
 	/**
 	 * @param string $userName
 	 */
diff --git a/lib/private/Setup/MySQL.php b/lib/private/Setup/MySQL.php
index 1ff7b278b86..03a1421f428 100644
--- a/lib/private/Setup/MySQL.php
+++ b/lib/private/Setup/MySQL.php
@@ -87,41 +87,6 @@ class MySQL extends AbstractDatabase {
 		$connection->executeUpdate($query);
 	}
 
-	/**
-	 * @return \OC\DB\Connection
-	 * @throws \OC\DatabaseSetupException
-	 */
-	private function connect() {
-
-		$connectionParams = array(
-				'host' => $this->dbHost,
-				'user' => $this->dbUser,
-				'password' => $this->dbPassword,
-				'tablePrefix' => $this->tablePrefix,
-		);
-
-		// adding port support through installer
-		if(!empty($this->dbPort)) {
-			if (ctype_digit($this->dbPort)) {
-				$connectionParams['port'] = $this->dbPort;
-			} else {
-				$connectionParams['unix_socket'] = $this->dbPort;
-			}
-		} else if (strpos($this->dbHost, ':')) {
-			// Host variable may carry a port or socket.
-			list($host, $portOrSocket) = explode(':', $this->dbHost, 2);
-			if (ctype_digit($portOrSocket)) {
-				$connectionParams['port'] = $portOrSocket;
-			} else {
-				$connectionParams['unix_socket'] = $portOrSocket;
-			}
-			$connectionParams['host'] = $host;
-		}
-
-		$cf = new ConnectionFactory();
-		return $cf->getConnection('mysql', $connectionParams);
-	}
-
 	/**
 	 * @param $username
 	 * @param IDBConnection $connection
-- 
GitLab