mirror of
https://github.com/dg/dibi.git
synced 2025-08-04 05:07:36 +02:00
renamed driver classes
This commit is contained in:
@@ -23,6 +23,18 @@ use const PHP_SAPI;
|
|||||||
*/
|
*/
|
||||||
class Connection
|
class Connection
|
||||||
{
|
{
|
||||||
|
private const Drivers = [
|
||||||
|
'firebird' => Drivers\Ibase\Connection::class,
|
||||||
|
'mysqli' => Drivers\MySQLi\Connection::class,
|
||||||
|
'odbc' => Drivers\ODBC\Connection::class,
|
||||||
|
'oracle' => Drivers\OCI8\Connection::class,
|
||||||
|
'pdo' => Drivers\PDO\Connection::class,
|
||||||
|
'postgre' => Drivers\PgSQL\Connection::class,
|
||||||
|
'sqlite3' => Drivers\SQLite3\Connection::class,
|
||||||
|
'sqlite' => Drivers\SQLite3\Connection::class,
|
||||||
|
'sqlsrv' => Drivers\SQLSrv\Connection::class,
|
||||||
|
];
|
||||||
|
|
||||||
/** function (Event $event); Occurs after query is executed */
|
/** function (Event $event); Occurs after query is executed */
|
||||||
public ?array $onEvent = [];
|
public ?array $onEvent = [];
|
||||||
private array $config;
|
private array $config;
|
||||||
@@ -131,8 +143,7 @@ class Connection
|
|||||||
$class = $this->config['driver'];
|
$class = $this->config['driver'];
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
$class = preg_replace(['#\W#', '#sql#'], ['_', 'Sql'], ucfirst(strtolower($this->config['driver'])));
|
$class = self::Drivers[strtolower($this->config['driver'])] ?? throw new Exception("Unknown driver '{$this->config['driver']}'.");
|
||||||
$class = "Dibi\\Drivers\\{$class}Driver";
|
|
||||||
if (!class_exists($class)) {
|
if (!class_exists($class)) {
|
||||||
throw new Exception("Unable to create instance of Dibi driver '$class'.");
|
throw new Exception("Unable to create instance of Dibi driver '$class'.");
|
||||||
}
|
}
|
||||||
@@ -286,7 +297,7 @@ class Connection
|
|||||||
throw $e;
|
throw $e;
|
||||||
}
|
}
|
||||||
|
|
||||||
$res = $this->createResultSet($res ?: new Drivers\NoDataResult(max(0, $this->driver->getAffectedRows())));
|
$res = $this->createResultSet($res ?: new Drivers\Dummy\Result(max(0, $this->driver->getAffectedRows())));
|
||||||
if ($event) {
|
if ($event) {
|
||||||
$this->onEvent($event->done($res));
|
$this->onEvent($event->done($res));
|
||||||
}
|
}
|
||||||
|
@@ -7,15 +7,16 @@
|
|||||||
|
|
||||||
declare(strict_types=1);
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace Dibi\Drivers;
|
namespace Dibi\Drivers\Dummy;
|
||||||
|
|
||||||
use Dibi;
|
use Dibi;
|
||||||
|
use Dibi\Drivers;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The dummy driver for testing purposes.
|
* The dummy driver for testing purposes.
|
||||||
*/
|
*/
|
||||||
class DummyDriver implements Connection, Result, Engine
|
class Connection implements Drivers\Connection, Drivers\Result, Drivers\Engine
|
||||||
{
|
{
|
||||||
public function disconnect(): void
|
public function disconnect(): void
|
||||||
{
|
{
|
||||||
@@ -64,7 +65,7 @@ class DummyDriver implements Connection, Result, Engine
|
|||||||
/**
|
/**
|
||||||
* Returns the connection reflector.
|
* Returns the connection reflector.
|
||||||
*/
|
*/
|
||||||
public function getReflector(): Engine
|
public function getReflector(): Drivers\Engine
|
||||||
{
|
{
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
@@ -7,14 +7,15 @@
|
|||||||
|
|
||||||
declare(strict_types=1);
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace Dibi\Drivers;
|
namespace Dibi\Drivers\Dummy;
|
||||||
|
|
||||||
|
use Dibi\Drivers;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The driver for no result set.
|
* The driver for no result set.
|
||||||
*/
|
*/
|
||||||
class NoDataResult implements Result
|
class Result implements Drivers\Result
|
||||||
{
|
{
|
||||||
public function __construct(
|
public function __construct(
|
||||||
private readonly int $rows,
|
private readonly int $rows,
|
@@ -7,14 +7,16 @@
|
|||||||
|
|
||||||
declare(strict_types=1);
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace Dibi\Drivers;
|
namespace Dibi\Drivers\Engines;
|
||||||
|
|
||||||
|
use Dibi\Drivers\Connection;
|
||||||
|
use Dibi\Drivers\Engine;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The reflector for Firebird/InterBase database.
|
* The reflector for Firebird/InterBase database.
|
||||||
*/
|
*/
|
||||||
class FirebirdReflector implements Engine
|
class FirebirdEngine implements Engine
|
||||||
{
|
{
|
||||||
public function __construct(
|
public function __construct(
|
||||||
private readonly Connection $driver,
|
private readonly Connection $driver,
|
@@ -7,16 +7,18 @@
|
|||||||
|
|
||||||
declare(strict_types=1);
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace Dibi\Drivers;
|
namespace Dibi\Drivers\Engines;
|
||||||
|
|
||||||
use Dibi;
|
use Dibi;
|
||||||
|
use Dibi\Drivers\Connection;
|
||||||
|
use Dibi\Drivers\Engine;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The reflector for MySQL databases.
|
* The reflector for MySQL databases.
|
||||||
* @internal
|
* @internal
|
||||||
*/
|
*/
|
||||||
class MySqlReflector implements Engine
|
class MySQLEngine implements Engine
|
||||||
{
|
{
|
||||||
public function __construct(
|
public function __construct(
|
||||||
private readonly Connection $driver,
|
private readonly Connection $driver,
|
@@ -7,15 +7,17 @@
|
|||||||
|
|
||||||
declare(strict_types=1);
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace Dibi\Drivers;
|
namespace Dibi\Drivers\Engines;
|
||||||
|
|
||||||
use Dibi;
|
use Dibi;
|
||||||
|
use Dibi\Drivers\Connection;
|
||||||
|
use Dibi\Drivers\Engine;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The reflector for ODBC connections.
|
* The reflector for ODBC connections.
|
||||||
*/
|
*/
|
||||||
class OdbcReflector implements Engine
|
class ODBCEngine implements Engine
|
||||||
{
|
{
|
||||||
public function __construct(
|
public function __construct(
|
||||||
private readonly Connection $driver,
|
private readonly Connection $driver,
|
@@ -7,15 +7,17 @@
|
|||||||
|
|
||||||
declare(strict_types=1);
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace Dibi\Drivers;
|
namespace Dibi\Drivers\Engines;
|
||||||
|
|
||||||
use Dibi;
|
use Dibi;
|
||||||
|
use Dibi\Drivers\Connection;
|
||||||
|
use Dibi\Drivers\Engine;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The reflector for Oracle database.
|
* The reflector for Oracle database.
|
||||||
*/
|
*/
|
||||||
class OracleReflector implements Engine
|
class OracleEngine implements Engine
|
||||||
{
|
{
|
||||||
public function __construct(
|
public function __construct(
|
||||||
private readonly Connection $driver,
|
private readonly Connection $driver,
|
@@ -7,14 +7,16 @@
|
|||||||
|
|
||||||
declare(strict_types=1);
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace Dibi\Drivers;
|
namespace Dibi\Drivers\Engines;
|
||||||
|
|
||||||
|
use Dibi\Drivers\Connection;
|
||||||
|
use Dibi\Drivers\Engine;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The reflector for PostgreSQL database.
|
* The reflector for PostgreSQL database.
|
||||||
*/
|
*/
|
||||||
class PostgreReflector implements Engine
|
class PostgreSQLEngine implements Engine
|
||||||
{
|
{
|
||||||
public function __construct(
|
public function __construct(
|
||||||
private readonly Connection $driver,
|
private readonly Connection $driver,
|
@@ -7,16 +7,17 @@
|
|||||||
|
|
||||||
declare(strict_types=1);
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace Dibi\Drivers;
|
namespace Dibi\Drivers\Engines;
|
||||||
|
|
||||||
use Dibi;
|
use Dibi;
|
||||||
use function sprintf;
|
use Dibi\Drivers\Connection;
|
||||||
|
use Dibi\Drivers\Engine;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The reflector for Microsoft SQL Server and SQL Azure databases.
|
* The reflector for Microsoft SQL Server and SQL Azure databases.
|
||||||
*/
|
*/
|
||||||
class SqlsrvReflector implements Engine
|
class SQLServerEngine implements Engine
|
||||||
{
|
{
|
||||||
public function __construct(
|
public function __construct(
|
||||||
private readonly Connection $driver,
|
private readonly Connection $driver,
|
@@ -7,14 +7,16 @@
|
|||||||
|
|
||||||
declare(strict_types=1);
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace Dibi\Drivers;
|
namespace Dibi\Drivers\Engines;
|
||||||
|
|
||||||
|
use Dibi\Drivers\Connection;
|
||||||
|
use Dibi\Drivers\Engine;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The reflector for SQLite database.
|
* The reflector for SQLite database.
|
||||||
*/
|
*/
|
||||||
class SqliteReflector implements Engine
|
class SQLiteEngine implements Engine
|
||||||
{
|
{
|
||||||
public function __construct(
|
public function __construct(
|
||||||
private readonly Connection $driver,
|
private readonly Connection $driver,
|
@@ -7,9 +7,10 @@
|
|||||||
|
|
||||||
declare(strict_types=1);
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace Dibi\Drivers;
|
namespace Dibi\Drivers\Ibase;
|
||||||
|
|
||||||
use Dibi;
|
use Dibi;
|
||||||
|
use Dibi\Drivers;
|
||||||
use Dibi\Helpers;
|
use Dibi\Helpers;
|
||||||
use function is_resource;
|
use function is_resource;
|
||||||
|
|
||||||
@@ -25,7 +26,7 @@ use function is_resource;
|
|||||||
* - buffers (int) => buffers is the number of database buffers to allocate for the server-side cache. If 0 or omitted, server chooses its own default.
|
* - buffers (int) => buffers is the number of database buffers to allocate for the server-side cache. If 0 or omitted, server chooses its own default.
|
||||||
* - resource (resource) => existing connection resource
|
* - resource (resource) => existing connection resource
|
||||||
*/
|
*/
|
||||||
class FirebirdDriver implements Connection
|
class Connection implements Drivers\Connection
|
||||||
{
|
{
|
||||||
public const ErrorExceptionThrown = -836;
|
public const ErrorExceptionThrown = -836;
|
||||||
|
|
||||||
@@ -200,9 +201,9 @@ class FirebirdDriver implements Connection
|
|||||||
/**
|
/**
|
||||||
* Returns the connection reflector.
|
* Returns the connection reflector.
|
||||||
*/
|
*/
|
||||||
public function getReflector(): Engine
|
public function getReflector(): Drivers\Engine
|
||||||
{
|
{
|
||||||
return new FirebirdReflector($this);
|
return new Drivers\Engines\FirebirdEngine($this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -210,9 +211,9 @@ class FirebirdDriver implements Connection
|
|||||||
* Result set driver factory.
|
* Result set driver factory.
|
||||||
* @param resource $resource
|
* @param resource $resource
|
||||||
*/
|
*/
|
||||||
public function createResultDriver($resource): FirebirdResult
|
public function createResultDriver($resource): Result
|
||||||
{
|
{
|
||||||
return new FirebirdResult($resource);
|
return new Result($resource);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@@ -7,9 +7,10 @@
|
|||||||
|
|
||||||
declare(strict_types=1);
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace Dibi\Drivers;
|
namespace Dibi\Drivers\Ibase;
|
||||||
|
|
||||||
use Dibi;
|
use Dibi;
|
||||||
|
use Dibi\Drivers;
|
||||||
use Dibi\Helpers;
|
use Dibi\Helpers;
|
||||||
use function is_resource;
|
use function is_resource;
|
||||||
|
|
||||||
@@ -17,7 +18,7 @@ use function is_resource;
|
|||||||
/**
|
/**
|
||||||
* The driver for Firebird/InterBase result set.
|
* The driver for Firebird/InterBase result set.
|
||||||
*/
|
*/
|
||||||
class FirebirdResult implements Result
|
class Result implements Drivers\Result
|
||||||
{
|
{
|
||||||
public function __construct(
|
public function __construct(
|
||||||
/** @var resource */
|
/** @var resource */
|
||||||
@@ -46,7 +47,7 @@ class FirebirdResult implements Result
|
|||||||
: @ibase_fetch_row($this->resultSet, IBASE_TEXT); // intentionally @
|
: @ibase_fetch_row($this->resultSet, IBASE_TEXT); // intentionally @
|
||||||
|
|
||||||
if (ibase_errcode()) {
|
if (ibase_errcode()) {
|
||||||
if (ibase_errcode() === FirebirdDriver::ERROR_EXCEPTION_THROWN) {
|
if (ibase_errcode() === Connection::ERROR_EXCEPTION_THROWN) {
|
||||||
preg_match('/exception (\d+) (\w+) (.*)/is', ibase_errmsg(), $match);
|
preg_match('/exception (\d+) (\w+) (.*)/is', ibase_errmsg(), $match);
|
||||||
throw new Dibi\ProcedureException($match[3], $match[1], $match[2]);
|
throw new Dibi\ProcedureException($match[3], $match[1], $match[2]);
|
||||||
|
|
@@ -7,9 +7,10 @@
|
|||||||
|
|
||||||
declare(strict_types=1);
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace Dibi\Drivers;
|
namespace Dibi\Drivers\MySQLi;
|
||||||
|
|
||||||
use Dibi;
|
use Dibi;
|
||||||
|
use Dibi\Drivers;
|
||||||
use function in_array;
|
use function in_array;
|
||||||
use const MYSQLI_REPORT_OFF, MYSQLI_STORE_RESULT, MYSQLI_USE_RESULT, PREG_SET_ORDER;
|
use const MYSQLI_REPORT_OFF, MYSQLI_STORE_RESULT, MYSQLI_USE_RESULT, PREG_SET_ORDER;
|
||||||
|
|
||||||
@@ -32,7 +33,7 @@ use const MYSQLI_REPORT_OFF, MYSQLI_STORE_RESULT, MYSQLI_USE_RESULT, PREG_SET_OR
|
|||||||
* - sqlmode => see http://dev.mysql.com/doc/refman/5.0/en/server-sql-mode.html
|
* - sqlmode => see http://dev.mysql.com/doc/refman/5.0/en/server-sql-mode.html
|
||||||
* - resource (mysqli) => existing connection resource
|
* - resource (mysqli) => existing connection resource
|
||||||
*/
|
*/
|
||||||
class MySqliDriver implements Connection
|
class Connection implements Drivers\Connection
|
||||||
{
|
{
|
||||||
public const ErrorAccessDenied = 1045;
|
public const ErrorAccessDenied = 1045;
|
||||||
public const ErrorDuplicateEntry = 1062;
|
public const ErrorDuplicateEntry = 1062;
|
||||||
@@ -265,18 +266,18 @@ class MySqliDriver implements Connection
|
|||||||
/**
|
/**
|
||||||
* Returns the connection reflector.
|
* Returns the connection reflector.
|
||||||
*/
|
*/
|
||||||
public function getReflector(): Engine
|
public function getReflector(): Drivers\Engine
|
||||||
{
|
{
|
||||||
return new MySqlReflector($this);
|
return new Drivers\Engines\MySQLEngine($this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Result set driver factory.
|
* Result set driver factory.
|
||||||
*/
|
*/
|
||||||
public function createResultDriver(\mysqli_result $result): MySqliResult
|
public function createResultDriver(\mysqli_result $result): Result
|
||||||
{
|
{
|
||||||
return new MySqliResult($result, $this->buffered);
|
return new Result($result, $this->buffered);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@@ -7,16 +7,17 @@
|
|||||||
|
|
||||||
declare(strict_types=1);
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace Dibi\Drivers;
|
namespace Dibi\Drivers\MySQLi;
|
||||||
|
|
||||||
use Dibi;
|
use Dibi;
|
||||||
|
use Dibi\Drivers;
|
||||||
use const MYSQLI_TYPE_LONG, MYSQLI_TYPE_SHORT, MYSQLI_TYPE_TIME, MYSQLI_TYPE_TINY;
|
use const MYSQLI_TYPE_LONG, MYSQLI_TYPE_SHORT, MYSQLI_TYPE_TIME, MYSQLI_TYPE_TINY;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The driver for MySQL result set.
|
* The driver for MySQL result set.
|
||||||
*/
|
*/
|
||||||
class MySqliResult implements Result
|
class Result implements Drivers\Result
|
||||||
{
|
{
|
||||||
public function __construct(
|
public function __construct(
|
||||||
private readonly \mysqli_result $resultSet,
|
private readonly \mysqli_result $resultSet,
|
@@ -7,9 +7,10 @@
|
|||||||
|
|
||||||
declare(strict_types=1);
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace Dibi\Drivers;
|
namespace Dibi\Drivers\OCI8;
|
||||||
|
|
||||||
use Dibi;
|
use Dibi;
|
||||||
|
use Dibi\Drivers;
|
||||||
use function in_array, is_resource;
|
use function in_array, is_resource;
|
||||||
|
|
||||||
|
|
||||||
@@ -26,7 +27,7 @@ use function in_array, is_resource;
|
|||||||
* - resource (resource) => existing connection resource
|
* - resource (resource) => existing connection resource
|
||||||
* - persistent => Creates persistent connections with oci_pconnect instead of oci_new_connect
|
* - persistent => Creates persistent connections with oci_pconnect instead of oci_new_connect
|
||||||
*/
|
*/
|
||||||
class OracleDriver implements Connection
|
class Connection implements Drivers\Connection
|
||||||
{
|
{
|
||||||
/** @var resource */
|
/** @var resource */
|
||||||
private $connection;
|
private $connection;
|
||||||
@@ -190,9 +191,9 @@ class OracleDriver implements Connection
|
|||||||
/**
|
/**
|
||||||
* Returns the connection reflector.
|
* Returns the connection reflector.
|
||||||
*/
|
*/
|
||||||
public function getReflector(): Engine
|
public function getReflector(): Drivers\Engine
|
||||||
{
|
{
|
||||||
return new OracleReflector($this);
|
return new Drivers\Engines\OracleEngine($this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -200,9 +201,9 @@ class OracleDriver implements Connection
|
|||||||
* Result set driver factory.
|
* Result set driver factory.
|
||||||
* @param resource $resource
|
* @param resource $resource
|
||||||
*/
|
*/
|
||||||
public function createResultDriver($resource): OracleResult
|
public function createResultDriver($resource): Result
|
||||||
{
|
{
|
||||||
return new OracleResult($resource);
|
return new Result($resource);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@@ -7,16 +7,17 @@
|
|||||||
|
|
||||||
declare(strict_types=1);
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace Dibi\Drivers;
|
namespace Dibi\Drivers\OCI8;
|
||||||
|
|
||||||
use Dibi;
|
use Dibi;
|
||||||
|
use Dibi\Drivers;
|
||||||
use function is_resource;
|
use function is_resource;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The driver for Oracle result set.
|
* The driver for Oracle result set.
|
||||||
*/
|
*/
|
||||||
class OracleResult implements Result
|
class Result implements Drivers\Result
|
||||||
{
|
{
|
||||||
public function __construct(
|
public function __construct(
|
||||||
/** @var resource */
|
/** @var resource */
|
@@ -7,9 +7,10 @@
|
|||||||
|
|
||||||
declare(strict_types=1);
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace Dibi\Drivers;
|
namespace Dibi\Drivers\ODBC;
|
||||||
|
|
||||||
use Dibi;
|
use Dibi;
|
||||||
|
use Dibi\Drivers;
|
||||||
use function is_resource;
|
use function is_resource;
|
||||||
|
|
||||||
|
|
||||||
@@ -24,7 +25,7 @@ use function is_resource;
|
|||||||
* - resource (resource) => existing connection resource
|
* - resource (resource) => existing connection resource
|
||||||
* - microseconds (bool) => use microseconds in datetime format?
|
* - microseconds (bool) => use microseconds in datetime format?
|
||||||
*/
|
*/
|
||||||
class OdbcDriver implements Connection
|
class Connection implements Drivers\Connection
|
||||||
{
|
{
|
||||||
/** @var resource */
|
/** @var resource */
|
||||||
private $connection;
|
private $connection;
|
||||||
@@ -176,9 +177,9 @@ class OdbcDriver implements Connection
|
|||||||
/**
|
/**
|
||||||
* Returns the connection reflector.
|
* Returns the connection reflector.
|
||||||
*/
|
*/
|
||||||
public function getReflector(): Engine
|
public function getReflector(): Drivers\Engine
|
||||||
{
|
{
|
||||||
return new OdbcReflector($this);
|
return new Drivers\Engines\ODBCEngine($this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -186,9 +187,9 @@ class OdbcDriver implements Connection
|
|||||||
* Result set driver factory.
|
* Result set driver factory.
|
||||||
* @param resource $resource
|
* @param resource $resource
|
||||||
*/
|
*/
|
||||||
public function createResultDriver($resource): OdbcResult
|
public function createResultDriver($resource): Result
|
||||||
{
|
{
|
||||||
return new OdbcResult($resource);
|
return new Result($resource);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@@ -7,16 +7,17 @@
|
|||||||
|
|
||||||
declare(strict_types=1);
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace Dibi\Drivers;
|
namespace Dibi\Drivers\ODBC;
|
||||||
|
|
||||||
use Dibi;
|
use Dibi;
|
||||||
|
use Dibi\Drivers;
|
||||||
use function is_resource;
|
use function is_resource;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The driver interacting with result set via ODBC connections.
|
* The driver interacting with result set via ODBC connections.
|
||||||
*/
|
*/
|
||||||
class OdbcResult implements Result
|
class Result implements Drivers\Result
|
||||||
{
|
{
|
||||||
private int $row = 0;
|
private int $row = 0;
|
||||||
|
|
@@ -7,9 +7,11 @@
|
|||||||
|
|
||||||
declare(strict_types=1);
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace Dibi\Drivers;
|
namespace Dibi\Drivers\PDO;
|
||||||
|
|
||||||
use Dibi;
|
use Dibi;
|
||||||
|
use Dibi\Drivers;
|
||||||
|
use Dibi\Drivers\Engines;
|
||||||
use Dibi\Helpers;
|
use Dibi\Helpers;
|
||||||
use PDO;
|
use PDO;
|
||||||
use function sprintf;
|
use function sprintf;
|
||||||
@@ -25,7 +27,7 @@ use function sprintf;
|
|||||||
* - options (array) => driver specific options {@see PDO::__construct}
|
* - options (array) => driver specific options {@see PDO::__construct}
|
||||||
* - resource (PDO) => existing connection
|
* - resource (PDO) => existing connection
|
||||||
*/
|
*/
|
||||||
class PdoDriver implements Connection
|
class Connection implements Drivers\Connection
|
||||||
{
|
{
|
||||||
private ?PDO $connection;
|
private ?PDO $connection;
|
||||||
private ?int $affectedRows;
|
private ?int $affectedRows;
|
||||||
@@ -94,10 +96,10 @@ class PdoDriver implements Connection
|
|||||||
$code ??= 0;
|
$code ??= 0;
|
||||||
$message = "SQLSTATE[$sqlState]: $message";
|
$message = "SQLSTATE[$sqlState]: $message";
|
||||||
throw match ($this->driverName) {
|
throw match ($this->driverName) {
|
||||||
'mysql' => MySqliDriver::createException($message, $code, $sql),
|
'mysql' => Drivers\MySQLi\Connection::createException($message, $code, $sql),
|
||||||
'oci' => OracleDriver::createException($message, $code, $sql),
|
'oci' => Drivers\OCI8\Connection::createException($message, $code, $sql),
|
||||||
'pgsql' => PostgreDriver::createException($message, $sqlState, $sql),
|
'pgsql' => Drivers\PgSQL\Connection::createException($message, $sqlState, $sql),
|
||||||
'sqlite' => SqliteDriver::createException($message, $code, $sql),
|
'sqlite' => Drivers\SQLite3\Connection::createException($message, $code, $sql),
|
||||||
default => new Dibi\DriverException($message, $code, $sql),
|
default => new Dibi\DriverException($message, $code, $sql),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -172,14 +174,14 @@ class PdoDriver implements Connection
|
|||||||
/**
|
/**
|
||||||
* Returns the connection reflector.
|
* Returns the connection reflector.
|
||||||
*/
|
*/
|
||||||
public function getReflector(): Engine
|
public function getReflector(): Drivers\Engine
|
||||||
{
|
{
|
||||||
return match ($this->driverName) {
|
return match ($this->driverName) {
|
||||||
'mysql' => new MySqlReflector($this),
|
'mysql' => new Engines\MySQLEngine($this),
|
||||||
'oci' => new OracleReflector($this),
|
'oci' => new Engines\OracleEngine($this),
|
||||||
'pgsql' => new PostgreReflector($this),
|
'pgsql' => new Engines\PostgreSQLEngine($this),
|
||||||
'sqlite' => new SqliteReflector($this),
|
'sqlite' => new Engines\SQLiteEngine($this),
|
||||||
'mssql', 'dblib', 'sqlsrv' => new SqlsrvReflector($this),
|
'mssql', 'dblib', 'sqlsrv' => new Engines\SQLServerEngine($this),
|
||||||
default => throw new Dibi\NotSupportedException,
|
default => throw new Dibi\NotSupportedException,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -188,9 +190,9 @@ class PdoDriver implements Connection
|
|||||||
/**
|
/**
|
||||||
* Result set driver factory.
|
* Result set driver factory.
|
||||||
*/
|
*/
|
||||||
public function createResultDriver(\PDOStatement $result): PdoResult
|
public function createResultDriver(\PDOStatement $result): Result
|
||||||
{
|
{
|
||||||
return new PdoResult($result, $this->driverName);
|
return new Result($result, $this->driverName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@@ -7,9 +7,10 @@
|
|||||||
|
|
||||||
declare(strict_types=1);
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace Dibi\Drivers;
|
namespace Dibi\Drivers\PDO;
|
||||||
|
|
||||||
use Dibi;
|
use Dibi;
|
||||||
|
use Dibi\Drivers;
|
||||||
use Dibi\Helpers;
|
use Dibi\Helpers;
|
||||||
use PDO;
|
use PDO;
|
||||||
|
|
||||||
@@ -17,7 +18,7 @@ use PDO;
|
|||||||
/**
|
/**
|
||||||
* The driver for PDO result set.
|
* The driver for PDO result set.
|
||||||
*/
|
*/
|
||||||
class PdoResult implements Result
|
class Result implements Drivers\Result
|
||||||
{
|
{
|
||||||
public function __construct(
|
public function __construct(
|
||||||
private ?\PDOStatement $resultSet,
|
private ?\PDOStatement $resultSet,
|
@@ -7,9 +7,10 @@
|
|||||||
|
|
||||||
declare(strict_types=1);
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace Dibi\Drivers;
|
namespace Dibi\Drivers\PgSQL;
|
||||||
|
|
||||||
use Dibi;
|
use Dibi;
|
||||||
|
use Dibi\Drivers;
|
||||||
use Dibi\Helpers;
|
use Dibi\Helpers;
|
||||||
use PgSql;
|
use PgSql;
|
||||||
use function in_array, is_array, is_resource, strlen;
|
use function in_array, is_array, is_resource, strlen;
|
||||||
@@ -27,7 +28,7 @@ use function in_array, is_array, is_resource, strlen;
|
|||||||
* - resource (PgSql\Connection) => existing connection resource
|
* - resource (PgSql\Connection) => existing connection resource
|
||||||
* - connect_type (int) => see pg_connect()
|
* - connect_type (int) => see pg_connect()
|
||||||
*/
|
*/
|
||||||
class PostgreDriver implements Connection
|
class Connection implements Drivers\Connection
|
||||||
{
|
{
|
||||||
private PgSql\Connection $connection;
|
private PgSql\Connection $connection;
|
||||||
private ?int $affectedRows;
|
private ?int $affectedRows;
|
||||||
@@ -232,18 +233,18 @@ class PostgreDriver implements Connection
|
|||||||
/**
|
/**
|
||||||
* Returns the connection reflector.
|
* Returns the connection reflector.
|
||||||
*/
|
*/
|
||||||
public function getReflector(): Engine
|
public function getReflector(): Drivers\Engine
|
||||||
{
|
{
|
||||||
return new PostgreReflector($this);
|
return new Drivers\Engines\PostgreSQLEngine($this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Result set driver factory.
|
* Result set driver factory.
|
||||||
*/
|
*/
|
||||||
public function createResultDriver(PgSql\Result $resource): PostgreResult
|
public function createResultDriver(PgSql\Result $resource): Result
|
||||||
{
|
{
|
||||||
return new PostgreResult($resource);
|
return new Result($resource);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@@ -7,8 +7,9 @@
|
|||||||
|
|
||||||
declare(strict_types=1);
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace Dibi\Drivers;
|
namespace Dibi\Drivers\PgSQL;
|
||||||
|
|
||||||
|
use Dibi\Drivers;
|
||||||
use Dibi\Helpers;
|
use Dibi\Helpers;
|
||||||
use PgSql;
|
use PgSql;
|
||||||
use function is_resource;
|
use function is_resource;
|
||||||
@@ -17,7 +18,7 @@ use function is_resource;
|
|||||||
/**
|
/**
|
||||||
* The driver for PostgreSQL result set.
|
* The driver for PostgreSQL result set.
|
||||||
*/
|
*/
|
||||||
class PostgreResult implements Result
|
class Result implements Drivers\Result
|
||||||
{
|
{
|
||||||
public function __construct(
|
public function __construct(
|
||||||
private readonly PgSql\Result $resultSet,
|
private readonly PgSql\Result $resultSet,
|
@@ -7,9 +7,10 @@
|
|||||||
|
|
||||||
declare(strict_types=1);
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace Dibi\Drivers;
|
namespace Dibi\Drivers\SQLSrv;
|
||||||
|
|
||||||
use Dibi;
|
use Dibi;
|
||||||
|
use Dibi\Drivers;
|
||||||
use Dibi\Helpers;
|
use Dibi\Helpers;
|
||||||
use function is_resource, sprintf;
|
use function is_resource, sprintf;
|
||||||
|
|
||||||
@@ -26,7 +27,7 @@ use function is_resource, sprintf;
|
|||||||
* - charset => character encoding to set (default is UTF-8)
|
* - charset => character encoding to set (default is UTF-8)
|
||||||
* - resource (resource) => existing connection resource
|
* - resource (resource) => existing connection resource
|
||||||
*/
|
*/
|
||||||
class SqlsrvDriver implements Connection
|
class Connection implements Drivers\Connection
|
||||||
{
|
{
|
||||||
/** @var resource */
|
/** @var resource */
|
||||||
private $connection;
|
private $connection;
|
||||||
@@ -171,9 +172,9 @@ class SqlsrvDriver implements Connection
|
|||||||
/**
|
/**
|
||||||
* Returns the connection reflector.
|
* Returns the connection reflector.
|
||||||
*/
|
*/
|
||||||
public function getReflector(): Engine
|
public function getReflector(): Drivers\Engine
|
||||||
{
|
{
|
||||||
return new SqlsrvReflector($this);
|
return new Drivers\Engines\SQLServerEngine($this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -181,9 +182,9 @@ class SqlsrvDriver implements Connection
|
|||||||
* Result set driver factory.
|
* Result set driver factory.
|
||||||
* @param resource $resource
|
* @param resource $resource
|
||||||
*/
|
*/
|
||||||
public function createResultDriver($resource): SqlsrvResult
|
public function createResultDriver($resource): Result
|
||||||
{
|
{
|
||||||
return new SqlsrvResult($resource);
|
return new Result($resource);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@@ -7,16 +7,17 @@
|
|||||||
|
|
||||||
declare(strict_types=1);
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace Dibi\Drivers;
|
namespace Dibi\Drivers\SQLSrv;
|
||||||
|
|
||||||
use Dibi;
|
use Dibi;
|
||||||
|
use Dibi\Drivers;
|
||||||
use function is_resource;
|
use function is_resource;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The driver for Microsoft SQL Server and SQL Azure result set.
|
* The driver for Microsoft SQL Server and SQL Azure result set.
|
||||||
*/
|
*/
|
||||||
class SqlsrvResult implements Result
|
class Result implements Drivers\Result
|
||||||
{
|
{
|
||||||
public function __construct(
|
public function __construct(
|
||||||
/** @var resource */
|
/** @var resource */
|
@@ -7,9 +7,10 @@
|
|||||||
|
|
||||||
declare(strict_types=1);
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace Dibi\Drivers;
|
namespace Dibi\Drivers\SQLite3;
|
||||||
|
|
||||||
use Dibi;
|
use Dibi;
|
||||||
|
use Dibi\Drivers;
|
||||||
use Dibi\Helpers;
|
use Dibi\Helpers;
|
||||||
use SQLite3;
|
use SQLite3;
|
||||||
|
|
||||||
@@ -23,7 +24,7 @@ use SQLite3;
|
|||||||
* - formatDateTime => how to format datetime in SQL (@see date)
|
* - formatDateTime => how to format datetime in SQL (@see date)
|
||||||
* - resource (SQLite3) => existing connection resource
|
* - resource (SQLite3) => existing connection resource
|
||||||
*/
|
*/
|
||||||
class SqliteDriver implements Connection
|
class Connection implements Drivers\Connection
|
||||||
{
|
{
|
||||||
private SQLite3 $connection;
|
private SQLite3 $connection;
|
||||||
private string $fmtDate;
|
private string $fmtDate;
|
||||||
@@ -174,18 +175,18 @@ class SqliteDriver implements Connection
|
|||||||
/**
|
/**
|
||||||
* Returns the connection reflector.
|
* Returns the connection reflector.
|
||||||
*/
|
*/
|
||||||
public function getReflector(): Engine
|
public function getReflector(): Drivers\Engine
|
||||||
{
|
{
|
||||||
return new SqliteReflector($this);
|
return new Drivers\Engines\SQLiteEngine($this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Result set driver factory.
|
* Result set driver factory.
|
||||||
*/
|
*/
|
||||||
public function createResultDriver(\SQLite3Result $result): SqliteResult
|
public function createResultDriver(\SQLite3Result $result): Result
|
||||||
{
|
{
|
||||||
return new SqliteResult($result);
|
return new Result($result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@@ -7,9 +7,10 @@
|
|||||||
|
|
||||||
declare(strict_types=1);
|
declare(strict_types=1);
|
||||||
|
|
||||||
namespace Dibi\Drivers;
|
namespace Dibi\Drivers\SQLite3;
|
||||||
|
|
||||||
use Dibi;
|
use Dibi;
|
||||||
|
use Dibi\Drivers;
|
||||||
use Dibi\Helpers;
|
use Dibi\Helpers;
|
||||||
use const SQLITE3_ASSOC, SQLITE3_BLOB, SQLITE3_FLOAT, SQLITE3_INTEGER, SQLITE3_NULL, SQLITE3_NUM, SQLITE3_TEXT;
|
use const SQLITE3_ASSOC, SQLITE3_BLOB, SQLITE3_FLOAT, SQLITE3_INTEGER, SQLITE3_NULL, SQLITE3_NUM, SQLITE3_TEXT;
|
||||||
|
|
||||||
@@ -17,7 +18,7 @@ use const SQLITE3_ASSOC, SQLITE3_BLOB, SQLITE3_FLOAT, SQLITE3_INTEGER, SQLITE3_N
|
|||||||
/**
|
/**
|
||||||
* The driver for SQLite result set.
|
* The driver for SQLite result set.
|
||||||
*/
|
*/
|
||||||
class SqliteResult implements Result
|
class Result implements Drivers\Result
|
||||||
{
|
{
|
||||||
public function __construct(
|
public function __construct(
|
||||||
private readonly \SQLite3Result $resultSet,
|
private readonly \SQLite3Result $resultSet,
|
@@ -1,18 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This file is part of the Dibi, smart database abstraction layer (https://dibiphp.com)
|
|
||||||
* Copyright (c) 2005 David Grudl (https://davidgrudl.com)
|
|
||||||
*/
|
|
||||||
|
|
||||||
declare(strict_types=1);
|
|
||||||
|
|
||||||
namespace Dibi\Drivers;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Alias for SqliteDriver driver.
|
|
||||||
*/
|
|
||||||
class Sqlite3Driver extends SqliteDriver
|
|
||||||
{
|
|
||||||
}
|
|
@@ -1,18 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This file is part of the Dibi, smart database abstraction layer (https://dibiphp.com)
|
|
||||||
* Copyright (c) 2005 David Grudl (https://davidgrudl.com)
|
|
||||||
*/
|
|
||||||
|
|
||||||
declare(strict_types=1);
|
|
||||||
|
|
||||||
namespace Dibi\Drivers;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Alias for SqliteResult driver.
|
|
||||||
*/
|
|
||||||
class Sqlite3Result extends SqliteResult
|
|
||||||
{
|
|
||||||
}
|
|
@@ -2,12 +2,14 @@
|
|||||||
|
|
||||||
declare(strict_types=1);
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
use Dibi\Drivers\SQLSrv\Connection;
|
||||||
|
use Dibi\Drivers\SQLSrv\Result;
|
||||||
use Tester\Assert;
|
use Tester\Assert;
|
||||||
|
|
||||||
require __DIR__ . '/bootstrap.php';
|
require __DIR__ . '/bootstrap.php';
|
||||||
|
|
||||||
|
|
||||||
class MockDriver extends Dibi\Drivers\SqlsrvDriver
|
class MockDriver extends Connection
|
||||||
{
|
{
|
||||||
public function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
@@ -19,14 +21,14 @@ class MockDriver extends Dibi\Drivers\SqlsrvDriver
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public function query(string $sql): ?Dibi\Drivers\Result
|
public function query(string $sql): ?Result
|
||||||
{
|
{
|
||||||
return new MockResult;
|
return new MockResult;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
class MockResult extends Dibi\Drivers\SqlsrvResult
|
class MockResult extends Result
|
||||||
{
|
{
|
||||||
public function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
|
@@ -14,7 +14,7 @@ function buildPdoDriver(?int $errorMode)
|
|||||||
$pdo->setAttribute(PDO::ATTR_ERRMODE, $errorMode);
|
$pdo->setAttribute(PDO::ATTR_ERRMODE, $errorMode);
|
||||||
}
|
}
|
||||||
|
|
||||||
new Dibi\Drivers\PdoDriver(['resource' => $pdo]);
|
new Dibi\Drivers\PDO\Connection(['resource' => $pdo]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user