summaryrefslogtreecommitdiff
path: root/framework/Testing/Data/Distributed
diff options
context:
space:
mode:
Diffstat (limited to 'framework/Testing/Data/Distributed')
-rw-r--r--framework/Testing/Data/Distributed/MasterSlave/TMasterSlaveDataSourceConfig.php154
-rw-r--r--framework/Testing/Data/Distributed/MasterSlave/TMasterSlaveDbConnection.php477
-rw-r--r--framework/Testing/Data/Distributed/MasterSlave/TMasterSlaveDbTransaction.php83
-rw-r--r--framework/Testing/Data/Distributed/TDistributedDataSourceConfig.php181
-rw-r--r--framework/Testing/Data/Distributed/TDistributedDbConnection.php189
5 files changed, 0 insertions, 1084 deletions
diff --git a/framework/Testing/Data/Distributed/MasterSlave/TMasterSlaveDataSourceConfig.php b/framework/Testing/Data/Distributed/MasterSlave/TMasterSlaveDataSourceConfig.php
deleted file mode 100644
index ee486fe8..00000000
--- a/framework/Testing/Data/Distributed/MasterSlave/TMasterSlaveDataSourceConfig.php
+++ /dev/null
@@ -1,154 +0,0 @@
-<?php
-/**
- * TMasterSlaveDataSourceConfig class file.
- *
- * @author Yves Berkholz <godzilla80[at]gmx[dot]net>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2010 PradoSoft
- * @license http://www.pradosoft.com/license/
- * @version $Id$
- * @package System.Testing.Data.Distributed.MasterSlave
- */
-
- Prado::using('System.Testing.Data.Distributed.TDistributedDataSourceConfig');
- Prado::using('System.Testing.Data.Distributed.MasterSlave.TMasterSlaveDbConnection');
-
- /**
- * TMasterSlaveDataSourceConfig module class provides <module> configuration for database connections in master/slave senario.
- *
- * IMPORTANT!!!
- * BETA Version - Use with care and NOT in production environment (only tested with MySql)
- *
- * Example usage: mysql connection
- * <code>
- * <modules>
- * <module id="db1" class="System.Testing.Data.Distributed.MasterSlave.TMasterSlaveDataSourceConfig"
- * ConnectionClass="System.Testing.Data.Distributed.MasterSlave.TMasterSlaveDbConnection"
- * DistributedConnectionClass="System.Testing.Data.Distributed.MasterSlave.TSlaveDbConnection"
- * DbConnection.StatementAnalyserClass="System.Testing.Data.Analysis.TSimpleDbStatementAnalysis">
- * <database ConnectionString="mysql:host=127.0.0.1;port=3306;dbname=mydatabase" Username="dbuser" Password="dbpass" />
- * <slave ConnectionString="mysql:host=127.0.0.1;port=3307;dbname=mydatabase" Username="dbuser" Password="dbpass" Weight="3" />
- * <slave ConnectionString="mysql:host=127.0.0.1;port=3308;dbname=mydatabase" Username="dbuser" Password="dbpass" Weight="2" />
- * <slave ConnectionString="mysql:host=127.0.0.1;port=3309;dbname=mydatabase" Username="dbuser" Password="dbpass" Weight="5" />
- * </module>
- * </modules>
- * </code>
- *
- * @author Yves Berkholz <godzilla80[at]gmx[dot]net>
- * @version $Id$
- * @package System.Testing.Data.Distributed.MasterSlave
- * @since 4.0
- */
- class TMasterSlaveDataSourceConfig extends TDistributedDataSourceConfig
- {
- /**
- * @var boolean
- */
- private $_bMasterInitialized = false;
-
- /**
- * @var boolean
- */
- private $_bSlaveInitialized = false;
-
- /**
- * Constructor
- */
- public function __construct()
- {
- $this->setConnectionClass('System.Testing.Data.Distributed.MasterSlave.TMasterSlaveDbConnection');
- $this->setDistributedConnectionClass('System.Testing.Data.Distributed.MasterSlave.TSlaveDbConnection');
- }
-
- /**
- * Initalize the database connection properties from attributes in slave tag.
- * @param TXmlDocument xml configuration.
- */
- protected function initChildConnectionData($xml)
- {
- parent::initChildConnectionData($xml, 'slave');
- }
-
- /**
- * @return IMasterSlaveDbConnection
- */
- public function getDbConnection() {
- $id = $this->getID();
- static $result = array();
-
- if(!isset($result[$id]))
- $result[$id] = parent::getDbConnection();
-
- if(!$this->bInitialized)
- return $result[$id];
-
- if($this->_bMasterInitialized)
- return $result[$id];
-
- $this->_bMasterInitialized = true;
-
- if(!$result[$id] instanceof IMasterSlaveDbConnection)
- return $result[$id];
-
- $slave = parent::getDistributedDbConnection();
-
- if($slave instanceof ISlaveDbConnection && $slave->getMasterConnection()===null)
- $slave->setMasterConnection($result[$id]);
-
- if($result[$id]->getSlaveConnection()===null)
- $result[$id]->setSlaveConnection($slave);
-
- return $result[$id];
- }
-
- /**
- * @return ISlaveDbConnection
- */
- public function getDistributedDbConnection() {
- $id = $this->getID();
- static $result = array();
-
- if(!isset($result[$id]))
- $result[$id] = parent::getDistributedDbConnection();
-
- if(!$this->bInitialized)
- return $result[$id];
-
- if($this->_bSlaveInitialized)
- return $result[$id];
-
- $this->_bSlaveInitialized = true;
-
- if(!$result[$id] instanceof ISlaveDbConnection)
- return $result[$id];
-
- $master = parent::getDbConnection();
-
- if($master instanceof IMasterSlaveDbConnection && ($master->getSlaveConnection()===null))
- $master->setSlaveConnection($result[$id]);
-
- if($result[$id]->getMasterConnection()===null)
- $result[$id]->setMasterConnection($master);
-
- return $result[$id];
- }
-
- /**
- * Alias for getDbConnection().
- * @return IMasterSlaveDbConnection database connection.
- */
- public function getMasterDbConnection()
- {
- return $this->getDbConnection();
- }
-
- /**
- * Alias for getDistributedDbConnection().
- * @return ISlaveDbConnection database connection.
- */
- public function getSlaveDbConnection()
- {
- return $this->getDistributedDbConnection();
- }
- }
-?> \ No newline at end of file
diff --git a/framework/Testing/Data/Distributed/MasterSlave/TMasterSlaveDbConnection.php b/framework/Testing/Data/Distributed/MasterSlave/TMasterSlaveDbConnection.php
deleted file mode 100644
index e6b71931..00000000
--- a/framework/Testing/Data/Distributed/MasterSlave/TMasterSlaveDbConnection.php
+++ /dev/null
@@ -1,477 +0,0 @@
-<?php
-/**
- * IMasterSlaveDbConnection, ISlaveDbConnection inferface,
- * TMasterSlaveDbConnection, TSlaveDbConnection class file.
- *
- * @author Yves Berkholz <godzilla80[at]gmx[dot]net>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2010 PradoSoft
- * @license http://www.pradosoft.com/license/
- * @version $Id$
- * @package System.Testing.Data.Distributed.MasterSlave
- * @todo Test with Backport of Yii's DBO
- */
-
- Prado::using('System.Data.TDbConnection');
- Prado::using('System.Testing.Data.Distributed.TDistributedDbConnection');
- Prado::using('System.Collections.TQueue');
- Prado::using('System.Collections.TStack');
- Prado::using('System.Testing.Data.Distributed.MasterSlave.TMasterSlaveDbTransaction');
-
- /**
- * IMasterSlaveDbConnection interface
- *
- * @author Yves Berkholz <godzilla80[at]gmx[dot]net>
- * @version $Id$
- * @package System.Testing.Data.Distributed.MasterSlave
- * @since 4.0
- */
- interface IMasterSlaveDbConnection extends IDistributedDbConnection
- {
- /**
- * @return TQueue
- */
- public function getStatementQueue();
-
- /**
- * @return ISlaveDbConnection|null
- */
- public function getSlaveConnection();
-
- /**
- * @param ISlaveDbConnection|null
- */
- public function setSlaveConnection($conn);
-
- /**
- * @return TMasterSlaveDbConnectionForceMaster
- */
- public function getForceMaster();
-
- /**
- * @param TMasterSlaveDbConnectionForceMaster
- */
- public function setForceMaster($value);
-
- }
-
- /**
- * ISlaveDbConnection interface
- *
- * @author Yves Berkholz <godzilla80[at]gmx[dot]net>
- * @version $Id$
- * @package System.Testing.Data.Distributed.MasterSlave
- * @since 4.0
- */
- interface ISlaveDbConnection extends IDistributedDbConnection
- {
- /**
- * @return IMasterSlaveDbConnection|null
- */
- public function getMasterConnection();
-
- /**
- * @param IMasterSlaveDbConnection|null
- */
- public function setMasterConnection($conn);
-
- /**
- * @return TMasterSlaveDbConnectionForceMaster
- */
- public function getForceMaster();
-
- /**
- * @param TMasterSlaveDbConnectionForceMaster
- */
- public function setForceMaster($value);
- }
-
- /**
- * TMasterSlaveDbConnection class
- *
- * IMPORTANT!!!
- * BETA Version - Use with care and NOT in production environment (only tested with MySql)
- *
- * TMasterSlaveDbConnection represents a master connection to a database in master/slave senario.
- *
- * @author Yves Berkholz <godzilla80[at]gmx[dot]net>
- * @version $Id$
- * @package System.Testing.Data.Distributed.MasterSlave
- * @since 4.0
- */
- class TMasterSlaveDbConnection extends TDistributedDbConnection implements IMasterSlaveDbConnection
- {
- /**
- * @var TSlaveDbConnection|null
- */
- private $_connSlave = null;
-
- /**
- * @var TQueue
- */
- private $_statementQueue = null;
-
- /**
- * @var integer
- * @see TMasterSlaveDbConnectionForceMaster
- */
- private $_forceMaster = TMasterSlaveDbConnectionForceMaster::OFF_AUTOMATIC;
-
- private $_forceMasterStack = null;
-
- /**
- * Constructor.
- * Note, the DB connection is not established when this connection
- * instance is created. Set {@link setActive Active} property to true
- * to establish the connection.
- *
- * @param string The Data Source Name, or DSN, contains the information required to connect to the database.
- * @param string The user name for the DSN string.
- * @param string The password for the DSN string.
- * @param string Charset used for DB Connection (MySql & pgsql only). If not set, will use the default charset of your database server
- * @see http://www.php.net/manual/en/function.PDO-construct.php
- */
- public function __construct($dsn='', $username='', $password='', $charset='')
- {
- parent::__construct($dsn, $username, $password, $charset);
- parent::setTransactionClass('System.Testing.Data.Distributed.MasterSlave.TMasterSlaveDbTransaction');
- }
-
- /**
- * @return TQueue
- */
- public function getStatementQueue()
- {
- if($this->_statementQueue===null)
- $this->_statementQueue = new TQueue();
- return $this->_statementQueue;
- }
-
- /**
- * @return ISlaveDbConnection|null
- */
- public function getSlaveConnection()
- {
- return $this->_connSlave;
- }
-
- /**
- * @param ISlaveDbConnection|null
- * @throws TDbConnectionException if the slave connection already exists
- * @throws TDbConnectionException connection not instance of ISlaveDbConnection
- */
- public function setSlaveConnection($conn)
- {
- if($this->_connSlave !== null)
- throw new TDbConnectionException('masterslavedbconnection_connection_exists', get_class($this), 'SlaveConnection');
-
- if($conn!==null && !$conn instanceof ISlaveDbConnection)
- throw new TDbConnectionException('masterslavedbconnection_interface_required', get_class($this), 'SlaveConnection', 'ISlaveDbConnection');
-
- $this->_connSlave = $conn;
-
- if($this->_connSlave===null) return;
- if($this->_connSlave->getMasterConnection()!==null) return;
-
- $this->_connSlave->setMasterConnection($this);
- }
-
- /**
- * Creates a command for execution.
- * @param string SQL statement associated with the new command.
- * @return TDistributedDbCommand the DB command
- * @throws TDbException if the connection is not active
- */
- public function createCommand($sql)
- {
- $force = $this->getForceMaster();
- if($force == TMasterSlaveDbConnectionForceMaster::ON_MANUAL || $force == TMasterSlaveDbConnectionForceMaster::ON_TRANSACTION)
- {
- Prado::log('ForceMaster: ' . $force, TLogger::DEBUG, 'System.Testing.Data.Distributed.MasterSlave.TMasterSlaveDbConnection');
- return new TDistributedDbCommand($this, $sql, TDbStatementClassification::UNKNOWN);
- }
-
- $bEnqueue = false;
- $bMaster = true;
-
- $classification = $this->getStatementClassification($sql);
-
- switch($classification) {
- case TDbStatementClassification::CONTEXT:
- $bEnqueue = true;
- $bMaster = true;
- break;
- case TDbStatementClassification::SQL:
- $bMaster = false;
- break;
- case TDbStatementClassification::TCL:
- $this->setForceMaster(TMasterSlaveDbConnectionForceMaster::ON_TCL);
- case TDbStatementClassification::DDL:
- case TDbStatementClassification::DML:
- case TDbStatementClassification::DCL:
- case TDbStatementClassification::UNKNOWN:
- default:
- $bMaster = true;
- break;
- }
-
- $bMaster = $bMaster || $this->getForceMaster();
-
- $result = new TDistributedDbCommand(($bMaster ? $this : $this->getSlaveConnection()), $sql, $classification);
- //$result = new TDistributedDbCommand($this, $sql, $classification);
-
- if($bEnqueue)
- $this->getStatementQueue()->enqueue($result);
-
- return $result;
- }
-
- /**
- * @return TMasterSlaveDbConnectionForceMaster
- */
- public function getForceMaster()
- {
- return $this->_forceMaster;
- }
-
- /**
- * @param TMasterSlaveDbConnectionForceMaster
- */
- public function setForceMaster($value)
- {
- if($this->_forceMasterStack===null)
- $this->_forceMasterStack = new TStack();
-
- if($value)
- {
- $this->_forceMaster = (integer)$value;
- $this->_forceMasterStack->push((integer)$value);
- }
- elseif($this->_forceMasterStack->count() > 0)
- $this->_forceMaster = $this->_forceMasterStack->pop();
- else
- $this->_forceMaster = (integer)$value;
- }
-
- /**
- * @return TDbConnectionServerRole
- */
- public function getServerRole()
- {
- return TDbConnectionServerRole::Master;
- }
- }
-
- /**
- * TSlaveDbConnection class
- *
- * IMPORTANT!!!
- * BETA Version - Use with care and NOT in production environment (only tested with MySql)
- *
- * TSlaveDbConnection represents a readonly connection to a database in master/slave senario.
- *
- * @author Yves Berkholz <godzilla80[at]gmx[dot]net>
- * @version $Id$
- * @package System.Testing.Data.Distributed.MasterSlave
- * @since 4.0
- */
- class TSlaveDbConnection extends TDbConnection implements ISlaveDbConnection
- {
- /**
- * @var TMasterSlaveDbConnection|null
- */
- private $_connMaster = null;
-
- /**
- * @return IMasterSlaveDbConnection|null
- */
- public function getMasterConnection()
- {
- return $this->_connMaster;
- }
-
- /**
- * @param IMasterSlaveDbConnection|null
- * @throws TDbConnectionException if the master connection already exists
- * @throws TDbConnectionException connection not instance of IMasterSlaveDbConnection
- */
- public function setMasterConnection($conn)
- {
- if($this->_connMaster!==null)
- throw new TDbConnectionException('masterslavedbconnection_connection_exists', get_class($this), 'MasterConnection');
-
- if($conn!==null && !$conn instanceof IMasterSlaveDbConnection)
- throw new TDbConnectionException('masterslavedbconnection_interface_required', get_class($this), 'MasterConnection', 'IMasterSlaveDbConnection');
-
- $this->_connMaster = $conn;
- }
-
- /**
- * Creates a command for execution.
- * @param string SQL statement associated with the new command.
- * @return TDistributedDbCommand the DB command
- * @throws TDbException if the connection is not active
- */
- public function createCommand($sql)
- {
- $force = $this->getForceMaster();
- if($force == TMasterSlaveDbConnectionForceMaster::ON_MANUAL || $force == TMasterSlaveDbConnectionForceMaster::ON_TRANSACTION)
- {
- Prado::log('ForceMaster: ' . $force, TLogger::DEBUG, 'System.Testing.Data.Distributed.MasterSlave.TSlaveDbConnection');
- return new TDistributedDbCommand($this->getMasterConnection(), $sql, TDbStatementClassification::UNKNOWN);
- }
-
- $bEnqueue = false;
- $bMaster = false;
-
- $classification = $this->getStatementClassification($sql);
-
- switch($classification) {
- case TDbStatementClassification::SQL:
- $bMaster = false;
- break;
- case TDbStatementClassification::CONTEXT:
- $bEnqueue = true;
- $bMaster = true;
- break;
- case TDbStatementClassification::TCL:
- $this->setForceMaster(TMasterSlaveDbConnectionForceMaster::ON_TCL);
- case TDbStatementClassification::DDL:
- case TDbStatementClassification::DML:
- case TDbStatementClassification::DCL:
- case TDbStatementClassification::UNKNOWN:
- default:
- $bMaster = true;
- break;
- }
-
- $bMaster = $bMaster || $this->getForceMaster();
-
- $result = new TDistributedDbCommand(($bMaster ? $this->getMasterConnection() : $this), $sql, $classification);
-
- if($bEnqueue)
- $this->getMasterConnection()->getStatementQueue()->enqueue($result);
-
- return $result;
- }
-
- /**
- * Starts a transaction.
- * @return TDbTransaction the transaction initiated
- * @throws TDbException if no master connection exists or the connection is not active
- */
- public function beginTransaction()
- {
- if($this->getMasterConnection() === null)
- throw new TDbException('slavedbconnection_requires_master', getclass($this), 'MasterConnection');
-
- return $this->getMasterConnection()->beginTransaction();
- }
-
- /**
- * @return string Transaction class name to be created by calling {@link TDbConnection::beginTransaction}.
- * @throws TDbException if no master connection exists
- */
- public function getTransactionClass()
- {
- if($this->getMasterConnection() === null)
- throw new TDbException('slavedbconnection_requires_master', getclass($this), 'MasterConnection');
- return $this->getMasterConnection()->getTransactionClass();
- }
-
- /**
- * @param string Transaction class name to be created by calling {@link TDbConnection::beginTransaction}.
- * @throws TDbException if no master connection exists
- */
- public function setTransactionClass($value)
- {
- if($this->getMasterConnection() === null)
- throw new TDbException('slavedbconnection_requires_master', getclass($this), 'MasterConnection');
- $this->getMasterConnection()->setTransactionClass($value);
- }
-
- /**
- * Gets the statement analyser of type given by
- * {@link setStatementAnalyserClass StatementAnalyserClass }.
- * @return IDbStatementAnalysis statement analyser.
- * @throws TDbException if no master connection exists
- */
- public function getStatementAnalyser()
- {
- if($this->getMasterConnection() === null)
- throw new TDbException('slavedbconnection_requires_master', getclass($this), 'MasterConnection');
- return $this->getMasterConnection()->getStatementAnalyser();
- }
-
- /**
- * The statement analyser class name to be created when {@link getStatementAnalyserClass}
- * method is called. The {@link setStatementAnalyserClass StatementAnalyserClass}
- * property must be set before calling {@link getStatementAnalyser} if you wish to
- * create the connection using the given class name.
- * @param string Statement analyser class name.
- * @throws TDbException if no master connection exists
- */
- public function setStatementAnalyserClass($value)
- {
- if($this->getMasterConnection() === null)
- throw new TDbException('slavedbconnection_requires_master', getclass($this), 'MasterConnection');
- $this->getMasterConnection()->setStatementAnalyserClass($value);
- }
-
- /**
- * @param string Statement analyser class name to be created.
- * @throws TDbException if no master connection exists
- */
- public function getStatementAnalyserClass()
- {
- if($this->getMasterConnection() === null)
- throw new TDbException('slavedbconnection_requires_master', getclass($this), 'MasterConnection');
- return $this->getMasterConnection()->getStatementAnalyserClass();
- }
-
- /**
- * @return TMasterSlaveDbConnectionForceMaster
- * @throws TDbException if no master connection exists
- */
- public function getForceMaster()
- {
- if($this->getMasterConnection() === null)
- throw new TDbException('slavedbconnection_requires_master', getclass($this), 'MasterConnection');
- return $this->getMasterConnection()->getForceMaster();
- }
-
- /**
- * @param TMasterSlaveDbConnectionForceMaster
- * @throws TDbException if no master connection exists
- */
- public function setForceMaster($value)
- {
- if($this->getMasterConnection() === null)
- throw new TDbException('slavedbconnection_requires_master', getclass($this), 'MasterConnection');
- $this->getMasterConnection()->setForceMaster($value);
- }
-
- /**
- * @return TDbConnectionServerRole
- */
- public function getServerRole()
- {
- return TDbConnectionServerRole::Slave;
- }
- }
-
- /**
- * TMasterSlaveDbConnectionForceMaster class
- *
- * @author Yves Berkholz <godzilla80[at]gmx[dot]net>
- * @version $Id$
- * @package System.Testing.Data.Distributed.MasterSlave
- * @since 4.0
- */
- class TMasterSlaveDbConnectionForceMaster extends TEnumerable
- {
- const OFF_AUTOMATIC = 0;
- const ON_MANUAL = 1;
- const ON_TCL = -1;
- const ON_TRANSACTION = -2;
- }
diff --git a/framework/Testing/Data/Distributed/MasterSlave/TMasterSlaveDbTransaction.php b/framework/Testing/Data/Distributed/MasterSlave/TMasterSlaveDbTransaction.php
deleted file mode 100644
index 254afdb5..00000000
--- a/framework/Testing/Data/Distributed/MasterSlave/TMasterSlaveDbTransaction.php
+++ /dev/null
@@ -1,83 +0,0 @@
-<?php
-/**
- * TMasterSlaveDbTransaction class file.
- *
- * @author Yves Berkholz <godzilla80[at]gmx[dot]net>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2010 PradoSoft
- * @license http://www.pradosoft.com/license/
- * @version $Id$
- * @package System.Testing.Data.Distributed.MasterSlave
- */
- Prado::using('System.Data.TDbTransaction');
-
- /**
- * TMasterSlaveDbTransaction class
- *
- * IMPORTANT!!!
- * BETA Version - Use with care and NOT in production environment (only tested with MySql)
- *
- * TMasterSlaveDbTransaction represents a DB transaction in master/slave senario.
- *
- * @author Yves Berkholz <godzilla80[at]gmx[dot]net>
- * @version $Id$
- * @package System.Testing.Data.Distributed.MasterSlave
- * @since 4.0
- */
- class TMasterSlaveDbTransaction extends TDbTransaction
- {
- /**
- * @var boolean
- */
- private $_compatible = false;
-
- /**
- * Constructor.
- * @param TDbConnection the connection associated with this transaction
- * @see TDbConnection::beginTransaction
- */
- public function __construct(TDbConnection $connection)
- {
- if($connection instanceof ISlaveDbConnection)
- {
- $this->_compatible = true;
- $master = $connection->getMasterConnection();
- $master->setForceMaster(TMasterSlaveDbConnectionForceMaster::ON_TRANSACTION);
- Prado::log('contstuct, ForceMaster: ON_TRANSACTION', TLogger::DEBUG, 'System.Testing.Data.Distributed.MasterSlave.TMasterSlaveDbTransaction');
- parent::__construct($master);
- }
- else
- {
- if($connection instanceof IMasterSlaveDbConnection)
- {
- $this->_compatible = true;
- $connection->setForceMaster(TMasterSlaveDbConnectionForceMaster::ON_TRANSACTION);
- Prado::log('contstuct, ForceMaster: ON_TRANSACTION', TLogger::DEBUG, 'System.TestingData.Distributed.MasterSlave.TMasterSlaveDbTransaction');
- }
- parent::__construct($connection);
- }
- }
-
- /**
- * Commits a transaction.
- * @throws TDbException if the transaction or the DB connection is not active.
- */
- public function commit()
- {
- if($this->_compatible) $this->getConnection()->setForceMaster(TMasterSlaveDbConnectionForceMaster::OFF_AUTOMATIC);
- Prado::log('commit, ForceMaster: OFF_AUTOMATIC', TLogger::DEBUG, 'System.Testing.Data.Distributed.MasterSlave.TMasterSlaveDbTransaction');
- parent::commit();
- }
-
- /**
- * Rolls back a transaction.
- * @throws TDbException if the transaction or the DB connection is not active.
- */
- public function rollback()
- {
- if($this->_compatible) $this->getConnection()->setForceMaster(TMasterSlaveDbConnectionForceMaster::OFF_AUTOMATIC);
- Prado::log('rollback, ForceMaster: OFF_AUTOMATIC', TLogger::DEBUG, 'System.Testing.Data.Distributed.MasterSlave.TMasterSlaveDbTransaction');
- parent::rollback();
- }
- }
-?> \ No newline at end of file
diff --git a/framework/Testing/Data/Distributed/TDistributedDataSourceConfig.php b/framework/Testing/Data/Distributed/TDistributedDataSourceConfig.php
deleted file mode 100644
index b8c4e5a9..00000000
--- a/framework/Testing/Data/Distributed/TDistributedDataSourceConfig.php
+++ /dev/null
@@ -1,181 +0,0 @@
-<?php
-/**
- * TDistributedDataSourceConfig class file.
- *
- * @author Yves Berkholz <godzilla80[at]gmx[dot]net>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2010 PradoSoft
- * @license http://www.pradosoft.com/license/
- * @version $Id$
- * @package System.Testing.Data.Distributed
- */
-
- Prado::using('System.Data.TDataSourceConfig');
- Prado::using('System.Testing.Data.Distributed.TDistributedDbConnection');
-
- /**
- * IDistributedDataSourceConfig module interface provides <module> configuration for database connections.
- *
- * @author Yves Berkholz <godzilla80[at]gmx[dot]net>
- * @version $Id$
- * @package System.Testing.Data.Distributed
- * @since 4.0
- */
- interface IDistributedDataSourceConfig /*extends IDataSourceConfig*/ {
- /**
- * @return string Database connection class name to be created for child connection.
- */
- public function getDistributedConnectionClass();
-
- /**
- * @param string Database connection class name to be created for child connection.
- */
- public function setDistributedConnectionClass($value);
- }
-
- /**
- * TDistributedDataSourceConfig module class provides <module> configuration for database connections.
- *
- * @author Yves Berkholz <godzilla80[at]gmx[dot]net>
- * @version $Id$
- * @package System.Testing.Data.Distributed
- * @since 4.0
- */
- class TDistributedDataSourceConfig extends TDataSourceConfig implements IDistributedDataSourceConfig
- {
- /**
- * @var array
- */
- private $_childConnectionAttributes = array();
-
- /**
- * @var string
- */
- private $_connDistributedClass = 'System.Data.TDbConnection';
-
- /**
- * @var IDistributedDbConnection
- */
- private $_connDistributed = null;
-
- /**
- * @var boolean
- */
- protected $bInitialized = false;
-
- /**
- * @var boolean
- */
- private $_hasDistributedConnectionData = false;
-
- /**
- * Initalize the database connection properties from attributes in <database> tag.
- * @param TXmlDocument xml configuration.
- */
- public function init($xml)
- {
- parent::init($xml);
- $this->initChildConnectionData($xml);
- $this->bInitialized = true;
- }
-
- /**
- * Initalize the database connection properties from attributes in $tagName tag.
- * @param TXmlDocument xml configuration.
- * @param string Tagnames to parse. Defaults to 'child'
- */
- protected function initChildConnectionData($xml, $tagName='child')
- {
- $c = 0;
- foreach($xml->getElementsByTagName($tagName) as $item)
- {
- ++$c;
- $this->_childConnectionAttributes[] = $item->getAttributes();
- }
-
- if($c===0)
- throw new TConfigurationException('distributeddatasource_child_required', get_class($this), $tagName);
- }
-
- /**
- * @return string Database connection class name to be created for child connection.
- */
- public function getDistributedConnectionClass()
- {
- return $this->_connDistributedClass;
- }
-
- /**
- * @param string Database connection class name to be created for child connection.
- */
- public function setDistributedConnectionClass($value)
- {
- $this->_connDistributedClass=$value;
- }
-
- /**
- * @return IDistributedDbConnection
- */
- public function getDistributedDbConnection()
- {
- $this->_hasDistributedConnectionData = false;
- if($this->_connDistributed===null)
- $this->_connDistributed = Prado::createComponent($this->getDistributedConnectionClass());
-
- if($this->_hasDistributedConnectionData)
- return $this->_connDistributed;
-
- $attribs = $this->getDistributedDbConnectionAttributes();
-
- if($attribs===null)
- return $this->_connDistributed;
-
- foreach($attribs as $name => $value)
- $this->_connDistributed->setSubproperty($name, $value);
-
- $this->_hasDistributedConnectionData = true;
-
- return $this->_connDistributed;
- }
-
- /**
- * @return TMap
- */
- protected function getDistributedDbConnectionAttributes()
- {
- $index = 0;
- $c = count($this->_childConnectionAttributes);
-
- if($c > 1) {
- $aSrc = array();
- $aTmp = array();
-
- foreach($this->_childConnectionAttributes as $k => $item)
- {
- $weight = 1;
- if( isset($item['Weight']) )
- $weight = $item['Weight'];
- $aSrc[$k] = $weight;
- }
-
- asort($aSrc);
-
- foreach($aSrc as $idx => $weight)
- $aTmp = array_merge($aTmp, array_pad(array(), $weight*5, $idx));
-
- $min = 0;
- $max = count($aTmp)-1;
- $factor = array_sum($aSrc) / count($aSrc);
- $wrand = round($min + (pow(rand(0, $max) / $max, $factor) * ($max - $min)));
- $index = $aTmp[$wrand];
- }
-
- $result = $this->_childConnectionAttributes[$index];
-
- if( isset($result['Weight']) )
- unset($result['Weight']);
-
- return $result;
- }
- }
-?> \ No newline at end of file
diff --git a/framework/Testing/Data/Distributed/TDistributedDbConnection.php b/framework/Testing/Data/Distributed/TDistributedDbConnection.php
deleted file mode 100644
index bb105d50..00000000
--- a/framework/Testing/Data/Distributed/TDistributedDbConnection.php
+++ /dev/null
@@ -1,189 +0,0 @@
-<?php
-/**
- * IDistributedDbConnection, TDistributedDbConnection inferface/class file.
- *
- * @author Yves Berkholz <godzilla80[at]gmx[dot]net>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2010 PradoSoft
- * @license http://www.pradosoft.com/license/
- * @version $Id$
- * @package System.Testing.Data.Distributed
- */
-
- Prado::using('System.Data.TDbConnection');
- Prado::using('System.Testing.Data.Analysis.TDbStatementAnalysis');
-
- /**
- * TDistributedDbConnection interface
- *
- * @author Yves Berkholz <godzilla80[at]gmx[dot]net>
- * @version $Id$
- * @package System.Testing.Data.Distributed
- * @since 4.0
- */
- interface IDistributedDbConnection /*extends IDbConnection*/
- {
- /**
- * Gets the statement analyser of type given by
- * {@link setStatementAnalyserClass StatementAnalyserClass }.
- * @return IDbStatementAnalysis statement analyser.
- */
- public function getStatementAnalyser();
-
- /**
- * The statement analyser class name to be created when {@link getStatementAnalyserClass}
- * method is called. The {@link setStatementAnalyserClass StatementAnalyserClass}
- * property must be set before calling {@link getStatementAnalyser} if you wish to
- * create the connection using the given class name.
- * @param string Statement analyser class name.
- */
- public function setStatementAnalyserClass($value);
-
- /**
- * @param string Statement analyser class name to be created.
- */
- public function getStatementAnalyserClass();
-
- /**
- * @return TDbConnectionServerRole
- */
- public function getServerRole();
- }
-
- /**
- * TDistributedDbConnection class
- *
- * TDistributedDbConnection represents a conditional base connection class to a database
- *
- * @author Yves Berkholz <godzilla80[at]gmx[dot]net>
- * @version $Id$
- * @package System.Testing.Data.Distributed
- * @since 4.0
- */
- abstract class TDistributedDbConnection extends TDbConnection implements IDistributedDbConnection
- {
- /**
- * @var string
- */
- private $_statementAnalyserClass = 'System.Testing.Data.Analysis.TDbStatementAnalysis';
-
- /**
- * @var IDbStatementAnalysis
- */
- private $_statementAnalyser = null;
-
- /**
- * Gets the statement analyser of type given by
- * {@link setStatementAnalyserClass StatementAnalyserClass }.
- * @return IDbStatementAnalysis statement analyser.
- */
- public function getStatementAnalyser()
- {
- if($this->_statementAnalyser === null)
- {
- $this->setActive(true);
- $this->_statementAnalyser = Prado::createComponent($this->getStatementAnalyserClass());
-
- if($this->getActive())
- $this->_statementAnalyser->setDriverName($this->getDriverName());
- }
- return $this->_statementAnalyser;
- }
-
- /**
- * The statement analyser class name to be created when {@link getStatementAnalyser}
- * method is called. The {@link setStatementAnalyserClass StatementAnalyserClass}
- * property must be set before calling {@link getStatementAnalyser} if you wish to
- * create the connection using the given class name.
- * @param string Statement analyser class name.
- */
- public function setStatementAnalyserClass($value)
- {
- if($this->_statementAnalyser === null)
- $this->_statementAnalyserClass = $value;
- }
-
- /**
- * @param string Statement analyser class name to be created.
- */
- public function getStatementAnalyserClass()
- {
- return $this->_statementAnalyserClass;
- }
-
- /**
- * @param string The SQL statement that should be analysed
- * @param TDbStatementClassification
- */
- protected function getStatementClassification($statement='', $defaultClassification=null) {
- return $this->getStatementAnalyser()->getClassificationAnalysis(new TDbStatementAnalysisParameter($statement, $defaultClassification));
- }
- }
-
- /**
- * TDistributedDbCommand
- *
- * @author Yves Berkholz <godzilla80[at]gmx[dot]net>
- * @license http://www.pradosoft.com/license/
- * @version $Id$
- * @package System.Testing.Data.Distributed
- * @since 4.0
- */
- class TDistributedDbCommand extends TDbCommand
- {
- /**
- * @var TDbStatementClassification
- */
- private $_statementClassification;
-
- /**
- * Constructor.
- * @param TDbConnection the database connection
- * @param string the SQL statement to be executed
- * @param TDbStatementClassification Defaults to 'UNKNOWN'
- */
- public function __construct(TDbConnection $connection, $text, $classification=TDbStatementClassification::UNKNOWN)
- {
- $connection->setActive(true);
- parent::__construct($connection, $text);
- $this->_statementClassification = $classification;
- Prado::log($classification . ', ' . $connection->getServerRole() . ': ' . preg_replace('/[\s]+/', ' ', $text), TLogger::DEBUG, 'System.Testing.Data.Distributed.TDistributedDbCommand');
- }
-
- /**
- * @return TDbStatementClassification
- */
- public function getStatementClassification()
- {
- return $this->_statementClassification;
- }
- }
-
-
- /**
- * TDbConnectionServerRole
- *
- * @author Yves Berkholz <godzilla80[at]gmx[dot]net>
- * @license http://www.pradosoft.com/license/
- * @version $Id$
- * @package System.Testing.Data.Distributed
- * @since 4.0
- */
- class TDbConnectionServerRole extends TEnumerable
- {
- /**
- * Master Server (Read/Write)
- */
- const Master = 'Master';
-
- /**
- * Slave Server (Read only)
- */
- const Slave = 'Slave';
-
- /**
- * Mirror Server (Read/Write) for further use
- */
- //const Mirror = 'Mirror';
- }
-?> \ No newline at end of file