[limb-svn] r7009 - in 3.x/trunk/limb/dbal: src/toolkit tests/cases/toolkit
svn at limb-project.com
svn at limb-project.com
Tue May 13 01:27:12 MSD 2008
Author: korchasa
Date: 2008-05-13 01:27:12 +0400 (Tue, 13 May 2008)
New Revision: 7009
URL: http://fisheye.limb-project.com/changelog/limb/?cs=7009
Modified:
3.x/trunk/limb/dbal/src/toolkit/lmbDbTools.class.php
3.x/trunk/limb/dbal/tests/cases/toolkit/lmbDbToolsTest.class.php
Log:
-- added methods to get/set database connections by dsn
Modified: 3.x/trunk/limb/dbal/src/toolkit/lmbDbTools.class.php
===================================================================
--- 3.x/trunk/limb/dbal/src/toolkit/lmbDbTools.class.php 2008-05-12 08:57:46 UTC (rev 7008)
+++ 3.x/trunk/limb/dbal/src/toolkit/lmbDbTools.class.php 2008-05-12 21:27:12 UTC (rev 7009)
@@ -20,8 +20,9 @@
*/
class lmbDbTools extends lmbAbstractTools
{
- protected $db_configs = array('dsn' => null);
- protected $connections = array('dsn' => null);
+ protected $dsnes_available = array('dsn' => null);
+ protected $dsnes_active = array();
+ protected $dsnes_names = array('dsn' => null);
protected $cache_db_info = true;
protected $db_info = array();
protected $db_tables = array();
@@ -29,12 +30,12 @@
function setDbEnvironment($env)
{
- $this->db_env = $env;
+ $this->dsnes_available = $env;
}
function getDbEnvironment()
{
- return $this->db_env;
+ return $this->dsnes_available;
}
function setDefaultDbDSN($dsn)
@@ -62,37 +63,58 @@
return false;
}
}
-
- function setDbDSNByName($name, $dsn)
+
+ protected function _getDbDsnHash($dsn)
{
if(is_object($dsn))
- $this->db_configs[$name] = $dsn;
- else
- $this->db_configs[$name] = new lmbDbDSN($dsn);
+ $dsn = $dsn->toString();
+ return md5($dsn);
}
-
- function getDbDSNByName($name)
+
+ protected function _tryLoadDsnFromEnvironment($conf, $name)
+ {
+ $env = $conf->get($this->db_env);
+ if(!is_array($env) || !isset($env[$name]))
+ throw new lmbException("Could not find database connection settings for environment '{$this->db_env}'");
+ return $env[$name];
+ }
+
+ protected function _loadDbDsnFromConfig($name)
{
- if(isset($this->db_configs[$name]) && is_object($this->db_configs[$name]))
- return $this->db_configs[$name];
-
$conf = $this->toolkit->getConf('db');
//for BC 'dsn' overrides other db environments
- if($dsn = $conf->get($name))
+ $dsn = ($conf->has($name))
+ ? $conf->get($name)
+ : $this->_tryLoadDsnFromEnvironment($conf, $name);
+
+ $this->setDbDSNByName($name, new lmbDbDSN($dsn));
+
+ return $dsn;
+ }
+
+ function setDbDSNByName($name, $dsn)
+ {
+ if(!is_object($dsn))
+ $dsn = new lmbDbDSN($dsn);
+
+ $this->dsnes_names[$name] = $this->_getDbDsnHash($dsn);
+ $this->dsnes_available[$this->dsnes_names[$name]] = $dsn;
+ }
+
+ function getDbDSNByName($name)
+ {
+ if(isset($this->dsnes_names[$name]))
+ $dsn = $this->dsnes_names[$name];
+ else
{
- $this->setDbDSNByName($name, new lmbDbDSN($dsn));
+ $dsn = $this->_loadDbDsnFromConfig($name);
}
- else
- {
- $env = $conf->get($this->db_env);
- if(!is_array($env) || !isset($env[$name]))
- throw new lmbException("Could not find database connection settings for environment '{$this->db_env}'");
+
+ if(isset($this->dsnes_available[$dsn]) && is_object($this->dsnes_available[$dsn]))
+ return $this->dsnes_available[$dsn];
- $this->setDbDSNByName($name, new lmbDbDSN($env[$name]));
- }
-
- return $this->db_configs[$name];
+ return $this->dsnes_available[$this->_getDbDsnHash($dsn)];
}
function getDbDSN($env)
@@ -105,22 +127,38 @@
return new lmbDbDSN($array['dsn']);
}
+
+ function getDbConnectionByDsn($dsn)
+ {
+ $dsn_hash = $this->_getDbDsnHash($dsn);
+
+ if(isset($this->dsnes_active[$dsn_hash]) && is_object($this->dsnes_active[$dsn_hash]))
+ return $this->dsnes_active[$dsn_hash];
+ $this->setDbConnectionByDsn($dsn, $this->createDbConnection($dsn));
+ return $this->dsnes_active[$dsn_hash];
+ }
+
+ function setDbConnectionByDsn($dsn, $conn)
+ {
+ $this->dsnes_active[$this->_getDbDsnHash($dsn)] = $conn;
+ }
+
function setDbConnectionByName($name, $conn)
{
- $this->connections[$name] = $conn;
+ $this->dsnes_active[$name] = $conn;
}
function getDbConnectionByName($name)
{
- if(isset($this->connections[$name]) && is_object($this->connections[$name]))
- return $this->connections[$name];
+ if(isset($this->dsnes_active[$name]) && is_object($this->dsnes_active[$name]))
+ return $this->dsnes_active[$name];
if(!is_object($dsn = $this->toolkit->getDbDSNByName($name)))
throw new lmbException($name . ' database DSN is not valid');
$this->setDbConnectionByName($name, $this->createDbConnection($dsn));
- return $this->connections[$name];
+ return $this->dsnes_active[$name];
}
function setDefaultDbConnection($conn)
Modified: 3.x/trunk/limb/dbal/tests/cases/toolkit/lmbDbToolsTest.class.php
===================================================================
--- 3.x/trunk/limb/dbal/tests/cases/toolkit/lmbDbToolsTest.class.php 2008-05-12 08:57:46 UTC (rev 7008)
+++ 3.x/trunk/limb/dbal/tests/cases/toolkit/lmbDbToolsTest.class.php 2008-05-12 21:27:12 UTC (rev 7009)
@@ -80,13 +80,37 @@
function testSetDbConnectionByName()
{
- $connection = $this->tools->createDbConnection(new lmbDbDSN($this->config['dsn']));
- $another_connection = $this->tools->createDbConnection(new lmbDbDSN($this->config['another_dsn']));
+ $dsn = new lmbDbDSN($this->config['dsn']);
+ $another_dsn = new lmbDbDSN($this->config['another_dsn']);
+
+ $connection = $this->tools->createDbConnection($dsn);
+ $another_connection = $this->tools->createDbConnection($another_dsn);
- $this->assertEqual($connection, $this->tools->getDefaultDbConnection());
+ $this->assertIdentical($connection, $this->tools->getDbConnectionByName('dsn'));
$this->tools->setDbConnectionByName('dsn', $another_connection);
- $this->assertIdentical($another_connection, $this->tools->getDefaultDbConnection());
+ $this->assertIdentical($another_connection, $this->tools->getDbConnectionByName('dsn'));
+ }
+
+ function testGetDbConnectionByDsn()
+ {
+ $connection = $this->tools->createDbConnection(new lmbDbDSN($this->config['another_dsn']));
+ $this->assertIdentical($connection, $this->tools->getDbConnectionByDsn(new lmbDbDSN($this->config['another_dsn'])));
}
+
+ function testSetDbConnectionByDsn()
+ {
+ $dsn = new lmbDbDSN($this->config['dsn']);
+ $another_dsn = new lmbDbDSN($this->config['another_dsn']);
+
+ $connection = $this->tools->createDbConnection($dsn);
+ $another_connection = $this->tools->createDbConnection($another_dsn);
+
+ $this->assertIdentical($connection, $this->tools->getDbConnectionByDsn($dsn));
+
+ $this->tools->setDbConnectionByDsn($dsn, $another_connection);
+
+ $this->assertIdentical($another_connection, $this->tools->getDbConnectionByDsn($dsn));
+ }
}
More information about the limb-svn
mailing list