123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- <?php
-
- namespace Doctrine\Tests;
-
- /**
- * TestUtil is a class with static utility methods used during tests.
- *
- * @author robo
- */
- class TestUtil
- {
- /**
- * Gets a <b>real</b> 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']
- );
-
- $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()->dropDatabase($dbname);
- $tmpConn->getSchemaManager()->createDatabase($dbname);
-
- $tmpConn->close();
- } else {
- $sm = $realConn->getSchemaManager();
-
- /* @var $schema Schema */
- $schema = $sm->createSchema();
- $stmts = $schema->toDropSql($realConn->getDatabasePlatform());
-
- foreach ($stmts AS $stmt) {
- try {
- $realConn->exec($stmt);
- } catch(\Exception $e) {
- // TODO: Now is this a real good idea?
- }
- }
- }
-
- $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);
- }
-
- 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);
- }
- }
|