From 5fac432272b40234a1146987e703b521bb1002fb Mon Sep 17 00:00:00 2001 From: Pavel Zelezny Date: Mon, 26 Oct 2015 16:11:42 +0100 Subject: [PATCH] Connection: option 'driver' can contain driver instance or class name [Closes #153] --- src/Dibi/Connection.php | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/Dibi/Connection.php b/src/Dibi/Connection.php index 5ac77d70..af50370e 100644 --- a/src/Dibi/Connection.php +++ b/src/Dibi/Connection.php @@ -79,15 +79,22 @@ class Connection $config['driver'] = \dibi::$defaultDriver; } - $class = $tmp = preg_replace(['#\W#', '#sql#'], ['_', 'Sql'], ucfirst(strtolower($config['driver']))); - $class = "Dibi\\Drivers\\{$class}Driver"; - if (!class_exists($class)) { - throw new Exception("Unable to create instance of dibi driver '$class'."); + if ($config['driver'] instanceof Driver) { + $this->driver = $config['driver']; + $config['driver'] = get_class($this->driver); + } elseif (is_subclass_of($config['driver'], 'Dibi\Driver')) { + $this->driver = new $config['driver']; + } else { + $class = preg_replace(['#\W#', '#sql#'], ['_', 'Sql'], ucfirst(strtolower($config['driver']))); + $class = "Dibi\\Drivers\\{$class}Driver"; + if (!class_exists($class)) { + throw new Exception("Unable to create instance of dibi driver '$class'."); + } + $this->driver = new $class; } $config['name'] = $name; $this->config = $config; - $this->driver = new $class; $this->translator = new Translator($this); // profiler