diff --git a/laravel/database.php b/laravel/database.php index 447fa76b..027efa9c 100644 --- a/laravel/database.php +++ b/laravel/database.php @@ -12,6 +12,13 @@ class Database { */ public static $connections = array(); + /** + * The third-party driver registrar. + * + * @var array + */ + public static $registrar = array(); + /** * Get a database connection. * @@ -66,6 +73,11 @@ class Database { */ protected static function connector($driver) { + if (isset(static::$registrar[$driver])) + { + return static::$registrar[$driver]['connector'](); + } + switch ($driver) { case 'sqlite': @@ -120,6 +132,22 @@ class Database { return Database\Connection::$queries; } + /** + * Register a database connector and grammars. + * + * @param string $name + * @param Closure $connector + * @param Closure $query + * @param Closure $schema + * @return void + */ + public static function register($name, Closure $connector, $query = null, $schema = null) + { + if (is_null($query)) $query = '\Laravel\Database\Query\Grammars\Grammar'; + + static::$registrar[$name] = compact('connector', 'query', 'schema'); + } + /** * Magic Method for calling methods on the default database connection. * diff --git a/laravel/database/connection.php b/laravel/database/connection.php index f146ebb9..a93dd1f6 100644 --- a/laravel/database/connection.php +++ b/laravel/database/connection.php @@ -1,4 +1,6 @@ -grammar)) return $this->grammar; - switch (isset($this->config['grammar']) ? $this->config['grammar'] : $this->driver()) + if (isset(\Laravel\Database::$registrar[$this->driver()])) + { + \Laravel\Database::$registrar[$this->driver()]['query'](); + } + + switch ($this->driver()) { case 'mysql': return $this->grammar = new Query\Grammars\MySQL($this); @@ -300,7 +307,7 @@ class Connection { */ public function driver() { - return $this->pdo->getAttribute(PDO::ATTR_DRIVER_NAME); + return $this->config['driver']; } /** diff --git a/laravel/database/schema.php b/laravel/database/schema.php index bbc4bb01..c7e56309 100644 --- a/laravel/database/schema.php +++ b/laravel/database/schema.php @@ -148,6 +148,11 @@ class Schema { { $driver = $connection->driver(); + if (isset(\Laravel\Database::$registrar[$driver])) + { + return \Laravel\Database::$registrar[$driver]['schema'](); + } + switch ($driver) { case 'mysql':