public function testAdapterAndConfiguredDsnWithPortAndCharset() { $config = ['adapter' => 'test_adapter', 'db_name' => 'test_db_name', 'host' => 'test_host', 'port' => 'port', 'charset' => 'utf8']; $environmentConfig = new EnvironmentConfig($config); $this->assertEquals($config, $environmentConfig->getConfiguration()); $this->assertEquals('test_adapter', $environmentConfig->getAdapter()); $this->assertEquals('test_adapter:dbname=test_db_name;host=test_host;port=port;charset=utf8', $environmentConfig->getDsn()); $this->assertNull($environmentConfig->getUsername()); $this->assertNull($environmentConfig->getPassword()); }
public static function instance(EnvironmentConfig $config) { $configHash = md5(json_encode($config->getConfiguration())); if (isset(self::$instances[$configHash])) { return self::$instances[$configHash]; } $pdo = new PDO($config->getDsn(), $config->getUsername(), $config->getPassword()); if ($config->getAdapter() == 'mysql') { $adapter = new MysqlAdapter($pdo); } elseif ($config->getAdapter() == 'pgsql') { $adapter = new PgsqlAdapter($pdo); } elseif ($config->getAdapter() == 'sqlite') { $adapter = new SqliteAdapter($pdo); } else { throw new InvalidArgumentValueException('Unknown adapter "' . $config->getAdapter() . '". Use one of value: "mysql", "pgsql", "sqlite".'); } $adapter->setCharset($config->getCharset()); self::$instances[$configHash] = $adapter; return $adapter; }