%PDF- %PDF-
Direktori : /www/varak.net/mail2.varak.net_old/libraries/afterlogic/common/db/ |
Current File : /www/varak.net/mail2.varak.net_old/libraries/afterlogic/common/db/storage.php |
<?php /* * Copyright 2004-2014, AfterLogic Corp. * Licensed under AGPLv3 license or AfterLogic license * if commercial version of the product was purchased. * See the LICENSE file for a full license statement. */ /** * @static * @package Api * @subpackage Db */ class CDbCreator { /** * @var DbMySql; */ static $oDbConnector; /** * @var DbMySql; */ static $oSlaveDbConnector; /** * @var object; */ static $oCommandCreatorHelper; private function __construct() {} /** * @return void */ public static function ClearStatic() { self::$oDbConnector = null; self::$oSlaveDbConnector = null; } /** * @param array $aData * @return CDbSql */ public static function ConnectorFabric($aData) { $oConnector = null; if (isset($aData['Type'])) { $iDbType = $aData['Type']; if (isset($aData['DBHost'], $aData['DBLogin'], $aData['DBPassword'], $aData['DBName'], $aData['DBTablePrefix'])) { if (EDbType::PostgreSQL === $iDbType) { CApi::Inc('common.db.pdo.postgres'); $oConnector = new CDbPdoPostgres($aData['DBHost'], $aData['DBLogin'], $aData['DBPassword'], $aData['DBName'], $aData['DBTablePrefix']); } else { CApi::Inc('common.db.pdo.mysql'); $oConnector = new CDbPdoMySql($aData['DBHost'], $aData['DBLogin'], $aData['DBPassword'], $aData['DBName'], $aData['DBTablePrefix']); } } } return $oConnector; } /** * @param int $iDbType = EDbType::MySQL * @return IDbHelper */ public static function CommandCreatorHelperFabric($iDbType = EDbType::MySQL) { $oHelper = null; if (EDbType::PostgreSQL === $iDbType) { CApi::Inc('common.db.pdo.postgres_helper'); $oHelper = new CPdoPostgresHelper(); } else { CApi::Inc('common.db.pdo.mysql_helper'); $oHelper = new CPdoMySqlHelper(); } return $oHelper; } /** * @param api_Settings $oSettings * @return &CDbMySql */ public static function &CreateConnector(api_Settings $oSettings) { $aResult = array(); if (!is_object(self::$oDbConnector)) { CDbCreator::$oDbConnector = CDbCreator::ConnectorFabric(array( 'Type' => $oSettings->GetConf('Common/DBType'), 'DBHost' => $oSettings->GetConf('Common/DBHost'), 'DBLogin' => $oSettings->GetConf('Common/DBLogin'), 'DBPassword' => $oSettings->GetConf('Common/DBPassword'), 'DBName' => $oSettings->GetConf('Common/DBName'), 'DBTablePrefix' => $oSettings->GetConf('Common/DBPrefix') )); if ($oSettings->GetConf('Common/UseSlaveConnection')) { CDbCreator::$oSlaveDbConnector = CDbCreator::ConnectorFabric(array( 'Type' => $oSettings->GetConf('Common/DBType'), 'DBHost' => $oSettings->GetConf('Common/DBSlaveHost'), 'DBLogin' => $oSettings->GetConf('Common/DBSlaveLogin'), 'DBPassword' => $oSettings->GetConf('Common/DBSlavePassword'), 'DBName' => $oSettings->GetConf('Common/DBSlaveName'), 'DBTablePrefix' => $oSettings->GetConf('Common/DBPrefix') )); } } $aResult = array(&CDbCreator::$oDbConnector, &CDbCreator::$oSlaveDbConnector); return $aResult; } /** * @param api_Settings $oSettings * @return &IDbHelper */ public static function &CreateCommandCreatorHelper(api_Settings $oSettings) { if (is_object(CDbCreator::$oCommandCreatorHelper)) { return CDbCreator::$oCommandCreatorHelper; } CDbCreator::$oCommandCreatorHelper = CDbCreator::CommandCreatorHelperFabric( $oSettings->GetConf('Common/DBType')); return CDbCreator::$oCommandCreatorHelper; } } /** * @package Api * @subpackage Db */ class CDbStorage { /** * @var string */ protected $sPrefix; /** * @var CDbSql */ protected $oConnector; /** * @var CDbSql */ protected $oSlaveConnector; /** * @var CApiDbException */ protected $oLastException; /** * @var api_Settings */ protected $oSettings; /** * @param api_Settings $oSettings */ public function __construct(api_Settings &$oSettings) { $aConnections =& CDbCreator::CreateConnector($oSettings); $this->oSettings = $oSettings; $this->sPrefix = $this->oSettings->GetConf('Common/DBPrefix'); $this->oConnector = null; $this->oSlaveConnector = null; $this->oLastException = null; if (is_array($aConnections) && 2 === count($aConnections)) { $this->oConnector =& $aConnections[0]; if (null !== $aConnections[1]) { $this->oSlaveConnector =& $aConnections[1]; } } } /** * @return &CDbSql */ public function &GetConnector() { return $this->oConnector; } /** * @return &CDbSql */ public function &GetSlaveConnector() { return $this->oSlaveConnector; } /** * @return bool */ public function IsConnected() { try { return $this->oConnector->IsConnected(); } catch (CApiDbException $oException) { $this->SetException($oException); } return false; } /** * @return bool */ public function Connect() { try { if ($this->oConnector->IsConnected()) { return true; } $this->oConnector->ReInitIfNotConnected( $this->oSettings->GetConf('Common/DBHost'), $this->oSettings->GetConf('Common/DBLogin'), $this->oSettings->GetConf('Common/DBPassword'), $this->oSettings->GetConf('Common/DBName') ); return $this->oConnector->Connect(); } catch (CApiDbException $oException) { $this->SetException($oException); } return false; } /** * @return bool */ public function ConnectSlave() { try { if ($this->oSlaveConnector->IsConnected()) { return true; } $this->oSlaveConnector->ReInitIfNotConnected( $this->oSettings->GetConf('Common/DBHost'), $this->oSettings->GetConf('Common/DBLogin'), $this->oSettings->GetConf('Common/DBPassword'), $this->oSettings->GetConf('Common/DBName') ); return $this->oSlaveConnector->Connect(true, true); } catch (CApiDbException $oException) { $this->SetException($oException); } return false; } /** * @return bool */ public function ConnectNoSelect() { try { if ($this->oConnector->IsConnected()) { return true; } return $this->oConnector->ConnectNoSelect(); } catch (CApiDbException $oException) { $this->SetException($oException); } return false; } /** * @return bool */ public function Disconnect() { try { $this->oConnector->Disconnect(); if ($this->oSlaveConnector) { $this->oSlaveConnector->Disconnect(); } return true; } catch (CApiDbException $oException) { $this->SetException($oException); } return false; } /** * @return bool */ public function Select() { try { return $this->oConnector->Select(); } catch (CApiDbException $oException) { $this->SetException($oException); } return false; } /** * @return bool */ public function Execute($sSql) { $bResult = false; try { if (!empty($sSql)) { if ($this->oSlaveConnector && $this->isSlaveSql($sSql)) { if ($this->ConnectSlave()) { $bResult = $this->oSlaveConnector->Execute($sSql, true); } } else { if ($this->Connect()) { $bResult = $this->oConnector->Execute($sSql); } } } } catch (CApiDbException $oException) { $this->SetException($oException); } return $bResult; } /** * @param bool $bAutoFree = true * @return bool */ public function GetNextArrayRecord($bAutoFree = true) { try { if ($this->oSlaveConnector) { return $this->oSlaveConnector->GetNextArrayRecord($bAutoFree); } return $this->oConnector->GetNextArrayRecord($bAutoFree); } catch (CApiDbException $oException) { $this->SetException($oException); } return false; } /** * @param bool $bAutoFree = true * @return bool */ public function GetNextRecord($bAutoFree = true) { try { if ($this->oSlaveConnector) { return $this->oSlaveConnector->GetNextRecord($bAutoFree); } return $this->oConnector->GetNextRecord($bAutoFree); } catch (CApiDbException $oException) { $this->SetException($oException); } return false; } /** * @return bool */ public function FreeResult() { try { if ($this->oSlaveConnector) { return $this->oSlaveConnector->FreeResult(); } return $this->oConnector->FreeResult(); } catch (CApiDbException $oException) { $this->SetException($oException); } return false; } /** * @return array | bool [object] */ public function GetResultAsObjects() { $aResult = array(); while (false !== ($oRow = $this->GetNextRecord())) { $aResult[] = $oRow; } return $aResult; } /** * @return array | bool [array] */ public function GetResultAsAssocArrays() { $aResult = array(); while (false !== ($aRow = $this->GetNextArrayRecord())) { $aResult[] = $aRow; } return $aResult; } /** * @param string $sTableName = null * @param string $sFieldName = null * @return int */ public function GetLastInsertId($sTableName = null, $sFieldName = null) { try { return $this->oConnector->GetLastInsertId($sTableName, $sFieldName); } catch (CApiDbException $oException) { $this->SetException($oException); } return false; } /** * @return int */ public function ResultCount() { try { if ($this->oSlaveConnector) { return $this->oSlaveConnector->ResultCount(); } return $this->oConnector->ResultCount(); } catch (CApiDbException $oException) { $this->SetException($oException); } return false; } /** * @return array */ public function GetTableNames() { $aResult = false; if ($this->Connect()) { try { $aResult = $this->oConnector->GetTableNames(); } catch (CApiDbException $oException) { $this->SetException($oException); } } return $aResult; } /** * @param string $sTableName * @return array */ public function GetTableFields($sTableName) { $aResult = false; if ($this->Connect()) { try { $aResult = $this->oConnector->GetTableFields($sTableName); } catch (CApiDbException $oException) { $this->SetException($oException); } } return $aResult; } /** * @param string $sTableName * @return array */ public function GetTableIndexes($sTableName) { $aResult = false; if ($this->Connect()) { try { $aResult = $this->oConnector->GetTableIndexes($sTableName); } catch (CApiDbException $oException) { $this->SetException($oException); } } return $aResult; } /** * @return string */ public function Prefix() { return $this->sPrefix; } /** * @return string */ public function GetError() { return '#'.$this->oConnector->ErrorCode.': '.$this->oConnector->ErrorDesc; } /** * @return CApiDbException */ public function GetException() { return $this->oLastException; } /** * @param CApiDbException $oException */ public function SetException($oException) { $this->oLastException = $oException; } /** * @param string $sSql * @return bool */ protected function isSlaveSql($sSql) { return in_array(strtoupper(substr(trim($sSql), 0, 6)), array('SELECT')); } }