public static function flattenDSN(array $dbConf, string $username = '', string $password = '') : array
{
switch ($dbConf['driver']) {
case 'mysql':
$dsn = $dbConf['driver'] . ':';
if (Util::subString($dbConf['host'], 0, 5) === 'unix:') {
$dsn .= 'unix_socket=' . Util::subString($dbConf['host'], 5) . ';';
} else {
$dsn .= 'host=' . $dbConf['host'] . ';';
}
if (!empty($dbConf['port'])) {
$dsn .= 'port=' . $dbConf['port'] . ';';
}
$dsn .= 'dbname=' . $dbConf['database'];
return [$dsn, $dbConf['driver'], $dbConf['username'] ?? $username, $dbConf['password'] ?? $password];
case 'pgsql':
$dsn = $dbConf['driver'] . ':';
if (isset($dbConf['host'])) {
if (Util::subString($dbConf['host'], 0, 5) === 'unix:') {
$dsn .= 'unix_socket=' . Util::subString($dbConf['host'], 5) . ';';
} else {
$dsn .= 'host=' . $dbConf['host'] . ';';
}
}
if (!empty($dbConf['port'])) {
$dsn .= 'port=' . $dbConf['port'] . ';';
}
$dsn .= 'dbname=' . $dbConf['database'];
return [$dsn, $dbConf['driver'], $dbConf['username'] ?? $username, $dbConf['password'] ?? $password];
case 'sqlite':
$dsn = $dbConf['driver'] . ':';
if (isset($dbConf['path'])) {
$dsn .= $dbConf['path'];
} else {
$dsn .= ':memory:';
}
return [$dsn, $dbConf['driver'], null, null];
default:
throw new DBAlert\DBException(\trk('errors.database.not_implemented', (string) $dbConf['driver']));
}
}