v.0.1
This commit is contained in:
		
							
								
								
									
										139
									
								
								vendor/illuminate/database/Connectors/Connector.php
									
									
									
									
										vendored
									
									
										Executable file
									
								
							
							
						
						
									
										139
									
								
								vendor/illuminate/database/Connectors/Connector.php
									
									
									
									
										vendored
									
									
										Executable file
									
								
							@@ -0,0 +1,139 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace Illuminate\Database\Connectors;
 | 
			
		||||
 | 
			
		||||
use Doctrine\DBAL\Driver\PDOConnection;
 | 
			
		||||
use Exception;
 | 
			
		||||
use Illuminate\Database\DetectsLostConnections;
 | 
			
		||||
use PDO;
 | 
			
		||||
use Throwable;
 | 
			
		||||
 | 
			
		||||
class Connector
 | 
			
		||||
{
 | 
			
		||||
    use DetectsLostConnections;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * The default PDO connection options.
 | 
			
		||||
     *
 | 
			
		||||
     * @var array
 | 
			
		||||
     */
 | 
			
		||||
    protected $options = [
 | 
			
		||||
        PDO::ATTR_CASE => PDO::CASE_NATURAL,
 | 
			
		||||
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
 | 
			
		||||
        PDO::ATTR_ORACLE_NULLS => PDO::NULL_NATURAL,
 | 
			
		||||
        PDO::ATTR_STRINGIFY_FETCHES => false,
 | 
			
		||||
        PDO::ATTR_EMULATE_PREPARES => false,
 | 
			
		||||
    ];
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Create a new PDO connection.
 | 
			
		||||
     *
 | 
			
		||||
     * @param  string  $dsn
 | 
			
		||||
     * @param  array  $config
 | 
			
		||||
     * @param  array  $options
 | 
			
		||||
     * @return \PDO
 | 
			
		||||
     *
 | 
			
		||||
     * @throws \Exception
 | 
			
		||||
     */
 | 
			
		||||
    public function createConnection($dsn, array $config, array $options)
 | 
			
		||||
    {
 | 
			
		||||
        [$username, $password] = [
 | 
			
		||||
            $config['username'] ?? null, $config['password'] ?? null,
 | 
			
		||||
        ];
 | 
			
		||||
 | 
			
		||||
        try {
 | 
			
		||||
            return $this->createPdoConnection(
 | 
			
		||||
                $dsn, $username, $password, $options
 | 
			
		||||
            );
 | 
			
		||||
        } catch (Exception $e) {
 | 
			
		||||
            return $this->tryAgainIfCausedByLostConnection(
 | 
			
		||||
                $e, $dsn, $username, $password, $options
 | 
			
		||||
            );
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Create a new PDO connection instance.
 | 
			
		||||
     *
 | 
			
		||||
     * @param  string  $dsn
 | 
			
		||||
     * @param  string  $username
 | 
			
		||||
     * @param  string  $password
 | 
			
		||||
     * @param  array  $options
 | 
			
		||||
     * @return \PDO
 | 
			
		||||
     */
 | 
			
		||||
    protected function createPdoConnection($dsn, $username, $password, $options)
 | 
			
		||||
    {
 | 
			
		||||
        if (class_exists(PDOConnection::class) && ! $this->isPersistentConnection($options)) {
 | 
			
		||||
            return new PDOConnection($dsn, $username, $password, $options);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return new PDO($dsn, $username, $password, $options);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Determine if the connection is persistent.
 | 
			
		||||
     *
 | 
			
		||||
     * @param  array  $options
 | 
			
		||||
     * @return bool
 | 
			
		||||
     */
 | 
			
		||||
    protected function isPersistentConnection($options)
 | 
			
		||||
    {
 | 
			
		||||
        return isset($options[PDO::ATTR_PERSISTENT]) &&
 | 
			
		||||
               $options[PDO::ATTR_PERSISTENT];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Handle an exception that occurred during connect execution.
 | 
			
		||||
     *
 | 
			
		||||
     * @param  \Throwable  $e
 | 
			
		||||
     * @param  string  $dsn
 | 
			
		||||
     * @param  string  $username
 | 
			
		||||
     * @param  string  $password
 | 
			
		||||
     * @param  array  $options
 | 
			
		||||
     * @return \PDO
 | 
			
		||||
     *
 | 
			
		||||
     * @throws \Exception
 | 
			
		||||
     */
 | 
			
		||||
    protected function tryAgainIfCausedByLostConnection(Throwable $e, $dsn, $username, $password, $options)
 | 
			
		||||
    {
 | 
			
		||||
        if ($this->causedByLostConnection($e)) {
 | 
			
		||||
            return $this->createPdoConnection($dsn, $username, $password, $options);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        throw $e;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the PDO options based on the configuration.
 | 
			
		||||
     *
 | 
			
		||||
     * @param  array  $config
 | 
			
		||||
     * @return array
 | 
			
		||||
     */
 | 
			
		||||
    public function getOptions(array $config)
 | 
			
		||||
    {
 | 
			
		||||
        $options = $config['options'] ?? [];
 | 
			
		||||
 | 
			
		||||
        return array_diff_key($this->options, $options) + $options;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the default PDO connection options.
 | 
			
		||||
     *
 | 
			
		||||
     * @return array
 | 
			
		||||
     */
 | 
			
		||||
    public function getDefaultOptions()
 | 
			
		||||
    {
 | 
			
		||||
        return $this->options;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Set the default PDO connection options.
 | 
			
		||||
     *
 | 
			
		||||
     * @param  array  $options
 | 
			
		||||
     * @return void
 | 
			
		||||
     */
 | 
			
		||||
    public function setDefaultOptions(array $options)
 | 
			
		||||
    {
 | 
			
		||||
        $this->options = $options;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user