From 9d2a76b26fbfb9dc5b5c3383d966a24564484a51 Mon Sep 17 00:00:00 2001 From: Taylor Otwell Date: Fri, 19 Aug 2011 21:18:59 -0500 Subject: [PATCH] refactoring database. --- laravel/db.php | 4 +-- laravel/db/connection.php | 17 ----------- laravel/db/connection/factory.php | 30 ------------------- .../connector/{generic.php => callback.php} | 4 +-- laravel/db/connector/factory.php | 15 +++++----- laravel/db/query.php | 14 ++++++++- laravel/db/query/factory.php | 9 ++++-- laravel/db/{connection => query}/mysql.php | 6 ++-- 8 files changed, 35 insertions(+), 64 deletions(-) delete mode 100644 laravel/db/connection/factory.php rename laravel/db/connector/{generic.php => callback.php} (58%) rename laravel/db/{connection => query}/mysql.php (64%) diff --git a/laravel/db.php b/laravel/db.php index 94d53fe0..0508ee26 100644 --- a/laravel/db.php +++ b/laravel/db.php @@ -37,9 +37,9 @@ public static function connection($connection = null) throw new \Exception("Database connection [$connection] is not defined."); } - $connector = DB\Connector\Factory::make($config['driver']); + $connector = DB\Connector\Factory::make($config); - static::$connections[$connection] = DB\Connection\Factory::make($connection, $config, $connector); + static::$connections[$connection] = new DB\Connection($connection, $config, $connector); } return static::$connections[$connection]; diff --git a/laravel/db/connection.php b/laravel/db/connection.php index 580bc6c5..759e1b5e 100644 --- a/laravel/db/connection.php +++ b/laravel/db/connection.php @@ -167,21 +167,4 @@ public function driver() return $this->pdo->getAttribute(\PDO::ATTR_DRIVER_NAME); } - /** - * Get the table prefix for the database connection. - * - * @return string - */ - public function prefix() - { - return (array_key_exists('prefix', $this->config)) ? $this->config['prefix'] : ''; - } - - /** - * Get the keyword identifier wrapper for the connection. - * - * @return string - */ - public function wrapper() { return '"'; } - } \ No newline at end of file diff --git a/laravel/db/connection/factory.php b/laravel/db/connection/factory.php deleted file mode 100644 index 06bc710b..00000000 --- a/laravel/db/connection/factory.php +++ /dev/null @@ -1,30 +0,0 @@ -options); + return call_user_func($config['connector']); } } \ No newline at end of file diff --git a/laravel/db/connector/factory.php b/laravel/db/connector/factory.php index f038d857..9683da96 100644 --- a/laravel/db/connector/factory.php +++ b/laravel/db/connector/factory.php @@ -5,12 +5,14 @@ class Factory { /** * Create a new database connector instance for a given driver. * - * @param string $driver + * @param array $config * @return Connector */ - public static function make($driver) + public static function make($config) { - switch ($driver) + if (isset($config['connector'])) return new Callback; + + switch ($config['driver']) { case 'sqlite': return new SQLite; @@ -18,12 +20,11 @@ public static function make($driver) case 'mysql': return new MySQL; - case 'postgres': + case 'pgsql': return new Postgres; - - default: - return new Generic; } + + throw new \Exception("Database configuration is invalid. Please verify your configuration."); } } \ No newline at end of file diff --git a/laravel/db/query.php b/laravel/db/query.php index d65fac06..7c48c923 100644 --- a/laravel/db/query.php +++ b/laravel/db/query.php @@ -630,7 +630,7 @@ private function wrap($value) foreach (explode('.', $value) as $segment) { - $wrapped[] = ($segment != '*') ? $this->connection->wrapper().$segment.$this->connection->wrapper() : $segment; + $wrapped[] = ($segment != '*') ? $this->wrapper().$segment.$this->wrapper() : $segment; } return implode('.', $wrapped); @@ -649,6 +649,18 @@ private function wrap_alias($value) return $this->wrap($segments[0]).' AS '.$this->wrap($segments[2]); } + /** + * Get the keyword identifier wrapper for the connection. + * + * MySQL uses a non-standard wrapper + * + * @return string + */ + protected function wrapper() + { + return '"'; + } + /** * Create query parameters from an array of values. * diff --git a/laravel/db/query/factory.php b/laravel/db/query/factory.php index f9a649f5..e474b22a 100644 --- a/laravel/db/query/factory.php +++ b/laravel/db/query/factory.php @@ -14,11 +14,16 @@ class Factory { */ public static function make($table, Connection $connection) { - switch ($connection->driver()) + $query = (isset($connection->config['query'])) ? $connection->config['query'] : $connection->driver(); + + switch ($query) { - case 'postgres': + case 'pgsql': return new Postgres($table, $connection); + case 'mysql': + return new MySQL($table, $connection); + default: return new Query($table, $connection); } diff --git a/laravel/db/connection/mysql.php b/laravel/db/query/mysql.php similarity index 64% rename from laravel/db/connection/mysql.php rename to laravel/db/query/mysql.php index ad42eb5a..9be14cae 100644 --- a/laravel/db/connection/mysql.php +++ b/laravel/db/query/mysql.php @@ -1,8 +1,8 @@ -