1
0
mirror of synced 2024-12-14 15:16:04 +03:00

New Doctrine_DB enhancements

This commit is contained in:
zYne 2006-09-23 10:44:39 +00:00
parent a773997d29
commit bcbdba0e78
5 changed files with 444 additions and 124 deletions

View File

@ -26,20 +26,23 @@
* @package Doctrine * @package Doctrine
*/ */
class Doctrine_DB_EventListener implements Doctrine_DB_EventListener_Interface { class Doctrine_DB_EventListener implements Doctrine_DB_EventListener_Interface {
public function onPreQuery(Doctrine_DB $dbh, array $args) { } public function onPreQuery(Doctrine_DB2 $dbh, array $args) { }
public function onQuery(Doctrine_DB $dbh, array $args) { } public function onQuery(Doctrine_DB2 $dbh, array $args) { }
public function onPrePrepare(Doctrine_DB $dbh, array $args) { } public function onPrePrepare(Doctrine_DB2 $dbh, array $args) { }
public function onPrepare(Doctrine_DB $dbh, array $args) { } public function onPrepare(Doctrine_DB2 $dbh, array $args) { }
public function onPreCommit(Doctrine_DB $dbh) { } public function onPreCommit(Doctrine_DB2 $dbh) { }
public function onCommit(Doctrine_DB $dbh) { } public function onCommit(Doctrine_DB2 $dbh) { }
public function onPreRollBack(Doctrine_DB $dbh) { } public function onPreExec(Doctrine_DB2 $dbh, array $args) { }
public function onRollBack(Doctrine_DB $dbh) { } public function onExec(Doctrine_DB2 $dbh, array $args) { }
public function onPreBeginTransaction(Doctrine_DB $dbh) { } public function onPreRollBack(Doctrine_DB2 $dbh) { }
public function onBeginTransaction(Doctrine_DB $dbh) { } public function onRollBack(Doctrine_DB2 $dbh) { }
public function onPreBeginTransaction(Doctrine_DB2 $dbh) { }
public function onBeginTransaction(Doctrine_DB2 $dbh) { }
public function onPreExecute(Doctrine_DB_Statement $stmt, array $params) { } public function onPreExecute(Doctrine_DB_Statement $stmt, array $params) { }
public function onExecute(Doctrine_DB_Statement $stmt, array $params) { } public function onExecute(Doctrine_DB_Statement $stmt, array $params) { }

View File

@ -25,60 +25,96 @@
* @license LGPL * @license LGPL
* @package Doctrine * @package Doctrine
*/ */
class Doctrine_DB_EventListener_Chain implements Doctrine_DB_EventListener_Interface { class Doctrine_DB_EventListener_Chain extends Doctrine_Access implements Doctrine_DB_EventListener_Interface {
private $listeners = array(); private $listeners = array();
public function add($listener, $name = null) {
if( ! ($listener instanceof Doctrine_DB_EventListener_Interface) &&
! ($listener instanceof Doctrine_Overloadable))
throw new Doctrine_DB_Exception("Couldn't add eventlistener. EventListeners should implement either Doctrine_DB_EventListener_Interface or Doctrine_Overloadable");
public function onPreQuery(Doctrine_DB $dbh, array $args) { if($name === null)
$this->listeners[] = $listener;
else
$this->listeners[$name] = $listener;
}
public function get($name) {
if( ! isset($this->listeners[$name]))
throw new Doctrine_DB_Exception("Unknown listener $name");
return $this->listeners[$name];
}
public function set($name, $listener) {
if( ! ($listener instanceof Doctrine_DB_EventListener_Interface) &&
! ($listener instanceof Doctrine_Overloadable))
throw new Doctrine_DB_Exception("Couldn't set eventlistener. EventListeners should implement either Doctrine_DB_EventListener_Interface or Doctrine_Overloadable");
$this->listeners[$name] = $listener;
}
public function onPreQuery(Doctrine_DB2 $dbh, array $args) {
foreach($this->listeners as $listener) { foreach($this->listeners as $listener) {
$listener->onPreQuery($dbh, $args); $listener->onPreQuery($dbh, $args);
} }
} }
public function onQuery(Doctrine_DB $dbh, array $args) { public function onQuery(Doctrine_DB2 $dbh, array $args) {
foreach($this->listeners as $listener) { foreach($this->listeners as $listener) {
$listener->onPreQuery($dbh, $args); $listener->onQuery($dbh, $args);
} }
} }
public function onPrePrepare(Doctrine_DB $dbh, array $args) { public function onPreExec(Doctrine_DB2 $dbh, array $args) {
foreach($this->listeners as $listener) {
$listener->onPreExec($dbh, $args);
}
}
public function onExec(Doctrine_DB2 $dbh, array $args) {
foreach($this->listeners as $listener) {
$listener->onExec($dbh, $args);
}
}
public function onPrePrepare(Doctrine_DB2 $dbh, array $args) {
foreach($this->listeners as $listener) { foreach($this->listeners as $listener) {
$listener->onPrePrepare($dbh, $args); $listener->onPrePrepare($dbh, $args);
} }
} }
public function onPrepare(Doctrine_DB $dbh, array $args) { public function onPrepare(Doctrine_DB2 $dbh, array $args) {
foreach($this->listeners as $listener) { foreach($this->listeners as $listener) {
$listener->onPrepare($dbh, $args); $listener->onPrepare($dbh, $args);
} }
} }
public function onPreCommit(Doctrine_DB $dbh) { public function onPreCommit(Doctrine_DB2 $dbh) {
foreach($this->listeners as $listener) { foreach($this->listeners as $listener) {
$listener->onPreCommit($dbh); $listener->onPreCommit($dbh);
} }
} }
public function onCommit(Doctrine_DB $dbh) { public function onCommit(Doctrine_DB2 $dbh) {
foreach($this->listeners as $listener) { foreach($this->listeners as $listener) {
$listener->onCommit($dbh); $listener->onCommit($dbh);
} }
} }
public function onPreRollBack(Doctrine_DB $dbh) { public function onPreRollBack(Doctrine_DB2 $dbh) {
foreach($this->listeners as $listener) { foreach($this->listeners as $listener) {
$listener->onPreRollBack($dbh); $listener->onPreRollBack($dbh);
} }
} }
public function onRollBack(Doctrine_DB $dbh) { public function onRollBack(Doctrine_DB2 $dbh) {
foreach($this->listeners as $listener) { foreach($this->listeners as $listener) {
$listener->onRollBack($dbh); $listener->onRollBack($dbh);
} }
} }
public function onPreBeginTransaction(Doctrine_DB $dbh) { public function onPreBeginTransaction(Doctrine_DB2 $dbh) {
foreach($this->listeners as $listener) { foreach($this->listeners as $listener) {
$listener->onPreBeginTransaction($dbh); $listener->onPreBeginTransaction($dbh);
} }
} }
public function onBeginTransaction(Doctrine_DB $dbh) { public function onBeginTransaction(Doctrine_DB2 $dbh) {
foreach($this->listeners as $listener) { foreach($this->listeners as $listener) {
$listener->onBeginTransaction($dbh); $listener->onBeginTransaction($dbh);
} }

View File

@ -26,20 +26,23 @@
* @package Doctrine * @package Doctrine
*/ */
interface Doctrine_DB_EventListener_Interface { interface Doctrine_DB_EventListener_Interface {
public function onPreQuery(Doctrine_DB $dbh, array $args); public function onPreQuery(Doctrine_DB2 $dbh, array $args);
public function onQuery(Doctrine_DB $dbh, array $args); public function onQuery(Doctrine_DB2 $dbh, array $args);
public function onPrePrepare(Doctrine_DB $dbh, array $args); public function onPrePrepare(Doctrine_DB2 $dbh, array $args);
public function onPrepare(Doctrine_DB $dbh, array $args); public function onPrepare(Doctrine_DB2 $dbh, array $args);
public function onPreCommit(Doctrine_DB $dbh); public function onPreExec(Doctrine_DB2 $dbh, array $args);
public function onCommit(Doctrine_DB $dbh); public function onExec(Doctrine_DB2 $dbh, array $args);
public function onPreRollBack(Doctrine_DB $dbh); public function onPreCommit(Doctrine_DB2 $dbh);
public function onRollBack(Doctrine_DB $dbh); public function onCommit(Doctrine_DB2 $dbh);
public function onPreBeginTransaction(Doctrine_DB $dbh); public function onPreRollBack(Doctrine_DB2 $dbh);
public function onBeginTransaction(Doctrine_DB $dbh); public function onRollBack(Doctrine_DB2 $dbh);
public function onPreBeginTransaction(Doctrine_DB2 $dbh);
public function onBeginTransaction(Doctrine_DB2 $dbh);
public function onPreExecute(Doctrine_DB_Statement $stmt, array $params); public function onPreExecute(Doctrine_DB_Statement $stmt, array $params);
public function onExecute(Doctrine_DB_Statement $stmt, array $params); public function onExecute(Doctrine_DB_Statement $stmt, array $params);

View File

@ -65,10 +65,14 @@ class Doctrine_DB2 implements Countable, IteratorAggregate {
*/ */
protected $dbh; protected $dbh;
/** /**
* @var Doctrine_DB_EventListener_Interface $listener listener for listening events * @var Doctrine_DB_EventListener_Interface|Doctrine_Overloadable $listener listener for listening events
*/ */
protected $listener; protected $listener;
private static $driverMap = array("oracle" => "oci8",
"postgres" => "pgsql",
"oci" => "oci8");
/** /**
* constructor * constructor
@ -83,8 +87,15 @@ class Doctrine_DB2 implements Countable, IteratorAggregate {
$this->password = $password; $this->password = $password;
$this->listener = new Doctrine_DB_EventListener(); $this->listener = new Doctrine_DB_EventListener();
} }
/**
* getDBH
*/
public function getDBH() {
return $this->dbh;
}
/** /**
* getDSN * getDSN
* returns the data source name
* *
* @return string * @return string
*/ */
@ -103,6 +114,43 @@ class Doctrine_DB2 implements Countable, IteratorAggregate {
public function getPassword() { public function getPassword() {
return $this->password; return $this->password;
} }
/**
* addListener
*
* @param Doctrine_DB_EventListener_Interface|Doctrine_Overloadable $listener
* @return Doctrine_DB
*/
public function addListener($listener, $name = null) {
if( ! ($this->listener instanceof Doctrine_DB_EventListener_Chain))
$this->listener = new Doctrine_DB_EventListener_Chain();
$this->listener->add($listener, $name);
return $this;
}
/**
* getListener
*
* @return Doctrine_DB_EventListener_Interface|Doctrine_Overloadable
*/
public function getListener() {
return $this->listener;
}
/**
* setListener
*
* @param Doctrine_DB_EventListener_Interface|Doctrine_Overloadable $listener
* @return Doctrine_DB
*/
public function setListener($listener) {
if( ! ($listener instanceof Doctrine_DB_EventListener_Interface) &&
! ($listener instanceof Doctrine_Overloadable))
throw new Doctrine_DB_Exception("Couldn't set eventlistener for database handler. EventListeners should implement either Doctrine_DB_EventListener_Interface or Doctrine_Overloadable");
$this->listener = $listener;
return $this;
}
/** /**
* connect * connect
@ -116,7 +164,7 @@ class Doctrine_DB2 implements Countable, IteratorAggregate {
$this->dbh = new PDO($this->dsn,$this->username,$this->password); $this->dbh = new PDO($this->dsn,$this->username,$this->password);
$this->dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $this->dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$this->dbh->setAttribute(PDO::ATTR_STATEMENT_CLASS, array("Doctrine_DBStatement",array($this))); $this->dbh->setAttribute(PDO::ATTR_STATEMENT_CLASS, array("Doctrine_DB_Statement", array($this)));
return true; return true;
} }
@ -148,6 +196,69 @@ class Doctrine_DB2 implements Countable, IteratorAggregate {
} }
return self::$instances[$md5]; return self::$instances[$md5];
} }
public static function driverName() {
}
/**
* parseDSN
*
* @param string $dsn
* @return array Parsed contents of DSN
*/
function parseDSN($dsn) {
$parts = @parse_url($dsn);
$names = array('scheme', 'host', 'port', 'user', 'pass', 'path', 'query', 'fragment');
foreach($names as $name) {
if( ! isset($parts[$name]))
$parts[$name] = null;
}
if(count($parts) == 0 || ! isset($parts['scheme']))
throw new Doctrine_DB_Exception('Empty data source name');
$drivers = self::getAvailableDrivers();
if(isset(self::$driverMap[$parts['scheme']]))
$parts['scheme'] = self::$driverMap[$parts['scheme']];
if( ! in_array($parts['scheme'], $drivers))
throw new Doctrine_DB_Exception('Driver '.$parts['scheme'].' not availible or extension not loaded');
switch($parts['scheme']) {
case 'sqlite':
if(isset($parts['host']) && $parts['host'] == ':memory') {
$parts['database'] = ':memory:';
$parts['dsn'] = 'sqlite::memory:';
}
break;
case 'mysql':
case 'informix':
case 'oci8':
case 'mssql':
case 'firebird':
case 'pgsql':
case 'odbc':
if( ! isset($parts['path']) || $parts['path'] == '/')
throw new Doctrine_DB_Exception('No database availible in data source name');
if(isset($parts['path']))
$parts['database'] = substr($parts['path'], 1);
if( ! isset($parts['host']))
throw new Doctrine_DB_Exception('No hostname set in data source name');
$parts['dsn'] = $parts["scheme"].":host=".$parts["host"].";dbname=".$parts["database"];
break;
default:
throw new Doctrine_DB_Exception('Unknown driver '.$parts['scheme']);
}
return $parts;
}
/** /**
* clear * clear
* clears all instances from the memory * clears all instances from the memory
@ -182,11 +293,13 @@ class Doctrine_DB2 implements Countable, IteratorAggregate {
* @param string $statement * @param string $statement
*/ */
public function prepare($statement) { public function prepare($statement) {
$this->listener->onPrePrepare($this, $statement); $args = func_get_args();
$this->listener->onPrePrepare($this, $args);
$stmt = $this->dbh->prepare($statement); $stmt = $this->dbh->prepare($statement);
$this->listener->onPrepare($this,$statement); $this->listener->onPrepare($this, $args);
return $stmt; return $stmt;
} }
@ -227,11 +340,13 @@ class Doctrine_DB2 implements Countable, IteratorAggregate {
* @return integer * @return integer
*/ */
public function exec($statement) { public function exec($statement) {
$this->listener->onPreExec($this, $statement); $args = func_get_args();
$this->listener->onPreExec($this, $args);
$rows = $this->dbh->exec($statement); $rows = $this->dbh->exec($statement);
$this->listener->onExec($this, $statement); $this->listener->onExec($this, $args);
return $rows; return $rows;
} }
@ -331,61 +446,6 @@ class Doctrine_DB2 implements Countable, IteratorAggregate {
public function count() { public function count() {
return count($this->queries); return count($this->queries);
} }
/**
* parseDSN
*
* @param string $dsn
* @return array Parsed contents of DSN
*/
function parseDSN($dsn) {
$parts = @parse_url($dsn);
$names = array('scheme', 'host', 'port', 'user', 'pass', 'path', 'query', 'fragment');
foreach($names as $name) {
if( ! isset($parts[$name]))
$parts[$name] = null;
}
if(count($parts) == 0 || ! isset($parts['scheme']))
throw new Doctrine_DB_Exception('Empty data source name');
$drivers = self::getAvailableDrivers();
if( ! in_array($parts['scheme'], $drivers))
throw new Doctrine_DB_Exception('Driver '.$parts['scheme'].' not availible or extension not loaded');
switch($parts['scheme']) {
case 'sqlite':
if(isset($parts['host']) && $parts['host'] == ':memory') {
$parts['database'] = ':memory:';
$parts['dsn'] = 'sqlite::memory:';
}
break;
case 'mysql':
case 'informix':
case 'oci8':
case 'mssql':
case 'firebird':
case 'pgsql':
case 'odbc':
if( ! isset($parts['path']) || $parts['path'] == '/')
throw new Doctrine_DB_Exception('No database availible in data source name');
if(isset($parts['path']))
$parts['database'] = substr($parts['path'], 1);
if( ! isset($parts['host']))
throw new Doctrine_DB_Exception('No hostname set in data source name');
$parts['dsn'] = $parts["scheme"].":host=".$parts["host"].";dbname=".$parts["database"];
break;
default:
throw new Doctrine_DB_Exception('Unknown driver '.$parts['scheme']);
}
return $parts;
}
} }

View File

@ -1,26 +1,239 @@
<?php <?php
require_once("../draft/DB.php"); require_once("../draft/DB.php");
class Doctrine_DB_TestLogger implements Doctrine_Overloadable {
private $messages = array();
public function __call($m, $a) {
$this->messages[] = $m;
}
public function pop() {
return array_pop($this->messages);
}
public function getAll() {
return $this->messages;
}
}
class Doctrine_DB_TestValidListener extends Doctrine_DB_EventListener { }
class Doctrine_DB_TestInvalidListener { }
class Doctrine_DB_TestCase extends Doctrine_UnitTestCase { class Doctrine_DB_TestCase extends Doctrine_UnitTestCase {
public function prepareData() { } public function prepareData() { }
public function prepareTables() { } public function prepareTables() { }
public function init() { } public function init() { }
public function testAddValidEventListener() {
$dbh = Doctrine_DB2::getConnection('sqlite::memory:');
$this->assertTrue($dbh->getListener() instanceof Doctrine_DB_EventListener);
try {
$ret = $dbh->addListener(new Doctrine_DB_TestLogger());
$this->pass();
$this->assertTrue($ret instanceof Doctrine_DB2);
} catch(Doctrine_DB_Exception $e) {
$this->fail();
}
$this->assertTrue($dbh->getListener() instanceof Doctrine_DB_EventListener_Chain);
$this->assertTrue($dbh->getListener()->get(0) instanceof Doctrine_DB_TestLogger);
try {
$ret = $dbh->addListener(new Doctrine_DB_TestValidListener());
$this->pass();
$this->assertTrue($ret instanceof Doctrine_DB2);
} catch(Doctrine_DB_Exception $e) {
$this->fail();
}
$this->assertTrue($dbh->getListener() instanceof Doctrine_DB_EventListener_Chain);
$this->assertTrue($dbh->getListener()->get(0) instanceof Doctrine_DB_TestLogger);
$this->assertTrue($dbh->getListener()->get(1) instanceof Doctrine_DB_TestValidListener);
try {
$ret = $dbh->addListener(new Doctrine_DB_EventListener_Chain(), 'chain');
$this->pass();
$this->assertTrue($ret instanceof Doctrine_DB2);
} catch(Doctrine_DB_Exception $e) {
$this->fail();
}
$this->assertTrue($dbh->getListener() instanceof Doctrine_DB_EventListener_Chain);
$this->assertTrue($dbh->getListener()->get(0) instanceof Doctrine_DB_TestLogger);
$this->assertTrue($dbh->getListener()->get(1) instanceof Doctrine_DB_TestValidListener);
$this->assertTrue($dbh->getListener()->get('chain') instanceof Doctrine_DB_EventListener_Chain);
// replacing
try {
$ret = $dbh->addListener(new Doctrine_DB_EventListener_Chain(), 'chain');
$this->pass();
$this->assertTrue($ret instanceof Doctrine_DB2);
} catch(Doctrine_DB_Exception $e) {
$this->fail();
}
$this->assertTrue($dbh->getListener() instanceof Doctrine_DB_EventListener_Chain);
$this->assertTrue($dbh->getListener()->get(0) instanceof Doctrine_DB_TestLogger);
$this->assertTrue($dbh->getListener()->get(1) instanceof Doctrine_DB_TestValidListener);
$this->assertTrue($dbh->getListener()->get('chain') instanceof Doctrine_DB_EventListener_Chain);
}
public function testListeningEventsWithSingleListener() {
$dbh = Doctrine_DB2::getConnection('sqlite::memory:');
$dbh->connect();
$dbh->setListener(new Doctrine_DB_TestLogger());
$dbh->query('CREATE TABLE entity (id INT)');
$listener = $dbh->getListener();
$this->assertEqual($listener->pop(), 'onQuery');
$this->assertEqual($listener->pop(), 'onPreQuery');
$stmt = $dbh->prepare('INSERT INTO entity (id) VALUES(?)');
$this->assertEqual($listener->pop(), 'onPrepare');
$this->assertEqual($listener->pop(), 'onPrePrepare');
$stmt->execute(array(1));
$this->assertEqual($listener->pop(), 'onExecute');
$this->assertEqual($listener->pop(), 'onPreExecute');
$dbh->exec('DELETE FROM entity');
$this->assertEqual($listener->pop(), 'onExec');
$this->assertEqual($listener->pop(), 'onPreExec');
$dbh->beginTransaction();
$this->assertEqual($listener->pop(), 'onBeginTransaction');
$this->assertEqual($listener->pop(), 'onPreBeginTransaction');
$dbh->query('INSERT INTO entity (id) VALUES (1)');
$dbh->commit();
$this->assertEqual($listener->pop(), 'onCommit');
$this->assertEqual($listener->pop(), 'onPreCommit');
$this->assertEqual($listener->pop(), 'onQuery');
$this->assertEqual($listener->pop(), 'onPreQuery');
$dbh->query('DROP TABLE entity');
}
public function testListeningEventsWithListenerChain() {
$dbh = Doctrine_DB2::getConnection('sqlite::memory:');
$dbh->connect();
$dbh->addListener(new Doctrine_DB_TestLogger());
$dbh->addListener(new Doctrine_DB_TestLogger());
$dbh->query('CREATE TABLE entity (id INT)');
$listener = $dbh->getListener()->get(0);
$listener2 = $dbh->getListener()->get(1);
$this->assertEqual($listener->pop(), 'onQuery');
$this->assertEqual($listener->pop(), 'onPreQuery');
$this->assertEqual($listener2->pop(), 'onQuery');
$this->assertEqual($listener2->pop(), 'onPreQuery');
$stmt = $dbh->prepare('INSERT INTO entity (id) VALUES(?)');
$this->assertEqual($listener->pop(), 'onPrepare');
$this->assertEqual($listener->pop(), 'onPrePrepare');
$this->assertEqual($listener2->pop(), 'onPrepare');
$this->assertEqual($listener2->pop(), 'onPrePrepare');
$stmt->execute(array(1));
$this->assertEqual($listener->pop(), 'onExecute');
$this->assertEqual($listener->pop(), 'onPreExecute');
$this->assertEqual($listener2->pop(), 'onExecute');
$this->assertEqual($listener2->pop(), 'onPreExecute');
$dbh->exec('DELETE FROM entity');
$this->assertEqual($listener->pop(), 'onExec');
$this->assertEqual($listener->pop(), 'onPreExec');
$this->assertEqual($listener2->pop(), 'onExec');
$this->assertEqual($listener2->pop(), 'onPreExec');
$dbh->beginTransaction();
$this->assertEqual($listener->pop(), 'onBeginTransaction');
$this->assertEqual($listener->pop(), 'onPreBeginTransaction');
$this->assertEqual($listener2->pop(), 'onBeginTransaction');
$this->assertEqual($listener2->pop(), 'onPreBeginTransaction');
$dbh->query('INSERT INTO entity (id) VALUES (1)');
$dbh->commit();
$this->assertEqual($listener->pop(), 'onCommit');
$this->assertEqual($listener->pop(), 'onPreCommit');
$this->assertEqual($listener->pop(), 'onQuery');
$this->assertEqual($listener->pop(), 'onPreQuery');
$dbh->query('DROP TABLE entity');
}
public function testSetValidEventListener() {
$dbh = Doctrine_DB2::getConnection('sqlite::memory:');
try {
$dbh->setListener(new Doctrine_DB_TestLogger());
$this->pass();
} catch(Doctrine_DB_Exception $e) {
$this->fail();
}
$this->assertTrue($dbh->getListener() instanceof Doctrine_DB_TestLogger);
try {
$dbh->setListener(new Doctrine_DB_TestValidListener());
$this->pass();
} catch(Doctrine_DB_Exception $e) {
$this->fail();
}
$this->assertTrue($dbh->getListener() instanceof Doctrine_DB_TestValidListener);
try {
$dbh->setListener(new Doctrine_DB_EventListener_Chain());
$this->pass();
} catch(Doctrine_DB_Exception $e) {
$this->fail();
}
$this->assertTrue($dbh->getListener() instanceof Doctrine_DB_EventListener_Chain);
try {
$dbh->setListener(new Doctrine_DB_EventListener());
$this->pass();
} catch(Doctrine_DB_Exception $e) {
$this->fail();
}
$this->assertTrue($dbh->getListener() instanceof Doctrine_DB_EventListener);
}
public function testSetInvalidEventListener() {
$dbh = Doctrine_DB2::getConnection('sqlite::memory:');
try {
$dbh->setListener(new Doctrine_DB_TestInvalidListener());
$this->fail();
} catch(Doctrine_DB_Exception $e) {
$this->pass();
}
}
public function testInvalidDSN() { public function testInvalidDSN() {
try { try {
$conn = Doctrine_DB2::getConnection(''); $dbh = Doctrine_DB2::getConnection('');
$this->fail(); $this->fail();
} catch(Doctrine_DB_Exception $e) { } catch(Doctrine_DB_Exception $e) {
$this->pass(); $this->pass();
} }
try { try {
$conn = Doctrine_DB2::getConnection('unknown'); $dbh = Doctrine_DB2::getConnection('unknown');
$this->fail(); $this->fail();
} catch(Doctrine_DB_Exception $e) { } catch(Doctrine_DB_Exception $e) {
$this->pass(); $this->pass();
} }
try { try {
$conn = Doctrine_DB2::getConnection(0); $dbh = Doctrine_DB2::getConnection(0);
$this->fail(); $this->fail();
} catch(Doctrine_DB_Exception $e) { } catch(Doctrine_DB_Exception $e) {
$this->pass(); $this->pass();
@ -28,7 +241,7 @@ class Doctrine_DB_TestCase extends Doctrine_UnitTestCase {
} }
public function testInvalidScheme() { public function testInvalidScheme() {
try { try {
$conn = Doctrine_DB2::getConnection('unknown://:memory:'); $dbh = Doctrine_DB2::getConnection('unknown://:memory:');
$this->fail(); $this->fail();
} catch(Doctrine_DB_Exception $e) { } catch(Doctrine_DB_Exception $e) {
$this->pass(); $this->pass();
@ -36,7 +249,7 @@ class Doctrine_DB_TestCase extends Doctrine_UnitTestCase {
} }
public function testInvalidHost() { public function testInvalidHost() {
try { try {
$conn = Doctrine_DB2::getConnection('mysql://user:password@'); $dbh = Doctrine_DB2::getConnection('mysql://user:password@');
$this->fail(); $this->fail();
} catch(Doctrine_DB_Exception $e) { } catch(Doctrine_DB_Exception $e) {
$this->pass(); $this->pass();
@ -44,36 +257,41 @@ class Doctrine_DB_TestCase extends Doctrine_UnitTestCase {
} }
public function testInvalidDatabase() { public function testInvalidDatabase() {
try { try {
$conn = Doctrine_DB2::getConnection('mysql://user:password@host/'); $dbh = Doctrine_DB2::getConnection('mysql://user:password@host/');
$this->fail(); $this->fail();
} catch(Doctrine_DB_Exception $e) { } catch(Doctrine_DB_Exception $e) {
$this->pass(); $this->pass();
} }
} }
public function testGetConnectionPdoLikeDSN() { public function testGetConnectionPdoLikeDSN() {
$conn = Doctrine_DB2::getConnection('mysql:host=localhost;dbname=test', 'root', 'password'); $dbh = Doctrine_DB2::getConnection('mysql:host=localhost;dbname=test', 'root', 'password');
$this->assertEqual($conn->getDSN(), 'mysql:host=localhost;dbname=test'); $this->assertEqual($dbh->getDSN(), 'mysql:host=localhost;dbname=test');
$this->assertEqual($conn->getUsername(), 'root'); $this->assertEqual($dbh->getUsername(), 'root');
$this->assertEqual($conn->getPassword(), 'password'); $this->assertEqual($dbh->getPassword(), 'password');
$conn = Doctrine_DB2::getConnection('sqlite::memory:'); $dbh = Doctrine_DB2::getConnection('sqlite::memory:');
$this->assertEqual($conn->getDSN(), 'sqlite::memory:'); $this->assertEqual($dbh->getDSN(), 'sqlite::memory:');
$this->assertEqual($conn->getUsername(), null); $this->assertEqual($dbh->getUsername(), null);
$this->assertEqual($conn->getPassword(), null); $this->assertEqual($dbh->getPassword(), null);
} }
public function testDriverName() {
}
public function testGetConnectionWithPearLikeDSN() { public function testGetConnectionWithPearLikeDSN() {
$conn = Doctrine_DB2::getConnection('mysql://zYne:password@localhost/test'); $dbh = Doctrine_DB2::getConnection('mysql://zYne:password@localhost/test');
$this->assertEqual($conn->getDSN(), 'mysql:host=localhost;dbname=test'); $this->assertEqual($dbh->getDSN(), 'mysql:host=localhost;dbname=test');
$this->assertEqual($conn->getUsername(), 'zYne'); $this->assertEqual($dbh->getUsername(), 'zYne');
$this->assertEqual($conn->getPassword(), 'password'); $this->assertEqual($dbh->getPassword(), 'password');
$conn = Doctrine_DB2::getConnection('sqlite://:memory:');
$this->assertEqual($conn->getDSN(), 'sqlite::memory:'); $dbh = Doctrine_DB2::getConnection('sqlite://:memory:');
$this->assertEqual($conn->getUsername(), null);
$this->assertEqual($conn->getPassword(), null); $this->assertEqual($dbh->getDSN(), 'sqlite::memory:');
$this->assertEqual($dbh->getUsername(), null);
$this->assertEqual($dbh->getPassword(), null);
} }
} }