public static function breakDSN($dsn)
{
// break DSN string down into parameters
$params = array();
if (strpos($dsn, ':') === false) {
$params['driver'] = $dsn;
return $params;
}
list($driver, $paramString) = explode(':', $dsn, 2);
$params['driver'] = $driver;
if ($paramString === ':memory:') {
$params[':memory:'] = 1;
return $params;
}
$paramPairs = explode(';', $paramString);
foreach ($paramPairs as $pair) {
if (preg_match('#(\\S+)=(\\S+)#', $pair, $regs)) {
$params[$regs[1]] = $regs[2];
}
}
return $params;
}
public function createDB($ds) { if (empty($ds)) { return; } $dbutil = new DBUtil(); $user = @$ds['user']; $pass = @$ds['pass']; if (isset($ds['dsn'])) { $params = Utils::breakDSN($ds['dsn']); $ds = array_merge($ds, $params); } if (isset($ds[':memory:'])) { $this->logger->info('skip :memory: database'); return; } if (!isset($ds['database'])) { $this->logger->notice('database is not defined.'); return; } if (!isset($ds['host'])) { $ds['host'] = 'localhost'; } $this->logger->info("creating database {$ds['database']}..."); $dbutil->create($ds['driver'], array('username' => $user, 'password' => $pass, 'database' => $ds['database'], 'host' => $ds['host'])); }