Commit 113ac3b9 authored by zYne's avatar zYne

1. Merging two event listener APIs

2. Merging Doctrine_Db functionality into Doctrine_Connection

3. Merging Doctrine_Db modules to Doctrine_Connection plugins
parent bef66f5b
......@@ -209,7 +209,7 @@ abstract class Doctrine_Configurable
if ( ! ($listener instanceof Doctrine_EventListener_Interface)
&& ! ($listener instanceof Doctrine_Overloadable)
) {
throw new Doctrine_Exception("Couldn't set eventlistener. EventListeners should implement either Doctrine_EventListener_Interface or Doctrine_Overloadable");
throw new Doctrine_EventListener_Exception("Couldn't set eventlistener. EventListeners should implement either Doctrine_EventListener_Interface or Doctrine_Overloadable");
}
$this->attributes[Doctrine::ATTR_LISTENER] = $listener;
......
......@@ -157,6 +157,7 @@ abstract class Doctrine_Connection extends Doctrine_Configurable implements Coun
'Sqlite',
'Firebird'
);
protected $_count;
/**
* the constructor
......@@ -166,40 +167,26 @@ abstract class Doctrine_Connection extends Doctrine_Configurable implements Coun
*/
public function __construct(Doctrine_Manager $manager, $adapter, $user = null, $pass = null)
{
if (is_object($adapter)) {
if ( ! ($adapter instanceof PDO) && ! in_array('Doctrine_Adapter_Interface', class_implements($adapter))) {
if ( ! is_string($adapter)) {
throw new Doctrine_Connection_Exception('Data source name should be a string, ' . get_class($adapter) . ' given.');
throw new Doctrine_Connection_Exception('First argument should be an instance of PDO or implement Doctrine_Adapter_Interface');
}
$dsn = $adapter;
// check if dsn is PEAR-like or not
if ( ! isset($user) || strpos($dsn, '://')) {
$a = self::parseDSN($dsn);
extract($a);
} else {
$e = explode(':', $dsn);
if($e[0] == 'uri') {
$e[0] = 'odbc';
}
$this->pendingAttributes[Doctrine::ATTR_DRIVER_NAME] = $e[0];
}
$this->options['dsn'] = $dsn;
$this->options['username'] = $user;
$this->options['password'] = $pass;
} else {
$this->dbh = $adapter;
$this->isConnected = true;
} elseif(is_array($adapter)) {
$this->pendingAttributes[Doctrine::ATTR_DRIVER_NAME] = $adapter['scheme'];
$this->options['dsn'] = $adapter['dsn'];
$this->options['username'] = $adapter['user'];
$this->options['password'] = $adapter['pass'];
}
$this->setParent($manager);
$this->dbh->setAttribute(PDO::ATTR_CASE, PDO::CASE_NATURAL);
$this->dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$this->setAttribute(Doctrine::ATTR_CASE, Doctrine::CASE_NATURAL);
$this->setAttribute(Doctrine::ATTR_ERRMODE, Doctrine::ERRMODE_EXCEPTION);
$this->getAttribute(Doctrine::ATTR_LISTENER)->onOpen($this);
}
......@@ -263,84 +250,6 @@ abstract class Doctrine_Connection extends Doctrine_Configurable implements Coun
}
return $this;
}
/**
* parseDSN
*
* @param string $dsn
* @return array Parsed contents of DSN
*/
public function parseDSN($dsn)
{
// silence any warnings
$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_Connection_Exception('Empty data source name');
}
$drivers = self::getAvailableDrivers();
$parts['scheme'] = self::driverName($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 'dblib':
case 'pgsql':
case 'odbc':
case 'mock':
case 'oracle':
if ( ! isset($parts['path']) || $parts['path'] == '/') {
throw new Doctrine_Connection_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_Connection_Exception('No hostname set in data source name');
}
if (isset(self::$driverMap[$parts['scheme']])) {
$parts['scheme'] = self::$driverMap[$parts['scheme']];
}
$parts['dsn'] = $parts['scheme'] . ':host='
. $parts['host'] . ';dbname='
. $parts['database'];
if (isset($parts['port'])) {
// append port to dsn if supplied
$parts['dsn'] .= ';port=' . $parts['port'];
}
break;
default:
throw new Doctrine_Connection_Exception('Unknown driver '.$parts['scheme']);
}
$this->pendingAttributes[PDO::ATTR_DRIVER_NAME] = $parts['scheme'];
return $parts;
}
/**
* getName
* returns the name of this driver
......@@ -420,7 +329,9 @@ abstract class Doctrine_Connection extends Doctrine_Configurable implements Coun
return false;
}
$this->getListener()->onPreConnect($this);
$event = new Doctrine_Event($this, Doctrine_Event::CONNECT);
$this->getListener()->onPreConnect($event);
$e = explode(':', $this->options['dsn']);
$found = false;
......@@ -454,9 +365,14 @@ abstract class Doctrine_Connection extends Doctrine_Configurable implements Coun
$this->isConnected = true;
$this->getListener()->onConnect($this);
$this->getListener()->onConnect($event);
return true;
}
public function incrementQueryCount()
{
$this->_count++;
}
/**
* converts given driver name
*
......@@ -751,6 +667,25 @@ abstract class Doctrine_Connection extends Doctrine_Configurable implements Coun
return $parser->query($query, $params);
}
/**
* prepare
*
* @param string $statement
*/
public function prepare($statement)
{
$this->connect();
$event = new Doctrine_Event($this, Doctrine_Db_Event::PREPARE, $statement);
$this->getAttribute(Doctrine::ATTR_LISTENER)->onPrePrepare($event);
$stmt = $this->dbh->prepare($statement);
$this->getAttribute(Doctrine::ATTR_LISTENER)->onPrepare($event);
return new Doctrine_Connection_Statement($this, $stmt);
}
/**
* query
* queries the database using Doctrine Query Language and returns
......@@ -825,7 +760,17 @@ abstract class Doctrine_Connection extends Doctrine_Configurable implements Coun
$stmt->execute($params);
return $stmt;
} else {
return $this->dbh->query($query);
$event = new Doctrine_Event($this, Doctrine_EVENT::QUERY, $query, $params);
$this->getAttribute(Doctrine::ATTR_LISTENER)->onPreQuery($event);
$stmt = $this->dbh->query($query);
$this->getAttribute(Doctrine::ATTR_LISTENER)->onQuery($event);
$this->_count++;
return $stmt;
}
} catch(Doctrine_Adapter_Exception $e) {
} catch(PDOException $e) { }
......@@ -844,11 +789,22 @@ abstract class Doctrine_Connection extends Doctrine_Configurable implements Coun
try {
if ( ! empty($params)) {
$stmt = $this->dbh->prepare($query);
$stmt = $this->prepare($query);
$stmt->execute($params);
return $stmt->rowCount();
} else {
return $this->dbh->exec($query);
$event = new Doctrine_Event($this, Doctrine_EVENT::EXEC, $query, $params);
$this->getAttribute(Doctrine::ATTR_LISTENER)->onPreExec($event);
$count = $this->dbh->exec($query);
$this->getAttribute(Doctrine::ATTR_LISTENER)->onExec($event);
$this->_count++;
return $count;
}
} catch(Doctrine_Adapter_Exception $e) {
} catch(PDOException $e) { }
......@@ -939,7 +895,7 @@ abstract class Doctrine_Connection extends Doctrine_Configurable implements Coun
*/
public function count()
{
return count($this->tables);
return $this->_count;
}
/**
* addTable
......
......@@ -45,8 +45,7 @@ class Doctrine_Connection_Mysql extends Doctrine_Connection_Common
*/
public function __construct(Doctrine_Manager $manager, $adapter)
{
$adapter->setAttribute(PDO::ATTR_EMULATE_PREPARES, true);
$this->setAttribute(PDO::ATTR_EMULATE_PREPARES, true);
$this->setAttribute(Doctrine::ATTR_DEFAULT_TABLE_TYPE, 'INNODB');
$this->supported = array(
......
......@@ -74,36 +74,30 @@ class Doctrine_Connection_Sqlite extends Doctrine_Connection_Common
$this->options['server_version'] = '';
*/
parent::__construct($manager, $adapter);
$this->initFunctions();
}
/**
* getDatabaseFile
* initializes database functions missing in sqlite
*
* @param string $name the name of the database
* @return string
* @see Doctrine_Expression
* @return void
*/
public function getDatabaseFile($name)
public function connect()
{
return $name . '.db';
parent::connect();
$this->dbh->sqliteCreateFunction('md5', array('Doctrine_Expression_Sqlite', 'md5Impl'), 1);
$this->dbh->sqliteCreateFunction('mod', array('Doctrine_Expression_Sqlite', 'modImpl'), 2);
$this->dbh->sqliteCreateFunction('concat', array('Doctrine_Expression_Sqlite', 'concatImpl'));
$this->dbh->sqliteCreateFunction('now', 'time', 0);
}
/**
* initializes database functions missing in sqlite
* getDatabaseFile
*
* @see Doctrine_Expression
* @return void
* @param string $name the name of the database
* @return string
*/
public function initFunctions()
public function getDatabaseFile($name)
{
if ($this->dbh instanceof Doctrine_Db) {
$this->dbh->connect();
$adapter = $this->dbh->getDbh();
} else {
$adapter = $this->dbh;
}
$adapter->sqliteCreateFunction('md5', array('Doctrine_Expression_Sqlite', 'md5Impl'), 1);
$adapter->sqliteCreateFunction('mod', array('Doctrine_Expression_Sqlite', 'modImpl'), 2);
$adapter->sqliteCreateFunction('concat', array('Doctrine_Expression_Sqlite', 'concatImpl'));
$adapter->sqliteCreateFunction('now', 'time', 0);
return $name . '.db';
}
}
......@@ -65,7 +65,7 @@ class Doctrine_Connection_Statement implements Doctrine_Adapter_Statement_Interf
*/
public function getConnection()
{
return $this->_adapter;
return $this->_conn;
}
public function getStatement()
{
......@@ -215,14 +215,14 @@ class Doctrine_Connection_Statement implements Doctrine_Adapter_Statement_Interf
{
$event = new Doctrine_Event($this, Doctrine_Event::EXECUTE, $this->_stmt->queryString, $params);
// print $this->_stmt->queryString . print_r($params, true) . "<br>";
$skip = $this->_adapter->getListener()->onPreExecute($event);
$skip = $this->_conn->getListener()->onPreExecute($event);
if ( ! $skip) {
$this->_stmt->execute($params);
$this->_adapter->incrementQueryCount();
$this->_conn->incrementQueryCount();
}
$this->_adapter->getListener()->onExecute($event);
$this->_conn->getListener()->onExecute($event);
return $this;
}
......@@ -260,13 +260,13 @@ class Doctrine_Connection_Statement implements Doctrine_Adapter_Statement_Interf
$event = new Doctrine_Db_Event($this, Doctrine_Db_Event::FETCHALL, $this->_stmt->queryString,
array($fetchStyle, $cursorOrientation, $cursorOffset));
$data = $this->_adapter->getListener()->onPreFetch($event);
$data = $this->_conn->getListener()->onPreFetch($event);
if ($data === null) {
$data = $this->_stmt->fetch($fetchStyle, $cursorOrientation, $cursorOffset);
}
$this->_adapter->getListener()->onFetch($event);
$this->_conn->getListener()->onFetch($event);
return $data;
}
......@@ -286,7 +286,7 @@ class Doctrine_Connection_Statement implements Doctrine_Adapter_Statement_Interf
{
$event = new Doctrine_Db_Event($this, Doctrine_Db_Event::FETCHALL, $this->_stmt->queryString, array($fetchStyle, $columnIndex));
$data = $this->_adapter->getListener()->onPreFetchAll($event);
$data = $this->_conn->getListener()->onPreFetchAll($event);
if ($data === null) {
if ($columnIndex !== null) {
......@@ -296,7 +296,7 @@ class Doctrine_Connection_Statement implements Doctrine_Adapter_Statement_Interf
}
}
$this->_adapter->getListener()->onFetchAll($event);
$this->_conn->getListener()->onFetchAll($event);
return $data;
}
......
......@@ -186,6 +186,7 @@ class Doctrine_Connection_UnitOfWork extends Doctrine_Connection_Module
return true;
}
/**
* saveRelated
* saves all related records to $record
......
......@@ -191,5 +191,4 @@ class Doctrine_Db_Event
}
return ($this->endedMicrotime - $this->startedMicrotime);
}
}
......@@ -34,7 +34,6 @@ Doctrine::autoload('Doctrine_EventListener_Interface');
*/
class Doctrine_EventListener implements Doctrine_EventListener_Interface
{
public function onLoad(Doctrine_Record $record)
{ }
public function onPreLoad(Doctrine_Record $record)
......@@ -76,36 +75,69 @@ class Doctrine_EventListener implements Doctrine_EventListener_Interface
public function onPreEvict(Doctrine_Record $record)
{ }
public function onClose(Doctrine_Connection $connection)
public function onClose(Doctrine_Event $event)
{ }
public function onPreClose(Doctrine_Connection $connection)
public function onPreClose(Doctrine_Event $event)
{ }
public function onCollectionDelete(Doctrine_Collection $collection)
{ }
public function onPreCollectionDelete(Doctrine_Collection $collection)
{ }
public function onOpen(Doctrine_Connection $connection)
{ }
public function onConnect(Doctrine_Connection $connection)
public function onTransactionCommit(Doctrine_Event $event)
{ }
public function onPreConnect(Doctrine_Connection $connection)
public function onPreTransactionCommit(Doctrine_Event $event)
{ }
public function onTransactionCommit(Doctrine_Connection $connection)
public function onTransactionRollback(Doctrine_Event $event)
{ }
public function onPreTransactionCommit(Doctrine_Connection $connection)
public function onPreTransactionRollback(Doctrine_Event $event)
{ }
public function onTransactionRollback(Doctrine_Connection $connection)
public function onTransactionBegin(Doctrine_Event $event)
{ }
public function onPreTransactionRollback(Doctrine_Connection $connection)
public function onPreTransactionBegin(Doctrine_Event $event)
{ }
public function onTransactionBegin(Doctrine_Connection $connection)
public function onConnect(Doctrine_Event $event)
{ }
public function onPreTransactionBegin(Doctrine_Connection $connection)
public function onPreConnect(Doctrine_Event $event)
{ }
public function onPreQuery(Doctrine_Event $event)
{ }
public function onQuery(Doctrine_Event $event)
{ }
public function onCollectionDelete(Doctrine_Collection $collection)
public function onPrePrepare(Doctrine_Event $event)
{ }
public function onPreCollectionDelete(Doctrine_Collection $collection)
public function onPrepare(Doctrine_Event $event)
{ }
public function onPreExec(Doctrine_Event $event)
{ }
public function onExec(Doctrine_Event $event)
{ }
public function onPreFetch(Doctrine_Event $event)
{ }
public function onFetch(Doctrine_Event $event)
{ }
public function onPreFetchAll(Doctrine_Event $event)
{ }
public function onFetchAll(Doctrine_Event $event)
{ }
public function onPreExecute(Doctrine_Event $event)
{ }
public function onExecute(Doctrine_Event $event)
{ }
}
......@@ -41,13 +41,24 @@ class Doctrine_EventListener_Chain extends Doctrine_Access implements Doctrine_E
private $listeners = array();
/**
* add
* adds a listener to the chain of listeners
*
* @param Doctrine_EventListener $listener
* @param object $listener
* @param string $name
* @return void
*/
public function add(Doctrine_EventListener $listener)
public function add($listener, $name = null)
{
if ( ! ($listener instanceof Doctrine_EventListener_Interface) &&
! ($listener instanceof Doctrine_Overloadable)) {
throw new Doctrine_EventListener_Exception("Couldn't add eventlistener. EventListeners should implement either Doctrine_EventListener_Interface or Doctrine_Overloadable");
}
if ($name === null) {
$this->listeners[] = $listener;
} else {
$this->listeners[$name] = $listener;
}
}
/**
* returns a Doctrine_EvenListener on success
......@@ -206,38 +217,6 @@ class Doctrine_EventListener_Chain extends Doctrine_Access implements Doctrine_E
$listener->onPreSave($record);
}
}
/**
* onGetProperty
* an event invoked when a property of Doctrine_Record is retrieved
*
* @param Doctrine_Record $record
* @param string $property
* @param mixed $value
* @return mixed
*/
public function onGetProperty(Doctrine_Record $record, $property, $value)
{
foreach ($this->listeners as $listener) {
$value = $listener->onGetProperty($record, $property, $value);
}
return $value;
}
/**
* onSetProperty
* an event invoked when a property of Doctrine_Record is being set
*
* @param Doctrine_Record $record
* @param string $property
* @param mixed $value
* @return mixed
*/
public function onSetProperty(Doctrine_Record $record, $property, $value)
{
foreach ($this->listeners as $listener) {
$value = $listener->onSetProperty($record, $property, $value);
}
return $value;
}
/**
* onInsert
* an event invoked after Doctrine_Record is inserted into database
......@@ -320,26 +299,26 @@ class Doctrine_EventListener_Chain extends Doctrine_Access implements Doctrine_E
* onClose
* an event invoked after Doctrine_Connection is closed
*
* @param Doctrine_Connection $connection
* @param Doctrine_Event $event
* @return void
*/
public function onClose(Doctrine_Connection $connection)
public function onClose(Doctrine_Event $event)
{
foreach ($this->listeners as $listener) {
$listener->onClose($connection);
$listener->onClose($event);
}
}
/**
* onClose
* an event invoked before Doctrine_Connection is closed
*
* @param Doctrine_Connection $connection
* @param Doctrine_Event $event
* @return void
*/
public function onPreClose(Doctrine_Connection $connection)
public function onPreClose(Doctrine_Event $event)
{
foreach ($this->listeners as $listener) {
$listener->onPreClose($connection);
$listener->onPreClose($event);
}
}
/**
......@@ -359,78 +338,78 @@ class Doctrine_EventListener_Chain extends Doctrine_Access implements Doctrine_E
* onTransactionCommit
* an event invoked after a Doctrine_Connection transaction is committed
*
* @param Doctrine_Connection $connection
* @param Doctrine_Event $event
* @return void
*/
public function onTransactionCommit(Doctrine_Connection $connection)
public function onTransactionCommit(Doctrine_Event $event)
{
foreach ($this->listeners as $listener) {
$listener->onTransactionCommit($connection);
$listener->onTransactionCommit($event);
}
}
/**
* onPreTransactionCommit
* an event invoked before a Doctrine_Connection transaction is committed
*
* @param Doctrine_Connection $connection
* @param Doctrine_Event $event
* @return void
*/
public function onPreTransactionCommit(Doctrine_Connection $connection)
public function onPreTransactionCommit(Doctrine_Event $event)
{
foreach ($this->listeners as $listener) {
$listener->onPreTransactionCommit($connection);
$listener->onPreTransactionCommit($event);
}
}
/**
* onTransactionRollback
* an event invoked after a Doctrine_Connection transaction is being rolled back
*
* @param Doctrine_Connection $connection
* @param Doctrine_Event $event
* @return void
*/
public function onTransactionRollback(Doctrine_Connection $connection)
public function onTransactionRollback(Doctrine_Event $event)
{
foreach ($this->listeners as $listener) {
$listener->onTransactionRollback($connection);
$listener->onTransactionRollback($event);
}
}
/**
* onPreTransactionRollback
* an event invoked before a Doctrine_Connection transaction is being rolled back
*
* @param Doctrine_Connection $connection
* @param Doctrine_Event $event
* @return void
*/
public function onPreTransactionRollback(Doctrine_Connection $connection)
public function onPreTransactionRollback(Doctrine_Event $event)
{
foreach ($this->listeners as $listener) {
$listener->onPreTransactionRollback($connection);
$listener->onPreTransactionRollback($event);
}
}
/**
* onTransactionBegin
* an event invoked after a Doctrine_Connection transaction has been started
*
* @param Doctrine_Connection $connection
* @param Doctrine_Event $event
* @return void
*/
public function onTransactionBegin(Doctrine_Connection $connection)
public function onTransactionBegin(Doctrine_Event $event)
{
foreach ($this->listeners as $listener) {
$listener->onTransactionBegin($connection);
$listener->onTransactionBegin($event);
}
}
/**
* onTransactionBegin
* an event invoked before a Doctrine_Connection transaction is being started
*
* @param Doctrine_Connection $connection
* @param Doctrine_Event $event
* @return void
*/
public function onPreTransactionBegin(Doctrine_Connection $connection)
public function onPreTransactionBegin(Doctrine_Event $event)
{
foreach ($this->listeners as $listener) {
$listener->onPreTransactionBegin($connection);
$listener->onPreTransactionBegin($event);
}
}
/**
......@@ -459,4 +438,95 @@ class Doctrine_EventListener_Chain extends Doctrine_Access implements Doctrine_E
$listener->onPreCollectionDelete($collection);
}
}
public function onConnect(Doctrine_Event $event)
{
foreach ($this->listeners as $listener) {
$listener->onConnect($event);
}
}
public function onPreConnect(Doctrine_Event $event)
{
foreach ($this->listeners as $listener) {
$listener->onPreConnect($event);
}
}
public function onPreQuery(Doctrine_Event $event)
{
foreach ($this->listeners as $listener) {
$listener->onPreQuery($event);
}
}
public function onQuery(Doctrine_Event $event)
{
foreach ($this->listeners as $listener) {
$listener->onQuery($event);
}
}
public function onPrePrepare(Doctrine_Event $event)
{
foreach ($this->listeners as $listener) {
$listener->onPrePrepare($event);
}
}
public function onPrepare(Doctrine_Event $event)
{
foreach ($this->listeners as $listener) {
$listener->onPrepare($event);
}
}
public function onPreExec(Doctrine_Event $event)
{
foreach ($this->listeners as $listener) {
$listener->onPreExec($event);
}
}
public function onExec(Doctrine_Event $event)
{
foreach ($this->listeners as $listener) {
$listener->onExec($event);
}
}
public function onPreFetch(Doctrine_Event $event)
{
foreach ($this->listeners as $listener) {
$listener->onPreFetch($event);
}
}
public function onFetch(Doctrine_Event $event)
{
foreach ($this->listeners as $listener) {
$listener->onFetch($event);
}
}
public function onPreFetchAll(Doctrine_Event $event)
{
foreach ($this->listeners as $listener) {
$listener->onPreFetchAll($event);
}
}
public function onFetchAll(Doctrine_Event $event)
{
foreach ($this->listeners as $listener) {
$listener->onFetchAll($event);
}
}
public function onPreExecute(Doctrine_Event $event)
{
foreach ($this->listeners as $listener) {
$listener->onPreExecute($event);
}
}
public function onExecute(Doctrine_Event $event)
{
foreach ($this->listeners as $listener) {
$listener->onExecute($event);
}
}
}
......@@ -18,22 +18,28 @@
* and is licensed under the LGPL. For more information, see
* <http://www.phpdoctrine.com>.
*/
Doctrine::autoload('Doctrine_EventListener_Interface');
/**
* Doctrine_EventListener_Interface
* Doctrine_EventListener all event listeners extend this base class
* the empty methods allow child classes to only implement the methods they need to implement
*
* interface for event listening, forces all classes that extend
* Doctrine_EventListener to have the same method arguments as their parent
*
* @author Konsta Vesterinen
* @package Doctrine ORM
* @url www.phpdoctrine.com
* @license LGPL
* @author Konsta Vesterinen <kvesteri@cc.hut.fi>
* @package Doctrine
* @license http://www.opensource.org/licenses/lgpl-license.php LGPL
* @category Object Relational Mapping
* @link www.phpdoctrine.com
* @since 1.0
* @version $Revision$
*/
interface Doctrine_EventListener_Interface {
interface Doctrine_EventListener_Interface
{
public function onLoad(Doctrine_Record $record);
public function onPreLoad(Doctrine_Record $record);
public function onSleep(Doctrine_Record $record);
public function onWakeUp(Doctrine_Record $record);
public function onUpdate(Doctrine_Record $record);
public function onPreUpdate(Doctrine_Record $record);
......@@ -52,24 +58,43 @@ interface Doctrine_EventListener_Interface {
public function onEvict(Doctrine_Record $record);
public function onPreEvict(Doctrine_Record $record);
public function onSleep(Doctrine_Record $record);
public function onWakeUp(Doctrine_Record $record);
public function onClose(Doctrine_Event $event);
public function onPreClose(Doctrine_Event $event);
public function onClose(Doctrine_Connection $connection);
public function onPreClose(Doctrine_Connection $connection);
public function onCollectionDelete(Doctrine_Collection $collection);
public function onPreCollectionDelete(Doctrine_Collection $collection);
public function onOpen(Doctrine_Connection $connection);
public function onTransactionCommit(Doctrine_Connection $connection);
public function onPreTransactionCommit(Doctrine_Connection $connection);
public function onTransactionRollback(Doctrine_Connection $connection);
public function onPreTransactionRollback(Doctrine_Connection $connection);
public function onTransactionBegin(Doctrine_Connection $connection);
public function onPreTransactionBegin(Doctrine_Connection $connection);
public function onConnect(Doctrine_Event $event);
public function onPreConnect(Doctrine_Event $event);
public function onCollectionDelete(Doctrine_Collection $collection);
public function onPreCollectionDelete(Doctrine_Collection $collection);
public function onTransactionCommit(Doctrine_Event $event);
public function onPreTransactionCommit(Doctrine_Event $event);
public function onTransactionRollback(Doctrine_Event $event);
public function onPreTransactionRollback(Doctrine_Event $event);
public function onTransactionBegin(Doctrine_Event $event);
public function onPreTransactionBegin(Doctrine_Event $event);
public function onPreQuery(Doctrine_Event $event);
public function onQuery(Doctrine_Event $event);
public function onPrePrepare(Doctrine_Event $event);
public function onPrepare(Doctrine_Event $event);
public function onPreExec(Doctrine_Event $event);
public function onExec(Doctrine_Event $event);
public function onPreFetch(Doctrine_Event $event);
public function onFetch(Doctrine_Event $event);
public function onPreFetchAll(Doctrine_Event $event);
public function onFetchAll(Doctrine_Event $event);
public function onPreExecute(Doctrine_Event $event);
public function onExecute(Doctrine_Event $event);
}
......@@ -58,16 +58,10 @@ class Doctrine_Manager extends Doctrine_Configurable implements Countable, Itera
*/
protected $_null;
/**
* @var array $driverMap
* @var array $_integrityActions an array containing all registered integrity actions
* used when emulating these actions
*/
protected $_driverMap = array('oracle' => 'oci8',
'postgres' => 'pgsql',
'oci' => 'oci8',
'sqlite2' => 'sqlite',
'sqlite3' => 'sqlite');
protected $_integrityActionsMap = array();
protected $_integrityActions = array();
/**
* constructor
*
......@@ -211,6 +205,7 @@ class Doctrine_Manager extends Doctrine_Configurable implements Countable, Itera
*/
public function openConnection($adapter, $name = null, $setCurrent = true)
{
if (is_object($adapter)) {
if ( ! ($adapter instanceof PDO) && ! in_array('Doctrine_Adapter_Interface', class_implements($adapter))) {
throw new Doctrine_Manager_Exception("First argument should be an instance of PDO or implement Doctrine_Adapter_Interface");
}
......@@ -219,6 +214,32 @@ class Doctrine_Manager extends Doctrine_Configurable implements Countable, Itera
$adapter->setName($name);
}
$driverName = $adapter->getAttribute(Doctrine::ATTR_DRIVER_NAME);
} elseif (is_array($adapter)) {
if ( ! isset($adapter[0])) {
throw new Doctrine_Manager_Exception('Empty data source name given.');
}
$e = explode(':', $adapter[0]);
if($e[0] == 'uri') {
$e[0] = 'odbc';
}
$parts['dsn'] = $adapter[0];
$parts['scheme'] = $e[0];
$parts['user'] = (isset($adapter[1])) ? $adapter[1] : null;
$parts['pass'] = (isset($adapter[2])) ? $adapter[2] : null;
$driverName = $e[0];
$adapter = $parts;
} else {
$parts = $this->parseDsn($adapter);
$driverName = $parts['scheme'];
$adapter = $parts;
}
// initialize the default attributes
$this->setDefaultAttributes();
......@@ -232,42 +253,103 @@ class Doctrine_Manager extends Doctrine_Configurable implements Countable, Itera
$this->_index++;
}
switch ($adapter->getAttribute(Doctrine::ATTR_DRIVER_NAME)) {
case 'mysql':
$this->_connections[$name] = new Doctrine_Connection_Mysql($this, $adapter);
break;
$drivers = array('mysql' => 'Doctrine_Connection_Mysql',
'sqlite' => 'Doctrine_Connection_Sqlite',
'pgsql' => 'Doctrine_Connection_Pgsql',
'oci' => 'Doctrine_Connection_Oracle',
'oci8' => 'Doctrine_Connection_Oracle',
'oracle' => 'Doctrine_Connection_Oracle',
'mssql' => 'Doctrine_Connection_Mssql',
'dblib' => 'Doctrine_Connection_Mssql',
'firebird' => 'Doctrine_Connection_Firebird',
'informix' => 'Doctrine_Connection_Informix',
'mock' => 'Doctrine_Connection_Mock');
if ( ! isset($drivers[$driverName])) {
throw new Doctrine_Manager_Exception('Unknown driver ' . $driverName);
}
$className = $drivers[$driverName];
$conn = new $className($this, $adapter);
$this->_connections[$name] = $conn;
if ($setCurrent) {
$this->_currIndex = $name;
}
return $this->_connections[$name];
}
/**
* parseDsn
*
* @param string $dsn
* @return array Parsed contents of DSN
*/
public function parseDsn($dsn)
{
// silence any warnings
$parts = @parse_url($dsn);
$names = array('dsn', '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_Manager_Exception('Empty data source name');
}
switch ($parts['scheme']) {
case 'sqlite':
$this->_connections[$name] = new Doctrine_Connection_Sqlite($this, $adapter);
break;
case 'pgsql':
$this->_connections[$name] = new Doctrine_Connection_Pgsql($this, $adapter);
case 'sqlite2':
case 'sqlite3':
if (isset($parts['host']) && $parts['host'] == ':memory') {
$parts['database'] = ':memory:';
$parts['dsn'] = 'sqlite::memory:';
}
break;
case 'oci':
case 'mysql':
case 'informix':
case 'oci8':
case 'oracle':
$this->_connections[$name] = new Doctrine_Connection_Oracle($this, $adapter);
break;
case 'oci':
case 'mssql':
case 'dblib':
$this->_connections[$name] = new Doctrine_Connection_Mssql($this, $adapter);
break;
case 'firebird':
$this->_connections[$name] = new Doctrine_Connection_Firebird($this, $adapter);
break;
case 'informix':
$this->_connections[$name] = new Doctrine_Connection_Informix($this, $adapter);
break;
case 'dblib':
case 'pgsql':
case 'odbc':
case 'mock':
$this->_connections[$name] = new Doctrine_Connection_Mock($this, $adapter);
case 'oracle':
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_Manager_Exception('No hostname set in data source name');
}
if (isset(self::$driverMap[$parts['scheme']])) {
$parts['scheme'] = self::$driverMap[$parts['scheme']];
}
$parts['dsn'] = $parts['scheme'] . ':host='
. $parts['host'] . ';dbname='
. $parts['database'];
if (isset($parts['port'])) {
// append port to dsn if supplied
$parts['dsn'] .= ';port=' . $parts['port'];
}
break;
default:
throw new Doctrine_Manager_Exception('Unknown connection driver '. $adapter->getAttribute(Doctrine::ATTR_DRIVER_NAME));
};
if ($setCurrent) {
$this->_currIndex = $name;
throw new Doctrine_Db_Exception('Unknown driver '.$parts['scheme']);
}
return $this->_connections[$name];
return $parts;
}
/**
* getConnection
......
......@@ -52,9 +52,10 @@ class Doctrine_Query_Filter implements Doctrine_Query_Filter_Interface
* to hook into the query building procedure, doing any custom / specialized
* post query procedures (for example logging) that are neccessary.
*
* @param Doctrine_Query $query
* @return void
*/
public function postQuery(Doctrine_Query $query)
public function postQuery(Doctrine_Query $query, $sql)
{
}
......
......@@ -270,7 +270,7 @@ abstract class Doctrine_Record extends Doctrine_Access implements Countable, Ite
return $this->_errorStack->count() == 0 ? true : false;
}
/**
* Emtpy template method to provide concrete Record classes with the possibility
* Empty template method to provide concrete Record classes with the possibility
* to hook into the validation procedure, doing any custom / specialized
* validations that are neccessary.
*/
......
......@@ -151,7 +151,7 @@ class Doctrine_Record_Filter extends Doctrine_Object
$data[$name] = $this->_record->getTable()->enumValue($name, $tmp[$name]);
break;
case 'boolean':
$data[$name] = (boolean)$tmp[$name];
$data[$name] = (boolean) $tmp[$name];
break;
default:
$data[$name] = $tmp[$name];
......
......@@ -222,7 +222,9 @@ class Doctrine_Transaction extends Doctrine_Connection_Module
$this->createSavePoint($savepoint);
} else {
if ($this->transactionLevel == 0) {
$this->conn->getAttribute(Doctrine::ATTR_LISTENER)->onPreTransactionBegin($this->conn);
$event = new Doctrine_Event($this, Doctrine_Event::BEGIN);
$this->conn->getAttribute(Doctrine::ATTR_LISTENER)->onPreTransactionBegin($event);
try {
$this->conn->getDbh()->beginTransaction();
......@@ -230,7 +232,7 @@ class Doctrine_Transaction extends Doctrine_Connection_Module
throw new Doctrine_Transaction_Exception($e->getMessage());
}
$this->conn->getAttribute(Doctrine::ATTR_LISTENER)->onTransactionBegin($this->conn);
$this->conn->getAttribute(Doctrine::ATTR_LISTENER)->onTransactionBegin($event);
}
}
......@@ -265,7 +267,8 @@ class Doctrine_Transaction extends Doctrine_Connection_Module
$this->releaseSavePoint($savepoint);
} else {
if ($this->transactionLevel == 1) {
$this->conn->getAttribute(Doctrine::ATTR_LISTENER)->onPreTransactionCommit($this->conn);
$event = new Doctrine_Event($this, Doctrine_Event::COMMIT);
$this->conn->getAttribute(Doctrine::ATTR_LISTENER)->onPreTransactionCommit($event);
try {
$this->bulkDelete();
......@@ -294,7 +297,7 @@ class Doctrine_Transaction extends Doctrine_Connection_Module
//$this->conn->unitOfWork->reset();
$this->conn->getAttribute(Doctrine::ATTR_LISTENER)->onTransactionCommit($this->conn);
$this->conn->getAttribute(Doctrine::ATTR_LISTENER)->onTransactionCommit($event);
}
}
......@@ -324,7 +327,9 @@ class Doctrine_Transaction extends Doctrine_Connection_Module
return false;
}
$this->conn->getAttribute(Doctrine::ATTR_LISTENER)->onPreTransactionRollback($this->conn);
$event = new Doctrine_Event($this, Doctrine_Event::ROLLBACK);
$this->conn->getAttribute(Doctrine::ATTR_LISTENER)->onPreTransactionRollback($event);
if ( ! is_null($savepoint)) {
$this->transactionLevel = $this->removeSavePoints($savepoint);
......@@ -341,7 +346,7 @@ class Doctrine_Transaction extends Doctrine_Connection_Module
throw new Doctrine_Transaction_Exception($e->getMessage());
}
}
$this->conn->getAttribute(Doctrine::ATTR_LISTENER)->onTransactionRollback($this->conn);
$this->conn->getAttribute(Doctrine::ATTR_LISTENER)->onTransactionRollback($event);
return true;
}
......
......@@ -37,7 +37,8 @@ class Doctrine_Connection_Profiler_TestCase extends Doctrine_UnitTestCase
{}
public function prepareData()
{}
public function setUp()
{}
public function testQuery()
{
$this->conn = Doctrine_Manager::getInstance()->openConnection(array('sqlite::memory:'));
......@@ -55,6 +56,7 @@ class Doctrine_Connection_Profiler_TestCase extends Doctrine_UnitTestCase
$this->assertEqual($this->conn->count(), 1);
}
/**
public function testPrepareAndExecute()
{
......@@ -75,6 +77,7 @@ class Doctrine_Connection_Profiler_TestCase extends Doctrine_UnitTestCase
$this->assertEqual($this->conn->count(), 2);
}
*/
public function testMultiplePrepareAndExecute()
{
......@@ -89,7 +92,7 @@ class Doctrine_Connection_Profiler_TestCase extends Doctrine_UnitTestCase
$this->assertTrue($this->profiler->lastEvent()->hasEnded());
$this->assertEqual($this->profiler->lastEvent()->getCode(), Doctrine_Db_Event::PREPARE);
$this->assertTrue(is_numeric($this->profiler->lastEvent()->getElapsedSecs()));
/** TODO: strange errors here
$stmt->execute(array(1));
$stmt2->execute(array(1));
......@@ -99,6 +102,7 @@ class Doctrine_Connection_Profiler_TestCase extends Doctrine_UnitTestCase
$this->assertTrue(is_numeric($this->profiler->lastEvent()->getElapsedSecs()));
$this->assertEqual($this->conn->count(), 4);
*/
}
public function testExecuteStatementMultipleTimes()
{
......
......@@ -99,6 +99,7 @@ class Doctrine_Connection_Profiler_TestCase extends Doctrine_UnitTestCase
$this->assertTrue(is_numeric($this->profiler->lastEvent()->getElapsedSecs()));
$this->assertEqual($this->conn->count(), 4);
}
public function testExecuteStatementMultipleTimes()
{
......
......@@ -30,14 +30,18 @@
* @since 1.0
* @version $Revision$
*/
class Doctrine_Enum_TestCase extends Doctrine_UnitTestCase {
public function prepareData() { }
public function prepareTables() {
class Doctrine_Enum_TestCase extends Doctrine_UnitTestCase
{
public function prepareData()
{ }
public function prepareTables()
{
$this->tables = array("EnumTest");
parent::prepareTables();
}
public function testParameterConversion() {
public function testParameterConversion()
{
$test = new EnumTest();
$test->status = 'open';
$this->assertEqual($test->status, 'open');
......@@ -60,7 +64,8 @@ class Doctrine_Enum_TestCase extends Doctrine_UnitTestCase {
}
}
public function testInAndNotIn() {
public function testInAndNotIn()
{
try {
$query = new Doctrine_Query($this->connection);
$ret = $query->query("FROM EnumTest WHERE EnumTest.status IN ('open')");
......@@ -78,7 +83,8 @@ class Doctrine_Enum_TestCase extends Doctrine_UnitTestCase {
}
}
public function testExpressionComposition() {
public function testExpressionComposition()
{
try {
$query = new Doctrine_Query($this->connection);
$ret = $query->query("FROM EnumTest e WHERE e.id > 0 AND (e.status != 'closed' OR e.status = 'verified')");
......@@ -87,7 +93,8 @@ class Doctrine_Enum_TestCase extends Doctrine_UnitTestCase {
$this->fail();
}
}
public function testNotEqual() {
public function testNotEqual()
{
try {
$query = new Doctrine_Query($this->connection);
$ret = $query->query("FROM EnumTest WHERE EnumTest.status != 'closed'");
......@@ -97,7 +104,8 @@ class Doctrine_Enum_TestCase extends Doctrine_UnitTestCase {
}
}
public function testEnumType() {
public function testEnumType()
{
$enum = new EnumTest();
$enum->status = "open";
......@@ -118,8 +126,9 @@ class Doctrine_Enum_TestCase extends Doctrine_UnitTestCase {
$this->assertEqual($enum->status, "closed");
}
public function testEnumTypeWithCaseConversion() {
$this->dbh->setAttribute(PDO::ATTR_CASE, PDO::CASE_UPPER);
public function testEnumTypeWithCaseConversion()
{
$this->conn->setAttribute(PDO::ATTR_CASE, PDO::CASE_UPPER);
$enum = new EnumTest();
......@@ -142,13 +151,14 @@ class Doctrine_Enum_TestCase extends Doctrine_UnitTestCase {
$enum->refresh();
$this->assertEqual($enum->status, "closed");
$this->dbh->setAttribute(PDO::ATTR_CASE, PDO::CASE_NATURAL);
$this->conn->setAttribute(PDO::ATTR_CASE, PDO::CASE_NATURAL);
}
public function testFailingRefresh() {
public function testFailingRefresh()
{
$enum = $this->connection->getTable('EnumTest')->find(1);
$this->dbh->query('DELETE FROM enum_test WHERE id = 1');
$this->conn->exec('DELETE FROM enum_test WHERE id = 1');
$f = false;
try {
......
......@@ -32,7 +32,7 @@
*/
class Doctrine_Hydrate_FetchMode_TestCase extends Doctrine_UnitTestCase
{
/**
public function testFetchArraySupportsOneToManyRelations()
{
$q = new Doctrine_Query();
......@@ -92,13 +92,13 @@ class Doctrine_Hydrate_FetchMode_TestCase extends Doctrine_UnitTestCase
$this->assertEqual(count($users), 1);
$this->assertEqual($users[0]['Email']['address'], 'zYne@example.com');
}
*/
public function testFetchRecordSupportsOneToOneRelations()
{
$q = new Doctrine_Query();
$q->select('u.*, e.*')->from('User u')->innerJoin('u.Email e');
$count = count($this->dbh);
$count = count($this->conn);
$users = $q->execute(array(), Doctrine::FETCH_RECORD);
$this->assertEqual(count($users), 8);
......@@ -111,7 +111,8 @@ class Doctrine_Hydrate_FetchMode_TestCase extends Doctrine_UnitTestCase
$this->assertTrue($users[0]['Email'] instanceof Email);
$this->assertEqual($users[0]['email_id'], 1);
$this->assertEqual(count($this->dbh), $count + 1);
$this->assertEqual(count($this->conn), $count + 1);
}
public function testFetchRecordSupportsOneToManyRelations()
......@@ -119,7 +120,7 @@ class Doctrine_Hydrate_FetchMode_TestCase extends Doctrine_UnitTestCase
$q = new Doctrine_Query();
$q->select('u.*, p.*')->from('User u')->innerJoin('u.Phonenumber p');
$count = count($this->dbh);
$count = count($this->conn);
$users = $q->execute(array(), Doctrine::FETCH_RECORD);
$this->assertEqual(count($users), 8);
......@@ -128,7 +129,7 @@ class Doctrine_Hydrate_FetchMode_TestCase extends Doctrine_UnitTestCase
$this->assertTrue($users instanceof Doctrine_Collection);
$this->assertTrue($users[0]->Phonenumber instanceof Doctrine_Collection);
$this->assertEqual(count($this->dbh), $count + 1);
$this->assertEqual(count($this->conn), $count + 1);
}
public function testFetchRecordSupportsSimpleFetching()
......@@ -136,7 +137,7 @@ class Doctrine_Hydrate_FetchMode_TestCase extends Doctrine_UnitTestCase
$q = new Doctrine_Query();
$q->select('u.*')->from('User u');
$count = count($this->dbh);
$count = $this->conn->count();
$users = $q->execute(array(), Doctrine::FETCH_RECORD);
$this->assertEqual(count($users), 8);
......@@ -144,6 +145,6 @@ class Doctrine_Hydrate_FetchMode_TestCase extends Doctrine_UnitTestCase
$this->assertEqual($users[0]->state(), Doctrine_Record::STATE_CLEAN);
$this->assertEqual(count($this->dbh), $count + 1);
$this->assertEqual($this->conn->count(), $count + 1);
}
}
......@@ -74,18 +74,18 @@ class Doctrine_Query_Limit_TestCase extends Doctrine_UnitTestCase
'SELECT e.id AS e__id, p.id AS p__id, p.phonenumber AS p__phonenumber, p.entity_id AS p__entity_id FROM entity e LEFT JOIN phonenumber p ON e.id = p.entity_id WHERE e.id IN (SELECT DISTINCT e2.id FROM entity e2 LEFT JOIN phonenumber p2 ON e2.id = p2.entity_id WHERE (e2.type = 0) LIMIT 5) AND (e.type = 0)');
$users = $q->execute();
$count = $this->dbh->count();
$count = $this->conn->count();
$this->assertEqual($users->count(), 5);
$users[0]->Phonenumber[0];
$this->assertEqual($count, $this->dbh->count());
$this->assertEqual($count, $this->conn->count());
$q->offset(2);
$users = $q->execute();
$count = $this->dbh->count();
$count = $this->conn->count();
$this->assertEqual($users->count(), 5);
$users[3]->Phonenumber[0];
$this->assertEqual($count, $this->dbh->count());
$this->assertEqual($count, $this->conn->count());
}
public function testLimitWithOneToManyLeftJoinAndCondition()
......@@ -135,19 +135,19 @@ class Doctrine_Query_Limit_TestCase extends Doctrine_UnitTestCase
$sql = $q->getQuery();
$users = $q->execute();
$count = $this->dbh->count();
$count = $this->conn->count();
$this->assertEqual($users->count(), 5);
$users[0]->Phonenumber[0];
$this->assertEqual($count, $this->dbh->count());
$this->assertEqual($count, $this->conn->count());
$q->offset(2);
$users = $q->execute();
$count = $this->dbh->count();
$count = $this->conn->count();
$this->assertEqual($users->count(), 5);
$users[3]->Phonenumber[0];
$this->assertEqual($count, $this->dbh->count());
$this->assertEqual($count, $this->conn->count());
$this->assertEqual($q->getQuery(),
'SELECT e.id AS e__id, p.id AS p__id, p.phonenumber AS p__phonenumber, p.entity_id AS p__entity_id FROM entity e INNER JOIN phonenumber p ON e.id = p.entity_id WHERE e.id IN (SELECT DISTINCT e2.id FROM entity e2 INNER JOIN phonenumber p2 ON e2.id = p2.entity_id WHERE (e2.type = 0) LIMIT 5 OFFSET 2) AND (e.type = 0)');
......@@ -162,9 +162,9 @@ class Doctrine_Query_Limit_TestCase extends Doctrine_UnitTestCase
$users = $q->execute(array('zYne'));
$this->assertEqual($users->count(), 1);
$count = $this->dbh->count();
$count = $this->conn->count();
$users[0]->Phonenumber[0];
$this->assertEqual($count, $this->dbh->count());
$this->assertEqual($count, $this->conn->count());
$this->assertEqual($q->getQuery(),
'SELECT e.id AS e__id, p.id AS p__id FROM entity e LEFT JOIN phonenumber p ON e.id = p.entity_id WHERE e.id IN (SELECT DISTINCT e2.id FROM entity e2 LEFT JOIN phonenumber p2 ON e2.id = p2.entity_id WHERE e2.name = ? AND (e2.type = 0) LIMIT 5) AND e.name = ? AND (e.type = 0)');
......@@ -178,9 +178,9 @@ class Doctrine_Query_Limit_TestCase extends Doctrine_UnitTestCase
$this->assertEqual($users->count(), 2);
$count = $this->dbh->count();
$count = $this->conn->count();
$users[0]->Phonenumber[0];
$this->assertEqual($count, $this->dbh->count());
$this->assertEqual($count, $this->conn->count());
$this->assertEqual($q->getQuery(),
"SELECT e.id AS e__id, p.id AS p__id FROM entity e LEFT JOIN phonenumber p ON"
......
......@@ -68,10 +68,11 @@ class Doctrine_Query_MultiJoin2_TestCase extends Doctrine_UnitTestCase
$lastEntry->save();
}
public function testMultipleJoinFetchingWithDeepJoins()
{
$query = new Doctrine_Query($this->connection);
$queryCount = $this->connection->getDbh()->count();
$queryCount = $this->connection->count();
try {
$categories = $query->select('c.*, subCats.*, b.*, le.*, a.*')
->from('QueryTest_Category c')
......@@ -83,10 +84,10 @@ class Doctrine_Query_MultiJoin2_TestCase extends Doctrine_UnitTestCase
->orderBy('c.position ASC, subCats.position ASC, b.position ASC')
->execute();
// Test that accessing a loaded (but empty) relation doesnt trigger an extra query
$this->assertEqual($queryCount + 1, $this->connection->getDbh()->count());
$this->assertEqual($queryCount + 1, $this->connection->count());
$categories[0]->subCategories;
$this->assertEqual($queryCount + 1, $this->connection->getDbh()->count());
$this->assertEqual($queryCount + 1, $this->connection->count());
} catch (Doctrine_Exception $e) {
$this->fail();
}
......@@ -95,7 +96,7 @@ class Doctrine_Query_MultiJoin2_TestCase extends Doctrine_UnitTestCase
public function testMultipleJoinFetchingWithArrayFetching()
{
$query = new Doctrine_Query($this->connection);
$queryCount = $this->connection->getDbh()->count();
$queryCount = $this->connection->count();
try {
$categories = $query->select('c.*, subCats.*, b.*, le.*, a.*')
->from('QueryTest_Category c')
......
......@@ -117,13 +117,13 @@ class Doctrine_RawSql_TestCase extends Doctrine_UnitTestCase
$coll = $query->execute();
$this->assertEqual($coll->count(), 11);
$count = $this->dbh->count();
$count = $this->conn->count();
$coll[4]->Phonenumber[0]->phonenumber;
$this->assertEqual($count, $this->dbh->count());
$this->assertEqual($count, $this->conn->count());
$coll[5]->Phonenumber[0]->phonenumber;
$this->assertEqual($count, $this->dbh->count());
$this->assertEqual($count, $this->conn->count());
}
public function testAliasesAreSupportedInAddComponent()
{
......@@ -138,13 +138,13 @@ class Doctrine_RawSql_TestCase extends Doctrine_UnitTestCase
$coll = $query->execute();
$this->assertEqual($coll->count(), 11);
$count = $this->dbh->count();
$count = $this->conn->count();
$coll[4]->Phonenumber[0]->phonenumber;
$this->assertEqual($count, $this->dbh->count());
$this->assertEqual($count, $this->conn->count());
$coll[5]->Phonenumber[0]->phonenumber;
$this->assertEqual($count, $this->dbh->count());
$this->assertEqual($count, $this->conn->count());
}
public function testPrimaryKeySelectForcing()
{
......
......@@ -40,7 +40,8 @@ class Doctrine_Relation_Nest_TestCase extends Doctrine_UnitTestCase
parent::prepareTables();
}
public function testInitJoinTableSelfReferencingInsertingData() {
public function testInitJoinTableSelfReferencingInsertingData()
{
$e = new Entity();
$e->name = "Entity test";
......@@ -71,11 +72,11 @@ class Doctrine_Relation_Nest_TestCase extends Doctrine_UnitTestCase
$this->assertEqual($e->Entity[0]->state(), Doctrine_Record::STATE_TDIRTY);
$this->assertEqual($e->Entity[1]->state(), Doctrine_Record::STATE_TDIRTY);
$count = count($this->dbh);
$count = count($this->conn);
$e->save();
$this->assertEqual(($count + 13), $this->dbh->count());
$this->assertEqual(($count + 13), $this->conn->count());
}
public function testNestRelationsFetchingData()
{
......@@ -103,7 +104,7 @@ class Doctrine_Relation_Nest_TestCase extends Doctrine_UnitTestCase
$this->assertTrue(is_numeric($e->id));
$result = $this->dbh->query('SELECT * FROM entity_reference')->fetchAll(PDO::FETCH_ASSOC);
$result = $this->conn->execute('SELECT * FROM entity_reference')->fetchAll(PDO::FETCH_ASSOC);
$this->assertEqual(count($result), 6);
......@@ -118,7 +119,7 @@ class Doctrine_Relation_Nest_TestCase extends Doctrine_UnitTestCase
$e = $e->getTable()->find($e->id);
$count = count($this->dbh);
$count = count($this->conn);
$this->assertTrue($e instanceof Entity);
......@@ -127,7 +128,7 @@ class Doctrine_Relation_Nest_TestCase extends Doctrine_UnitTestCase
$this->assertEqual(count($this->dbh), ($count + 1));
$this->assertEqual(count($this->conn), ($count + 1));
$this->assertEqual($e->Entity[0]->name, "Friend 1");
$this->assertEqual($e->Entity[1]->name, "Friend 2");
......@@ -135,12 +136,12 @@ class Doctrine_Relation_Nest_TestCase extends Doctrine_UnitTestCase
$this->assertEqual($e->Entity[0]->Entity[0]->name, "Entity test");
$this->assertEqual($e->Entity[0]->Entity[1]->name, "Friend 1 1");
$this->assertEqual(count($this->dbh), ($count + 2));
$this->assertEqual(count($this->conn), ($count + 2));
$this->assertEqual($e->Entity[1]->Entity[0]->name, "Entity test");
$this->assertEqual($e->Entity[1]->Entity[1]->name, "Friend 2 1");
$this->assertEqual(count($this->dbh), ($count + 3));
$this->assertEqual(count($this->conn), ($count + 3));
$this->assertEqual($e->Entity[0]->state(), Doctrine_Record::STATE_CLEAN);
$this->assertEqual($e->Entity[1]->state(), Doctrine_Record::STATE_CLEAN);
......
......@@ -130,7 +130,7 @@ class Doctrine_UnitTestCase extends UnitTestCase
} catch(Doctrine_Manager_Exception $e) {
if($this->driverName == 'main') {
$this->dbh = Doctrine_Db::getConnection('sqlite::memory:');
$this->dbh = array('sqlite::memory:');
} else {
$this->dbh = $this->adapter = new Doctrine_Adapter_Mock($this->driverName);
}
......@@ -169,8 +169,8 @@ class Doctrine_UnitTestCase extends UnitTestCase
foreach($this->tables as $name) {
$query = 'DROP TABLE ' . Doctrine::tableize($name);
try {
$this->dbh->query($query);
} catch(PDOException $e) {
$this->conn->exec($query);
} catch(Doctrine_Connection_Exception $e) {
}
}
......
......@@ -30,8 +30,11 @@
* @since 1.0
* @version $Revision$
*/
class Doctrine_View_TestCase extends Doctrine_UnitTestCase {
public function testCreateView() {
class Doctrine_View_TestCase extends Doctrine_UnitTestCase
{
public function testCreateView()
{
$query = new Doctrine_Query($this->connection);
$query->from('User');
......@@ -53,12 +56,12 @@ class Doctrine_View_TestCase extends Doctrine_UnitTestCase {
$this->assertTrue($success);
$users = $view->execute();
$count = $this->dbh->count();
$count = $this->conn->count();
$this->assertTrue($users instanceof Doctrine_Collection);
$this->assertEqual($users->count(), 8);
$this->assertEqual($users[0]->name, 'zYne');
$this->assertEqual($users[0]->state(), Doctrine_Record::STATE_CLEAN);
$this->assertEqual($count, $this->dbh->count());
$this->assertEqual($count, $this->conn->count());
$success = true;
try {
......@@ -68,7 +71,9 @@ class Doctrine_View_TestCase extends Doctrine_UnitTestCase {
}
$this->assertTrue($success);
}
public function testConstructor() {
public function testConstructor()
{
}
}
......
......@@ -72,6 +72,7 @@ $test = new GroupTest('Doctrine Framework Unit Tests');
$test->addTestCase(new Doctrine_Ticket330_TestCase());
*/
/** */
// Connection drivers (not yet fully tested)
$test->addTestCase(new Doctrine_Connection_Pgsql_TestCase());
$test->addTestCase(new Doctrine_Connection_Oracle_TestCase());
......@@ -195,7 +196,7 @@ $test->addTestCase(new Doctrine_Hook_TestCase());
// Db component
$test->addTestCase(new Doctrine_Db_TestCase());
$test->addTestCase(new Doctrine_Db_Profiler_TestCase());
$test->addTestCase(new Doctrine_Connection_Profiler_TestCase());
// Eventlisteners
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment