real database connection using the following parameters * of the $GLOBALS array: * * 'db_type' : The name of the Doctrine DBAL database driver to use. * 'db_username' : The username to use for connecting. * 'db_password' : The password to use for connecting. * 'db_host' : The hostname of the database to connect to. * 'db_name' : The name of the database to connect to. * 'db_port' : The port of the database to connect to. * * Usually these variables of the $GLOBALS array are filled by PHPUnit based * on an XML configuration file. If no such parameters exist, an SQLite * in-memory database is used. * * IMPORTANT: * 1) Each invocation of this method returns a NEW database connection. * 2) The database is dropped and recreated to ensure it's clean. * * @return \Doctrine\DBAL\Connection The database connection instance. */ public static function getConnection() { if (isset($GLOBALS['db_type'], $GLOBALS['db_username'], $GLOBALS['db_password'], $GLOBALS['db_host'], $GLOBALS['db_name'], $GLOBALS['db_port']) && isset($GLOBALS['tmpdb_type'], $GLOBALS['tmpdb_username'], $GLOBALS['tmpdb_password'], $GLOBALS['tmpdb_host'], $GLOBALS['tmpdb_name'], $GLOBALS['tmpdb_port'])) { $realDbParams = array( 'driver' => $GLOBALS['db_type'], 'user' => $GLOBALS['db_username'], 'password' => $GLOBALS['db_password'], 'host' => $GLOBALS['db_host'], 'dbname' => $GLOBALS['db_name'], 'port' => $GLOBALS['db_port'] ); $tmpDbParams = array( 'driver' => $GLOBALS['tmpdb_type'], 'user' => $GLOBALS['tmpdb_username'], 'password' => $GLOBALS['tmpdb_password'], 'host' => $GLOBALS['tmpdb_host'], 'dbname' => $GLOBALS['tmpdb_name'], 'port' => $GLOBALS['tmpdb_port'] ); if (isset($GLOBALS['db_unix_socket'])) { $realDbParams['unix_socket'] = $GLOBALS['db_unix_socket']; } if (isset($GLOBALS['tmpdb_unix_socket'])) { $tmpDbParams['unix_socket'] = $GLOBALS['tmpdb_unix_socket']; } $realConn = \Doctrine\DBAL\DriverManager::getConnection($realDbParams); $platform = $realConn->getDatabasePlatform(); if ($platform->supportsCreateDropDatabase()) { $dbname = $realConn->getDatabase(); // Connect to tmpdb in order to drop and create the real test db. $tmpConn = \Doctrine\DBAL\DriverManager::getConnection($tmpDbParams); $realConn->close(); $tmpConn->getSchemaManager()->dropAndCreateDatabase($dbname); $tmpConn->close(); } else { $sm = $realConn->getSchemaManager(); /* @var $schema Schema */ $schema = $sm->createSchema(); $stmts = $schema->toDropSql($realConn->getDatabasePlatform()); foreach ($stmts AS $stmt) { $realConn->exec($stmt); } } $conn = \Doctrine\DBAL\DriverManager::getConnection($realDbParams, null, null); } else { $params = array( 'driver' => 'pdo_sqlite', 'memory' => true ); if (isset($GLOBALS['db_path'])) { $params['path'] = $GLOBALS['db_path']; unlink($GLOBALS['db_path']); } $conn = \Doctrine\DBAL\DriverManager::getConnection($params); } if (isset($GLOBALS['db_event_subscribers'])) { $evm = $conn->getEventManager(); foreach (explode(",", $GLOBALS['db_event_subscribers']) AS $subscriberClass) { $subscriberInstance = new $subscriberClass(); $evm->addEventSubscriber($subscriberInstance); } } return $conn; } /** * @return \Doctrine\DBAL\Connection */ public static function getTempConnection() { $tmpDbParams = array( 'driver' => $GLOBALS['tmpdb_type'], 'user' => $GLOBALS['tmpdb_username'], 'password' => $GLOBALS['tmpdb_password'], 'host' => $GLOBALS['tmpdb_host'], 'dbname' => $GLOBALS['tmpdb_name'], 'port' => $GLOBALS['tmpdb_port'] ); // Connect to tmpdb in order to drop and create the real test db. return \Doctrine\DBAL\DriverManager::getConnection($tmpDbParams); } }