Commit 60e35263 authored by Taylor Otwell's avatar Taylor Otwell

Refactor DB\Connector class.

parent 9454927b
...@@ -22,59 +22,66 @@ class Connector { ...@@ -22,59 +22,66 @@ class Connector {
*/ */
public static function connect($config) public static function connect($config)
{ {
// -----------------------------------------------------
// Connect to SQLite.
// -----------------------------------------------------
if ($config->driver == 'sqlite') if ($config->driver == 'sqlite')
{ {
// ----------------------------------------------------- return static::connect_to_sqlite($config);
// Check the application/db directory first.
//
// If the database doesn't exist there, maybe the full
// path was specified as the database name?
// -----------------------------------------------------
if (file_exists($path = APP_PATH.'storage/db/'.$config->database.'.sqlite'))
{
return new \PDO('sqlite:'.$path, null, null, static::$options);
}
elseif (file_exists($config->database))
{
return new \PDO('sqlite:'.$config->database, null, null, static::$options);
}
else
{
throw new \Exception("SQLite database [".$config->database."] could not be found.");
}
} }
// -----------------------------------------------------
// Connect to MySQL or Postgres.
// -----------------------------------------------------
elseif ($config->driver == 'mysql' or $config->driver == 'pgsql') elseif ($config->driver == 'mysql' or $config->driver == 'pgsql')
{ {
// ----------------------------------------------------- return static::connect_to_server($config);
// Build the PDO connection DSN. }
// -----------------------------------------------------
$dsn = $config->driver.':host='.$config->host.';dbname='.$config->database;
if (isset($config->port)) throw new \Exception('Database driver '.$config->driver.' is not supported.');
{ }
$dsn .= ';port='.$config->port;
}
$connection = new \PDO($dsn, $config->username, $config->password, static::$options); /**
* Establish a PDO connection to a SQLite database.
*
* @param array $config
* @return PDO
*/
private static function connect_to_sqlite($config)
{
// Database paths can either be specified relative to the application/storage/db
// directory, or as an absolute path.
// ----------------------------------------------------- if (file_exists($path = APP_PATH.'storage/db/'.$config->database.'.sqlite'))
// Set the appropriate character set for the datbase. {
// ----------------------------------------------------- return new \PDO('sqlite:'.$path, null, null, static::$options);
if (isset($config->charset)) }
{ elseif (file_exists($config->database))
$connection->prepare("SET NAMES '".$config->charset."'")->execute(); {
} return new \PDO('sqlite:'.$config->database, null, null, static::$options);
}
else
{
throw new \Exception("SQLite database [".$config->database."] could not be found.");
}
}
/**
* Connect to a MySQL or PostgreSQL database server.
*
* @param array $config
* @return PDO
*/
private static function connect_to_server($config)
{
$dsn = $config->driver.':host='.$config->host.';dbname='.$config->database;
return $connection; if (isset($config->port))
{
$dsn .= ';port='.$config->port;
} }
throw new \Exception('Database driver '.$config->driver.' is not supported.'); $connection = new \PDO($dsn, $config->username, $config->password, static::$options);
if (isset($config->charset))
{
$connection->prepare("SET NAMES '".$config->charset."'")->execute();
}
return $connection;
} }
} }
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment