aboutsummaryrefslogtreecommitdiff
path: root/includes/vendor/aura/sql/src/ConnectionLocator.php
diff options
context:
space:
mode:
authors1n <[email protected]>2020-03-28 10:36:41 -0700
committers1n <[email protected]>2020-03-28 10:36:41 -0700
commit25b7d2aab61ae6421398d3abae5da6ffe590333d (patch)
tree611985ec78bb2d94099c9fd5dd687f5c9cee6f3e /includes/vendor/aura/sql/src/ConnectionLocator.php
parentInitial commit (diff)
downloadcrack.cf-backup-25b7d2aab61ae6421398d3abae5da6ffe590333d.tar.xz
crack.cf-backup-25b7d2aab61ae6421398d3abae5da6ffe590333d.zip
3/28/2020, 10:36HEADmaster
Diffstat (limited to 'includes/vendor/aura/sql/src/ConnectionLocator.php')
-rw-r--r--includes/vendor/aura/sql/src/ConnectionLocator.php315
1 files changed, 315 insertions, 0 deletions
diff --git a/includes/vendor/aura/sql/src/ConnectionLocator.php b/includes/vendor/aura/sql/src/ConnectionLocator.php
new file mode 100644
index 0000000..5afaf51
--- /dev/null
+++ b/includes/vendor/aura/sql/src/ConnectionLocator.php
@@ -0,0 +1,315 @@
+<?php
+/**
+ *
+ * This file is part of Aura for PHP.
+ *
+ * @license http://opensource.org/licenses/bsd-license.php BSD
+ *
+ */
+namespace Aura\Sql;
+
+/**
+ *
+ * Manages PDO connection objects for default, read, and write connections.
+ *
+ * @package Aura.Sql
+ *
+ */
+class ConnectionLocator implements ConnectionLocatorInterface
+{
+ /**
+ *
+ * A registry of PDO connection entries.
+ *
+ * @var array
+ *
+ */
+ protected $registry = array(
+ 'default' => null,
+ 'read' => array(),
+ 'write' => array(),
+ );
+
+ /**
+ *
+ * Whether or not registry entries have been converted to objects.
+ *
+ * @var array
+ *
+ */
+ protected $converted = array(
+ 'default' => false,
+ 'read' => array(),
+ 'write' => array(),
+ );
+
+ /**
+ *
+ * Whether or not to turn on profiling when retrieving a connection.
+ *
+ * @var bool
+ *
+ */
+ protected $profiling = false;
+
+ /**
+ *
+ * Constructor.
+ *
+ * @param callable $default A callable to create a default connection.
+ *
+ * @param array $read An array of callables to create read connections.
+ *
+ * @param array $write An array of callables to create write connections.
+ *
+ */
+ public function __construct(
+ $default = null,
+ array $read = array(),
+ array $write = array()
+ ) {
+ if ($default) {
+ $this->setDefault($default);
+ }
+ foreach ($read as $name => $callable) {
+ $this->setRead($name, $callable);
+ }
+ foreach ($write as $name => $callable) {
+ $this->setWrite($name, $callable);
+ }
+ }
+
+ /**
+ *
+ * Sets the default connection registry entry.
+ *
+ * @param callable $callable The registry entry.
+ *
+ * @return null
+ *
+ */
+ public function setDefault($callable)
+ {
+ $this->registry['default'] = $callable;
+ $this->converted['default'] = false;
+ }
+
+ /**
+ *
+ * Returns the default connection object.
+ *
+ * @return ExtendedPdoInterface
+ *
+ */
+ public function getDefault()
+ {
+ if (! $this->converted['default']) {
+ $callable = $this->registry['default'];
+ $this->registry['default'] = call_user_func($callable);
+ $this->converted['default'] = true;
+ }
+
+ $connection = $this->registry['default'];
+ $this->setProfiler($connection);
+ return $connection;
+ }
+
+ /**
+ *
+ * Sets a read connection registry entry by name.
+ *
+ * @param string $name The name of the registry entry.
+ *
+ * @param callable $callable The registry entry.
+ *
+ * @return null
+ *
+ */
+ public function setRead($name, $callable)
+ {
+ $this->registry['read'][$name] = $callable;
+ $this->converted['read'][$name] = false;
+ }
+
+ /**
+ *
+ * Returns a read connection by name; if no name is given, picks a
+ * random connection; if no read connections are present, returns the
+ * default connection.
+ *
+ * @param string $name The read connection name to return.
+ *
+ * @return ExtendedPdoInterface
+ *
+ */
+ public function getRead($name = null)
+ {
+ return $this->getConnection('read', $name);
+ }
+
+ /**
+ *
+ * Sets a write connection registry entry by name.
+ *
+ * @param string $name The name of the registry entry.
+ *
+ * @param callable $callable The registry entry.
+ *
+ * @return null
+ *
+ */
+ public function setWrite($name, $callable)
+ {
+ $this->registry['write'][$name] = $callable;
+ $this->converted['write'][$name] = false;
+ }
+
+ /**
+ *
+ * Returns a write connection by name; if no name is given, picks a
+ * random connection; if no write connections are present, returns the
+ * default connection.
+ *
+ * @param string $name The write connection name to return.
+ *
+ * @return ExtendedPdoInterface
+ *
+ */
+ public function getWrite($name = null)
+ {
+ return $this->getConnection('write', $name);
+ }
+
+ /**
+ *
+ * Returns a connection by name.
+ *
+ * @param string $type The connection type ('read' or 'write').
+ *
+ * @param string $name The name of the connection.
+ *
+ * @return ExtendedPdoInterface
+ *
+ * @throws Exception\ConnectionNotFound
+ */
+ protected function getConnection($type, $name)
+ {
+ if (! $this->registry[$type]) {
+ return $this->getDefault();
+ }
+
+ if (! $name) {
+ $name = array_rand($this->registry[$type]);
+ }
+
+ if (! isset($this->registry[$type][$name])) {
+ throw new Exception\ConnectionNotFound("{$type}:{$name}");
+ }
+
+ if (! $this->converted[$type][$name]) {
+ $callable = $this->registry[$type][$name];
+ $this->registry[$type][$name] = call_user_func($callable);
+ $this->converted[$type][$name] = true;
+ }
+
+ $connection = $this->registry[$type][$name];
+ $this->setProfiler($connection);
+ return $connection;
+ }
+
+ /**
+ *
+ * Given a connection, enable or disable profiling on it. If a profiler has
+ * not been set into the connection, this will instantiate and set one.
+ *
+ * @param ExtendedPdo $connection The connection.
+ *
+ * @return null
+ *
+ */
+ protected function setProfiler(ExtendedPdo $connection)
+ {
+ $profiler = $connection->getProfiler();
+
+ if (! $this->profiling && ! $profiler) {
+ return;
+ }
+
+ if (! $profiler) {
+ $profiler = new Profiler();
+ $connection->setProfiler($profiler);
+ }
+
+ $profiler->setActive($this->profiling);
+ }
+
+ /**
+ *
+ * Set profiling on all connections at retrieval time?
+ *
+ * @param bool $profiling True to enable, or false to disable, profiling on
+ * each connection as it is retrieved.
+ *
+ * @return null
+ *
+ */
+ public function setProfiling($profiling = true)
+ {
+ $this->profiling = (bool) $profiling;
+ }
+
+ /**
+ *
+ * Gets the profiles from all connections.
+ *
+ * @return array
+ *
+ */
+ public function getProfiles()
+ {
+ $profiles = array();
+
+ if ($this->converted['default']) {
+ $connection = $this->registry['default'];
+ $this->addProfiles('default', $connection, $profiles);
+ }
+
+ foreach (array('read', 'write') as $type) {
+ foreach ($this->registry[$type] as $name) {
+ if ($this->converted[$type][$name]) {
+ $connection = $this->registry[$type][$name];
+ $this->addProfiles("{$type}:{$name}", $connection, $profiles);
+ }
+ }
+ }
+
+ ksort($profiles);
+ return $profiles;
+ }
+
+ /**
+ *
+ * Adds profiles from a connection, with a label for the connection name.
+ *
+ * @param string $label The connection label.
+ *
+ * @param ExtendedPdo $connection The connection.
+ *
+ * @param array &$profiles Add the connection profiles to this array, in
+ * place.
+ *
+ * @return null
+ */
+ protected function addProfiles($label, ExtendedPdo $connection, &$profiles)
+ {
+ $profiler = $connection->getProfiler();
+ if (! $profiler) {
+ return;
+ }
+
+ foreach ($profiler->getProfiles() as $key => $profile) {
+ $profile = array('connection' => $label) + $profile;
+ $profiles[$key] = $profile;
+ }
+ }
+}