public function getPdoConnection($datasource) { if (!isset($this->pdoConnections[$datasource])) { $buildConnection = $this->getConnection($datasource); $buildConnection['dsn'] = str_replace("@DB@", $datasource, $buildConnection['dsn']); $this->pdoConnections[$datasource] = Propel::initConnection($buildConnection, $datasource); } return $this->pdoConnections[$datasource]; }
/** * @static * @param string $connectionName * @return PropelPDO */ public static function instanciate($connectionName) { $propelConfiguration = Propel::getConfiguration(); if (isset($propelConfiguration['datasources'][$connectionName]['connection'])) { $parameters = $propelConfiguration['datasources'][$connectionName]['connection']; } else { if (isset($propelConfiguration['datasources'][Propel::getDefaultDB()])) { $propelConfiguration['datasources'][$connectionName] = $propelConfiguration['datasources'][Propel::getDefaultDB()]; Propel::setConfiguration(new PropelConfiguration($propelConfiguration)); $parameters = $propelConfiguration['datasources'][$connectionName]['connection']; } else { throw new Exception(sprintf("Unable to find connection parameters for connection '%s'", $connectionName)); } } return Propel::initConnection($parameters, $connectionName); }
/** * Gets an already-opened read PDO connection or opens a new one for passed-in db name. * * @param string $name The datasource name that is used to look up the DSN * from the runtime configuation file. Empty name not allowed. * * @return PDO A database connection * * @throws PropelException - if connection cannot be configured or initialized. */ public static function getSlaveConnection($name) { if (!isset(self::$connectionMap[$name]['slave'])) { $slaveconfigs = isset(self::$configuration['datasources'][$name]['slaves']) ? self::$configuration['datasources'][$name]['slaves'] : null; if (empty($slaveconfigs)) { // no slaves configured for this datasource // fallback to the master connection self::$connectionMap[$name]['slave'] = self::getMasterConnection($name); } else { // Initialize a new slave if (isset($slaveconfigs['connection']['dsn'])) { // only one slave connection configured $conparams = $slaveconfigs['connection']; } else { // more than one sleve connection configured // pickup a random one $randkey = array_rand($slaveconfigs['connection']); $conparams = $slaveconfigs['connection'][$randkey]; if (empty($conparams)) { throw new PropelException('No connection information in your runtime configuration file for SLAVE [' . $randkey . '] to datasource [' . $name . ']'); } } // initialize slave connection $con = Propel::initConnection($conparams, $name); self::$connectionMap[$name]['slave'] = $con; } } // if datasource slave not set return self::$connectionMap[$name]['slave']; }
/** * Gets an already-opened PDO connection or opens a new one for passed-in db name. * * @param string $name The datasource name that is used to look up the DSN from the runtime configuation file. * @param string $mode The connection mode (this applies to replication systems). * * @return PDO A database connection * * @throws PropelException - if connection cannot be configured or initialized. */ public static function getConnection($name = null, $mode = Propel::CONNECTION_WRITE) { if ($name === null) { $name = self::getDefaultDB(); } // IF a WRITE-mode connection was requested // or Propel is configured to always use the master connection // or the slave for this connection has already been set to FALSE (indicating no slave) // THEN return the master connection. if ($mode != Propel::CONNECTION_READ || self::$forceMasterConnection || isset(self::$connectionMap[$name]['slave']) && self::$connectionMap[$name]['slave'] === false) { if (!isset(self::$connectionMap[$name]['master'])) { // load connection parameter for master connection $conparams = isset(self::$configuration['datasources'][$name]['connection']) ? self::$configuration['datasources'][$name]['connection'] : null; if (empty($conparams)) { throw new PropelException('No connection information in your runtime configuration file for datasource [' . $name . ']'); } // initialize master connection $con = Propel::initConnection($conparams, $name); self::$connectionMap[$name]['master'] = $con; } return self::$connectionMap[$name]['master']; } else { if (!isset(self::$connectionMap[$name]['slave'])) { // we've already ensured that the configuration exists, in previous if-statement $slaveconfigs = isset(self::$configuration['datasources'][$name]['slaves']) ? self::$configuration['datasources'][$name]['slaves'] : null; if (empty($slaveconfigs)) { // no slaves configured for this datasource self::$connectionMap[$name]['slave'] = false; return self::getConnection($name, Propel::CONNECTION_WRITE); // Recurse to get the WRITE connection } else { // Initialize a new slave if (isset($slaveconfigs['connection']['dsn'])) { // only one slave connection configured $conparams = $slaveconfigs['connection']; } else { $randkey = array_rand($slaveconfigs['connection']); $conparams = $slaveconfigs['connection'][$randkey]; if (empty($conparams)) { throw new PropelException('No connection information in your runtime configuration file for SLAVE [' . $randkey . '] to datasource [' . $name . ']'); } } // initialize master connection $con = Propel::initConnection($conparams, $name); self::$connectionMap[$name]['slave'] = $con; } } // if datasource slave not set return self::$connectionMap[$name]['slave']; } // if mode == CONNECTION_WRITE }
protected static function getAvailableSlaveConnection($name, $configs) { if (isset($configs['connection']['dsn'])) { // only one slave connection configured $servers = array( 'single' => $configs['connection'] ); } else { $servers = $configs['connection']; } $keys = array_keys($servers); shuffle($keys); // Weed out blatantly broken configurations or blacklisted servers foreach ($keys as $i => $key) { $conparams = $servers[$key]; $dsn = $conparams['dsn']; if (empty($conparams)) { throw new PropelException('No connection information in your runtime configuration file for SLAVE ['.$randkiey.'] to datasource ['.$dsn.']'); } if (self::isServerBlacklisted($dsn)) { unset($servers[$key], $keys[$i]); } } $_SERVER['failed-slaves'] = array(); foreach ($keys as $key) { $conparams = $servers[$key]; $dsn = $conparams['dsn']; try { return Propel::initConnection($conparams, $name); } catch (PropelException $e) { $_SERVER['failed-slaves'][] = $dsn; self::blacklistServer($dsn); } } throw new PropelException('No valid connection information in your runtime configuration file for slaves on datasource [' . $name . '].'); }