public static function factory(array $params = array(), $raw = FALSE) { $params = array_merge(static::$defaults, $params); if (!array_key_exists($params['scheme'], static::$available)) { throw new \Exception("Scheme not available for '{$params['scheme']}'"); } $pdo = $params['fragment'] == 'pdo' or array_key_exists('pdo', $params); $base_klass = static::$available[$params['scheme']]; $driver_klass = $pdo ? '\\Grocery\\Database\\Wrapper\\PDO' : str_replace('@', 'Wrapper', $base_klass); $scheme_klass = str_replace('@', 'Scheme', $base_klass); $debugger = new \Grocery\Database\Debug(\Grocery\Config::get('logger')); $wrapper = $driver_klass::factory($params, $debugger); if ($raw) { return $wrapper; } $obj = new $scheme_klass($wrapper, $params); // TODO: enable configuration for this? method_exists($obj, 'set_encoding') && $obj->set_encoding(); return $obj; }
public function unserialize($data) { extract(unserialize($data)); $this->setup = $params; $this->conn = \Grocery\Base::factory($params, TRUE); $type = \Grocery\Config::get('unserialize'); if ($type === 'reset') { $this->reset(); } foreach ($tables as $one => $set) { if ($type === 'overwrite') { $this->drop($one); } if (!isset($this->{$one})) { $this->create($one, $set['columns']); foreach ($set['indexes'] as $key => $val) { $this->add_index($one, $key, $val['column'], $val['unique']); } } } }