From c185c64bc1d178d54ef2c22de3d7a806677f5b03 Mon Sep 17 00:00:00 2001 From: Michael M Slusarz Date: Fri, 14 May 2010 12:45:57 -0600 Subject: [PATCH] Bug #9027: Use Horde_Db_Pear binder to get DB objects --- framework/Core/lib/Horde/Core/Binder/Alarm.php | 4 +- framework/Core/lib/Horde/Core/Binder/Cache.php | 6 +- framework/Core/lib/Horde/Core/Binder/Common.php | 44 --------- framework/Core/lib/Horde/Core/Binder/DbPear.php | 17 ++++ framework/Core/lib/Horde/Core/Binder/Lock.php | 4 +- framework/Core/lib/Horde/Core/Binder/Perms.php | 4 +- .../Core/lib/Horde/Core/Binder/SessionHandler.php | 6 +- framework/Core/lib/Horde/Core/Binder/Token.php | 4 +- framework/Core/lib/Horde/Core/Factory/DbPear.php | 106 +++++++++++++++++++++ framework/Core/lib/Horde/Registry.php | 1 + framework/Core/package.xml | 10 +- 11 files changed, 146 insertions(+), 60 deletions(-) delete mode 100644 framework/Core/lib/Horde/Core/Binder/Common.php create mode 100644 framework/Core/lib/Horde/Core/Binder/DbPear.php create mode 100644 framework/Core/lib/Horde/Core/Factory/DbPear.php diff --git a/framework/Core/lib/Horde/Core/Binder/Alarm.php b/framework/Core/lib/Horde/Core/Binder/Alarm.php index 876f0a9ca..578d6d201 100644 --- a/framework/Core/lib/Horde/Core/Binder/Alarm.php +++ b/framework/Core/lib/Horde/Core/Binder/Alarm.php @@ -16,7 +16,7 @@ class Horde_Core_Binder_Alarm implements Horde_Injector_Binder } if (strcasecmp($driver, 'Sql') === 0) { - $write_db = Horde_Core_Binder_Common::createDb($params, 'alarm SQL'); + $write_db = $injector->getInstance('Horde_Db_Pear')->getOb(); /* Check if we need to set up the read DB connection * separately. */ @@ -24,7 +24,7 @@ class Horde_Core_Binder_Alarm implements Horde_Injector_Binder $params['db'] = $write_db; } else { $params['write_db'] = $write_db; - $params['db'] = Horde_Core_Binder_Common::createDb(array_merge($params, $params['read']), 'alarm SQL'); + $params['db'] = $injector->getInstance('Horde_Db_Pear')->getOb('read'); } } diff --git a/framework/Core/lib/Horde/Core/Binder/Cache.php b/framework/Core/lib/Horde/Core/Binder/Cache.php index bc850d112..b7fbcfff8 100644 --- a/framework/Core/lib/Horde/Core/Binder/Cache.php +++ b/framework/Core/lib/Horde/Core/Binder/Cache.php @@ -21,15 +21,15 @@ class Horde_Core_Binder_Cache implements Horde_Injector_Binder if (strcasecmp($driver, 'Memcache') === 0) { $params['memcache'] = $injector->getInstance('Horde_Memcache'); } elseif (strcasecmp($driver, 'Sql') === 0) { - $write_db = Horde_Core_Binder_Common::createDb($params, 'cache SQL'); + $write_db = $injector->getInstance('Horde_Db_Pear')->getOb(); /* Check if we need to set up the read DB connection - * * separately. */ + * separately. */ if (empty($params['splitread'])) { $params['db'] = $write_db; } else { $params['write_db'] = $write_db; - $params['db'] = Horde_Core_Binder_Common::createDb(array_merge($params, $params['read']), 'cache SQL'); + $params['db'] = $injector->getInstance('Horde_Db_Pear')->getOb('read'); } if (!empty($params['use_memorycache'])) { diff --git a/framework/Core/lib/Horde/Core/Binder/Common.php b/framework/Core/lib/Horde/Core/Binder/Common.php deleted file mode 100644 index 356cef7e5..000000000 --- a/framework/Core/lib/Horde/Core/Binder/Common.php +++ /dev/null @@ -1,44 +0,0 @@ - '', - 'hostspec' => '', - 'password' => '', - 'username' => '' - ), $params); - - /* Connect to the SQL server using the supplied parameters. */ - $db = DB::connect($params, array( - 'persistent' => !empty($params['persistent']), - 'ssl' => !empty($params['ssl']) - )); - - if ($db instanceof PEAR_Error) { - throw new Horde_Exception($db); - } - - // Set DB portability options. - switch ($db->phptype) { - case 'mssql': - $db->setOption('portability', DB_PORTABILITY_LOWERCASE | DB_PORTABILITY_ERRORS | DB_PORTABILITY_RTRIM); - break; - - default: - $db->setOption('portability', DB_PORTABILITY_LOWERCASE | DB_PORTABILITY_ERRORS); - break; - } - - return $db; - } - -} diff --git a/framework/Core/lib/Horde/Core/Binder/DbPear.php b/framework/Core/lib/Horde/Core/Binder/DbPear.php new file mode 100644 index 000000000..3a83625d4 --- /dev/null +++ b/framework/Core/lib/Horde/Core/Binder/DbPear.php @@ -0,0 +1,17 @@ +getInstance('Horde_Log_Logger'); if (strcasecmp($driver, 'Sql') === 0) { - $write_db = Horde_Core_Binder_Common::createDb($params, 'lock SQL'); + $write_db = $injector->getInstance('Horde_Db_Pear')->getOb(); /* Check if we need to set up the read DB connection * separately. */ @@ -28,7 +28,7 @@ class Horde_Core_Binder_Lock implements Horde_Injector_Binder $params['db'] = $write_db; } else { $params['write_db'] = $write_db; - $params['db'] = Horde_Core_Binder_Common::createDb(array_merge($params, $params['read']), 'lock SQL'); + $params['db'] = $injector->getInstance('Horde_Db_Pear')->getOb('read'); } } diff --git a/framework/Core/lib/Horde/Core/Binder/Perms.php b/framework/Core/lib/Horde/Core/Binder/Perms.php index 5c943aa37..c5c2747fa 100644 --- a/framework/Core/lib/Horde/Core/Binder/Perms.php +++ b/framework/Core/lib/Horde/Core/Binder/Perms.php @@ -22,7 +22,7 @@ class Horde_Core_Binder_Perms implements Horde_Injector_Binder array_merge(Horde::getDriverConfig('datatree', $dt_driver), array('group' => 'horde.perms')) ); } elseif (strcasecmp($driver, 'Sql') === 0) { - $write_db = Horde_Core_Binder_Common::createDb($params, 'perms SQL'); + $write_db = $injector->getInstance('Horde_Db_Pear')->getOb(); /* Check if we need to set up the read DB connection * separately. */ @@ -30,7 +30,7 @@ class Horde_Core_Binder_Perms implements Horde_Injector_Binder $params['db'] = $write_db; } else { $params['write_db'] = $write_db; - $params['db'] = Horde_Core_Binder_Common::createDb(array_merge($params, $params['read']), 'perms SQL'); + $params['db'] = $injector->getInstance('Horde_Db_Pear')->getOb('read'); } } diff --git a/framework/Core/lib/Horde/Core/Binder/SessionHandler.php b/framework/Core/lib/Horde/Core/Binder/SessionHandler.php index 528078049..f554f5bba 100644 --- a/framework/Core/lib/Horde/Core/Binder/SessionHandler.php +++ b/framework/Core/lib/Horde/Core/Binder/SessionHandler.php @@ -16,15 +16,15 @@ class Horde_Core_Binder_SessionHandler implements Horde_Injector_Binder $params = Horde::getDriverConfig('sessionhandler', $driver); if (strcasecmp($driver, 'Sql') === 0) { - $write_db = Horde_Core_Binder_Common::createDb($params, 'sessionhandler SQL'); + $write_db = $injector->getInstance('Horde_Db_Pear')->getOb(); /* Check if we need to set up the read DB connection - * * separately. */ + * separately. */ if (empty($params['splitread'])) { $params['db'] = $write_db; } else { $params['write_db'] = $write_db; - $params['db'] = Horde_Core_Binder_Common::createDb(array_merge($params, $params['read']), 'sessionhandler SQL'); + $params['db'] = $injector->getInstance('Horde_Db_Pear')->getOb('read'); } } diff --git a/framework/Core/lib/Horde/Core/Binder/Token.php b/framework/Core/lib/Horde/Core/Binder/Token.php index 49b5f4e69..340c3c43b 100644 --- a/framework/Core/lib/Horde/Core/Binder/Token.php +++ b/framework/Core/lib/Horde/Core/Binder/Token.php @@ -15,7 +15,7 @@ class Horde_Core_Binder_Token implements Horde_Injector_Binder : array(); if (strcasecmp($driver, 'Sql') === 0) { - $write_db = Horde_Core_Binder_Common::createDb($params, 'token SQL'); + $write_db = $injector->getInstance('Horde_Db_Pear')->getOb(); /* Check if we need to set up the read DB connection * separately. */ @@ -23,7 +23,7 @@ class Horde_Core_Binder_Token implements Horde_Injector_Binder $params['db'] = $write_db; } else { $params['write_db'] = $write_db; - $params['db'] = Horde_Core_Binder_Common::createDb(array_merge($params, $params['read']), 'token SQL'); + $params['db'] = $injector->getInstance('Horde_Db_Pear')->getOb('read'); } } elseif (strcasecmp($driver, 'None') === 0) { $driver = 'Null'; diff --git a/framework/Core/lib/Horde/Core/Factory/DbPear.php b/framework/Core/lib/Horde/Core/Factory/DbPear.php new file mode 100644 index 000000000..901800a5a --- /dev/null +++ b/framework/Core/lib/Horde/Core/Factory/DbPear.php @@ -0,0 +1,106 @@ + + * @license http://www.fsf.org/copyleft/lgpl.html LGPL + * @link http://pear.horde.org/index.php?package=Core + */ + +/** + * A Horde_Injector:: based factory for creating PEAR DB objects.. + * + * Copyright 2010 The Horde Project (http://www.horde.org/) + * + * See the enclosed file COPYING for license information (LGPL). If you + * did not receive this file, see http://www.fsf.org/copyleft/lgpl.html. + * + * @category Horde + * @package Core + * @author Michael Slusarz + * @license http://www.fsf.org/copyleft/lgpl.html LGPL + * @link http://pear.horde.org/index.php?package=Core + */ +class Horde_Core_Factory_DbPear +{ + /** + * Instances. + * + * @var array + */ + private $_instances = array(); + + /** + * The injector. + * + * @var Horde_Injector + */ + private $_injector; + + /** + * Constructor. + * + * @param Horde_Injector $injector The injector to use. + */ + public function __construct(Horde_Injector $injector) + { + $this->_injector = $injector; + } + + /** + * Return the DB instance. + * + * @param string $type Either 'read' or 'rw'. + * + * @return DB The singleton DB instance. + * @throws Horde_Exception + */ + public function getOb($type = 'rw') + { + if (isset($this->_instances[$type])) { + return $this->_instances[$type]; + } + + $params = array_merge(array( + 'database' => '', + 'hostspec' => '', + 'password' => '', + 'username' => '' + ), $GLOBALS['conf']['sql']); + if ($type == 'read') { + $params = array_merge($params, $params['read']); + } + + Horde::assertDriverConfig($params, 'sql', array('charset', 'phptype'), $ident, 'SQL'); + + /* Connect to the SQL server using the supplied parameters. */ + $db = DB::connect($params, array( + 'persistent' => !empty($params['persistent']), + 'ssl' => !empty($params['ssl']) + )); + + if ($db instanceof PEAR_Error) { + throw new Horde_Exception($db); + } + + // Set DB portability options. + switch ($db->phptype) { + case 'mssql': + $db->setOption('portability', DB_PORTABILITY_LOWERCASE | DB_PORTABILITY_ERRORS | DB_PORTABILITY_RTRIM); + break; + + default: + $db->setOption('portability', DB_PORTABILITY_LOWERCASE | DB_PORTABILITY_ERRORS); + break; + } + + $this->_instances[$type] = $db; + + return $db; + } + +} diff --git a/framework/Core/lib/Horde/Registry.php b/framework/Core/lib/Horde/Registry.php index 3a007cb7b..671aa50ba 100644 --- a/framework/Core/lib/Horde/Registry.php +++ b/framework/Core/lib/Horde/Registry.php @@ -237,6 +237,7 @@ class Horde_Registry // 'Horde_Browser' - initialized below 'Horde_Cache' => new Horde_Core_Binder_Cache(), 'Horde_Db_Adapter_Base' => new Horde_Core_Binder_Db(), + 'Horde_Db_Pear' => new Horde_Core_Binder_DbPear(), 'Horde_Editor' => new Horde_Core_Binder_Editor(), 'Horde_History' => new Horde_Core_Binder_History(), 'Horde_Lock' => new Horde_Core_Binder_Lock(), diff --git a/framework/Core/package.xml b/framework/Core/package.xml index 6d8192b4b..29e78358e 100644 --- a/framework/Core/package.xml +++ b/framework/Core/package.xml @@ -67,8 +67,8 @@ Application Framework. - + @@ -87,6 +87,7 @@ Application Framework. + @@ -194,6 +195,10 @@ Application Framework. pear.horde.org + DB + pear.php.net + + Editor pear.horde.org @@ -219,8 +224,8 @@ Application Framework. - + @@ -237,6 +242,7 @@ Application Framework. + -- 2.11.0