Seditio Source
Root |
./othercms/xenForo 2.2.8/src/XF/Db/PostgreSql/Adapter.php
<?php /** @noinspection PhpComposerExtensionStubsInspection */

namespace XF\Db\PostgreSql;

use
XF\Db\Exception;
use
XF\Db\ForeignAdapter;

class
Adapter extends ForeignAdapter
{
   
/**
     * @var resource
     */
   
protected $connection;

    protected function
getStatementClass()
    {
        return
'XF\Db\PostgreSql\Statement';
    }

   
/**
     * @return resource
     * @throws \XF\Db\Exception
     */
   
public function getConnection()
    {
        if (!
$this->connection)
        {
           
$this->connection = $this->makeConnection($this->config);
        }

        return
$this->connection;
    }

    protected function
_rawQuery($query)
    {
       
$connection = $this->getConnection();
        return
pg_query($connection, $query);
    }

    public function
isConnected()
    {
       
$connection = $this->getConnection();
        return
pg_connection_status($connection) === PGSQL_CONNECTION_OK;
    }

    public function
ping()
    {
       
$connection = $this->getConnection();
        return
pg_ping($connection);
    }

    public function
lastInsertId()
    {
       
// note: no (viable) equivalent in PostgreSQL
       
throw new Exception('It is not possible to retrieve the PostgreSQL last insert ID at this time.');
    }

    public function
getServerVersion()
    {
       
$connection = $this->getConnection();
       
$version = pg_version($connection);
        return
$version['server'] ?? null;
    }

    public function
getConnectionStats()
    {
       
// note: no equivalent in PostgreSQL
       
return [];
    }

    public function
escapeString($string)
    {
       
$connection = $this->getConnection();
        return
pg_escape_string($connection, $string);
    }

    public function
getDefaultTableConfig()
    {
       
// note: no equivalent in PostgreSQL
       
return [];
    }

   
/**
     * @param array $config
     *
     * @return resource
     * @throws \XF\Db\Exception
     */
   
protected function makeConnection(array $config)
    {
       
$config = $this->standardizeConfig($config);

        try
        {
           
$connection = pg_connect("host=$config[host] port=$config[port] dbname=$config[dbname] user=$config[username] password=$config[password]");
        }
        catch (\
ErrorException $e)
        {
            throw new \
XF\Db\Exception($e->getMessage());
        }

        return
$connection;
    }

   
/**
     * @param array $config
     *
     * @return array
     */
   
protected function standardizeConfig(array $config)
    {
        return
array_replace_recursive([
           
'host' => 'localhost',
           
'username' => '',
           
'password' => '',
           
'dbname' => '',
           
'port' => 5432
       
], $config);
    }
}