From 4cb2500c9dc34b9149bd9b3583ad8acab9a10abb Mon Sep 17 00:00:00 2001 From: David Grudl Date: Tue, 3 Sep 2024 16:35:54 +0200 Subject: [PATCH 01/11] removed dead code --- tests/dibi/Result.normalize.phpt | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/tests/dibi/Result.normalize.phpt b/tests/dibi/Result.normalize.phpt index 7a08ce9a..6ecea60a 100644 --- a/tests/dibi/Result.normalize.phpt +++ b/tests/dibi/Result.normalize.phpt @@ -222,14 +222,10 @@ test('', function () { Assert::same(['col' => 1], $result->test(['col' => true])); Assert::same(['col' => 0], $result->test(['col' => false])); - if (PHP_VERSION_ID < 80000) { - Assert::same(['col' => 0], @$result->test(['col' => ''])); // triggers warning since PHP 7.1 - } else { - Assert::exception( - fn() => Assert::same(['col' => 0], $result->test(['col' => ''])), - TypeError::class, - ); - } + Assert::exception( + fn() => Assert::same(['col' => 0], $result->test(['col' => ''])), + TypeError::class, + ); Assert::same(['col' => 0], $result->test(['col' => '0'])); Assert::same(['col' => 1], $result->test(['col' => '1'])); From 3d13aff61d601c51f8e956f5a172c1d72da89272 Mon Sep 17 00:00:00 2001 From: David Grudl Date: Tue, 3 Sep 2024 16:22:07 +0200 Subject: [PATCH 02/11] uses promoted properties --- src/Dibi/Bridges/Nette/DibiExtension22.php | 12 ++++-------- src/Dibi/Bridges/Nette/DibiExtension3.php | 12 ++++-------- src/Dibi/Bridges/Tracy/Panel.php | 11 +++++------ src/Dibi/Drivers/FirebirdReflector.php | 9 +++------ src/Dibi/Drivers/FirebirdResult.php | 14 ++++---------- src/Dibi/Drivers/MySqlReflector.php | 9 +++------ src/Dibi/Drivers/MySqliResult.php | 12 ++++-------- src/Dibi/Drivers/NoDataResult.php | 9 +++------ src/Dibi/Drivers/OdbcReflector.php | 9 +++------ src/Dibi/Drivers/OdbcResult.php | 12 ++++-------- src/Dibi/Drivers/OracleReflector.php | 9 +++------ src/Dibi/Drivers/OracleResult.php | 14 ++++---------- src/Dibi/Drivers/PdoResult.php | 12 ++++-------- src/Dibi/Drivers/PostgreReflector.php | 12 ++++-------- src/Dibi/Drivers/PostgreResult.php | 14 ++++---------- src/Dibi/Drivers/SqliteReflector.php | 9 +++------ src/Dibi/Drivers/SqliteResult.php | 9 +++------ src/Dibi/Drivers/SqlsrvReflector.php | 9 +++------ src/Dibi/Drivers/SqlsrvResult.php | 14 ++++---------- src/Dibi/Loggers/FileLogger.php | 16 +++++----------- src/Dibi/Reflection/Column.php | 15 ++++----------- src/Dibi/Reflection/Database.php | 11 ++++------- src/Dibi/Reflection/ForeignKey.php | 14 ++++---------- src/Dibi/Reflection/Index.php | 10 +++------- src/Dibi/Reflection/Result.php | 8 +++----- src/Dibi/ResultIterator.php | 7 +++---- 26 files changed, 95 insertions(+), 197 deletions(-) diff --git a/src/Dibi/Bridges/Nette/DibiExtension22.php b/src/Dibi/Bridges/Nette/DibiExtension22.php index a01e1e41..8f310b03 100644 --- a/src/Dibi/Bridges/Nette/DibiExtension22.php +++ b/src/Dibi/Bridges/Nette/DibiExtension22.php @@ -19,14 +19,10 @@ */ class DibiExtension22 extends Nette\DI\CompilerExtension { - private ?bool $debugMode; - private ?bool $cliMode; - - - public function __construct(?bool $debugMode = null, ?bool $cliMode = null) - { - $this->debugMode = $debugMode; - $this->cliMode = $cliMode; + public function __construct( + private ?bool $debugMode = null, + private ?bool $cliMode = null, + ) { } diff --git a/src/Dibi/Bridges/Nette/DibiExtension3.php b/src/Dibi/Bridges/Nette/DibiExtension3.php index b8b4cece..b5921dac 100644 --- a/src/Dibi/Bridges/Nette/DibiExtension3.php +++ b/src/Dibi/Bridges/Nette/DibiExtension3.php @@ -20,14 +20,10 @@ */ class DibiExtension3 extends Nette\DI\CompilerExtension { - private ?bool $debugMode; - private ?bool $cliMode; - - - public function __construct(?bool $debugMode = null, ?bool $cliMode = null) - { - $this->debugMode = $debugMode; - $this->cliMode = $cliMode; + public function __construct( + private ?bool $debugMode = null, + private ?bool $cliMode = null, + ) { } diff --git a/src/Dibi/Bridges/Tracy/Panel.php b/src/Dibi/Bridges/Tracy/Panel.php index 97694b51..50071e39 100644 --- a/src/Dibi/Bridges/Tracy/Panel.php +++ b/src/Dibi/Bridges/Tracy/Panel.php @@ -21,15 +21,14 @@ class Panel implements Tracy\IBarPanel { public static int $maxLength = 1000; - public bool|string $explain; - public int $filter; + private array $events = []; - public function __construct(bool $explain = true, ?int $filter = null) - { - $this->filter = $filter ?: Event::QUERY; - $this->explain = $explain; + public function __construct( + public bool|string $explain = true, + public int $filter = Event::QUERY, + ) { } diff --git a/src/Dibi/Drivers/FirebirdReflector.php b/src/Dibi/Drivers/FirebirdReflector.php index 4114f235..ea992896 100644 --- a/src/Dibi/Drivers/FirebirdReflector.php +++ b/src/Dibi/Drivers/FirebirdReflector.php @@ -17,12 +17,9 @@ */ class FirebirdReflector implements Dibi\Reflector { - private Dibi\Driver $driver; - - - public function __construct(Dibi\Driver $driver) - { - $this->driver = $driver; + public function __construct( + private Dibi\Driver $driver, + ) { } diff --git a/src/Dibi/Drivers/FirebirdResult.php b/src/Dibi/Drivers/FirebirdResult.php index a4c0ba78..38ca75c5 100644 --- a/src/Dibi/Drivers/FirebirdResult.php +++ b/src/Dibi/Drivers/FirebirdResult.php @@ -18,16 +18,10 @@ */ class FirebirdResult implements Dibi\ResultDriver { - /** @var resource */ - private $resultSet; - - - /** - * @param resource $resultSet - */ - public function __construct($resultSet) - { - $this->resultSet = $resultSet; + public function __construct( + /** @var resource */ + private $resultSet, + ) { } diff --git a/src/Dibi/Drivers/MySqlReflector.php b/src/Dibi/Drivers/MySqlReflector.php index dbd55828..d4e655d2 100644 --- a/src/Dibi/Drivers/MySqlReflector.php +++ b/src/Dibi/Drivers/MySqlReflector.php @@ -18,12 +18,9 @@ */ class MySqlReflector implements Dibi\Reflector { - private Dibi\Driver $driver; - - - public function __construct(Dibi\Driver $driver) - { - $this->driver = $driver; + public function __construct( + private Dibi\Driver $driver, + ) { } diff --git a/src/Dibi/Drivers/MySqliResult.php b/src/Dibi/Drivers/MySqliResult.php index 4469ef0c..20f8aa79 100644 --- a/src/Dibi/Drivers/MySqliResult.php +++ b/src/Dibi/Drivers/MySqliResult.php @@ -17,14 +17,10 @@ */ class MySqliResult implements Dibi\ResultDriver { - private \mysqli_result $resultSet; - private bool $buffered; - - - public function __construct(\mysqli_result $resultSet, bool $buffered) - { - $this->resultSet = $resultSet; - $this->buffered = $buffered; + public function __construct( + private \mysqli_result $resultSet, + private bool $buffered, + ) { } diff --git a/src/Dibi/Drivers/NoDataResult.php b/src/Dibi/Drivers/NoDataResult.php index f427dc4e..cec1547f 100644 --- a/src/Dibi/Drivers/NoDataResult.php +++ b/src/Dibi/Drivers/NoDataResult.php @@ -17,12 +17,9 @@ */ class NoDataResult implements Dibi\ResultDriver { - private int $rows; - - - public function __construct(int $rows) - { - $this->rows = $rows; + public function __construct( + private int $rows, + ) { } diff --git a/src/Dibi/Drivers/OdbcReflector.php b/src/Dibi/Drivers/OdbcReflector.php index 3285fe03..e922a49c 100644 --- a/src/Dibi/Drivers/OdbcReflector.php +++ b/src/Dibi/Drivers/OdbcReflector.php @@ -17,12 +17,9 @@ */ class OdbcReflector implements Dibi\Reflector { - private Dibi\Driver $driver; - - - public function __construct(Dibi\Driver $driver) - { - $this->driver = $driver; + public function __construct( + private Dibi\Driver $driver, + ) { } diff --git a/src/Dibi/Drivers/OdbcResult.php b/src/Dibi/Drivers/OdbcResult.php index c8d88e7d..3a985a83 100644 --- a/src/Dibi/Drivers/OdbcResult.php +++ b/src/Dibi/Drivers/OdbcResult.php @@ -17,17 +17,13 @@ */ class OdbcResult implements Dibi\ResultDriver { - /** @var resource */ - private $resultSet; private int $row = 0; - /** - * @param resource $resultSet - */ - public function __construct($resultSet) - { - $this->resultSet = $resultSet; + public function __construct( + /** @var resource */ + private $resultSet, + ) { } diff --git a/src/Dibi/Drivers/OracleReflector.php b/src/Dibi/Drivers/OracleReflector.php index 74c3db69..031d78fd 100644 --- a/src/Dibi/Drivers/OracleReflector.php +++ b/src/Dibi/Drivers/OracleReflector.php @@ -17,12 +17,9 @@ */ class OracleReflector implements Dibi\Reflector { - private Dibi\Driver $driver; - - - public function __construct(Dibi\Driver $driver) - { - $this->driver = $driver; + public function __construct( + private Dibi\Driver $driver, + ) { } diff --git a/src/Dibi/Drivers/OracleResult.php b/src/Dibi/Drivers/OracleResult.php index b1590546..ca691559 100644 --- a/src/Dibi/Drivers/OracleResult.php +++ b/src/Dibi/Drivers/OracleResult.php @@ -17,16 +17,10 @@ */ class OracleResult implements Dibi\ResultDriver { - /** @var resource */ - private $resultSet; - - - /** - * @param resource $resultSet - */ - public function __construct($resultSet) - { - $this->resultSet = $resultSet; + public function __construct( + /** @var resource */ + private $resultSet, + ) { } diff --git a/src/Dibi/Drivers/PdoResult.php b/src/Dibi/Drivers/PdoResult.php index d0e22371..f88d9f98 100644 --- a/src/Dibi/Drivers/PdoResult.php +++ b/src/Dibi/Drivers/PdoResult.php @@ -19,14 +19,10 @@ */ class PdoResult implements Dibi\ResultDriver { - private ?\PDOStatement $resultSet; - private string $driverName; - - - public function __construct(\PDOStatement $resultSet, string $driverName) - { - $this->resultSet = $resultSet; - $this->driverName = $driverName; + public function __construct( + private ?\PDOStatement $resultSet, + private string $driverName, + ) { } diff --git a/src/Dibi/Drivers/PostgreReflector.php b/src/Dibi/Drivers/PostgreReflector.php index 29a33c15..5bda3b9d 100644 --- a/src/Dibi/Drivers/PostgreReflector.php +++ b/src/Dibi/Drivers/PostgreReflector.php @@ -17,14 +17,10 @@ */ class PostgreReflector implements Dibi\Reflector { - private Dibi\Driver $driver; - private string $version; - - - public function __construct(Dibi\Driver $driver, string $version) - { - $this->driver = $driver; - $this->version = $version; + public function __construct( + private Dibi\Driver $driver, + private string $version, + ) { } diff --git a/src/Dibi/Drivers/PostgreResult.php b/src/Dibi/Drivers/PostgreResult.php index bcbecd29..0f2b00e0 100644 --- a/src/Dibi/Drivers/PostgreResult.php +++ b/src/Dibi/Drivers/PostgreResult.php @@ -19,16 +19,10 @@ */ class PostgreResult implements Dibi\ResultDriver { - /** @var resource|PgSql\Result */ - private $resultSet; - - - /** - * @param resource|PgSql\Result $resultSet - */ - public function __construct($resultSet) - { - $this->resultSet = $resultSet; + public function __construct( + /** @var resource|PgSql\Result */ + private $resultSet, + ) { } diff --git a/src/Dibi/Drivers/SqliteReflector.php b/src/Dibi/Drivers/SqliteReflector.php index a85018e4..a8ce36ca 100644 --- a/src/Dibi/Drivers/SqliteReflector.php +++ b/src/Dibi/Drivers/SqliteReflector.php @@ -17,12 +17,9 @@ */ class SqliteReflector implements Dibi\Reflector { - private Dibi\Driver $driver; - - - public function __construct(Dibi\Driver $driver) - { - $this->driver = $driver; + public function __construct( + private Dibi\Driver $driver, + ) { } diff --git a/src/Dibi/Drivers/SqliteResult.php b/src/Dibi/Drivers/SqliteResult.php index 218808b3..2c26e950 100644 --- a/src/Dibi/Drivers/SqliteResult.php +++ b/src/Dibi/Drivers/SqliteResult.php @@ -18,12 +18,9 @@ */ class SqliteResult implements Dibi\ResultDriver { - private \SQLite3Result $resultSet; - - - public function __construct(\SQLite3Result $resultSet) - { - $this->resultSet = $resultSet; + public function __construct( + private \SQLite3Result $resultSet, + ) { } diff --git a/src/Dibi/Drivers/SqlsrvReflector.php b/src/Dibi/Drivers/SqlsrvReflector.php index 32fec929..386cbb12 100644 --- a/src/Dibi/Drivers/SqlsrvReflector.php +++ b/src/Dibi/Drivers/SqlsrvReflector.php @@ -17,12 +17,9 @@ */ class SqlsrvReflector implements Dibi\Reflector { - private Dibi\Driver $driver; - - - public function __construct(Dibi\Driver $driver) - { - $this->driver = $driver; + public function __construct( + private Dibi\Driver $driver, + ) { } diff --git a/src/Dibi/Drivers/SqlsrvResult.php b/src/Dibi/Drivers/SqlsrvResult.php index ecd6ed53..8ad14a74 100644 --- a/src/Dibi/Drivers/SqlsrvResult.php +++ b/src/Dibi/Drivers/SqlsrvResult.php @@ -17,16 +17,10 @@ */ class SqlsrvResult implements Dibi\ResultDriver { - /** @var resource */ - private $resultSet; - - - /** - * @param resource $resultSet - */ - public function __construct($resultSet) - { - $this->resultSet = $resultSet; + public function __construct( + /** @var resource */ + private $resultSet, + ) { } diff --git a/src/Dibi/Loggers/FileLogger.php b/src/Dibi/Loggers/FileLogger.php index 24239e65..ca45288f 100644 --- a/src/Dibi/Loggers/FileLogger.php +++ b/src/Dibi/Loggers/FileLogger.php @@ -17,17 +17,11 @@ */ class FileLogger { - /** Name of the file where SQL errors should be logged */ - public string $file; - public int $filter; - private bool $errorsOnly; - - - public function __construct(string $file, ?int $filter = null, bool $errorsOnly = false) - { - $this->file = $file; - $this->filter = $filter ?: Dibi\Event::QUERY; - $this->errorsOnly = $errorsOnly; + public function __construct( + public string $file, + public int $filter = Dibi\Event::QUERY, + private bool $errorsOnly = false, + ) { } diff --git a/src/Dibi/Reflection/Column.php b/src/Dibi/Reflection/Column.php index 5415501b..44ed7f1c 100644 --- a/src/Dibi/Reflection/Column.php +++ b/src/Dibi/Reflection/Column.php @@ -27,17 +27,10 @@ */ class Column { - /** when created by Result */ - private ?Dibi\Reflector $reflector; - - /** @var array (name, nativetype, [table], [fullname], [size], [nullable], [default], [autoincrement], [vendor]) */ - private array $info; - - - public function __construct(?Dibi\Reflector $reflector, array $info) - { - $this->reflector = $reflector; - $this->info = $info; + public function __construct( + private ?Dibi\Reflector $reflector, + private array $info, + ) { } diff --git a/src/Dibi/Reflection/Database.php b/src/Dibi/Reflection/Database.php index a6c42efd..6a11ab72 100644 --- a/src/Dibi/Reflection/Database.php +++ b/src/Dibi/Reflection/Database.php @@ -21,17 +21,14 @@ */ class Database { - private Dibi\Reflector $reflector; - private ?string $name; - /** @var Table[] */ private array $tables; - public function __construct(Dibi\Reflector $reflector, ?string $name = null) - { - $this->reflector = $reflector; - $this->name = $name; + public function __construct( + private Dibi\Reflector $reflector, + private ?string $name = null, + ) { } diff --git a/src/Dibi/Reflection/ForeignKey.php b/src/Dibi/Reflection/ForeignKey.php index 492a66f3..68730b0f 100644 --- a/src/Dibi/Reflection/ForeignKey.php +++ b/src/Dibi/Reflection/ForeignKey.php @@ -19,16 +19,10 @@ */ class ForeignKey { - private string $name; - - /** @var array of [local, foreign, onDelete, onUpdate] */ - private array $references; - - - public function __construct(string $name, array $references) - { - $this->name = $name; - $this->references = $references; + public function __construct( + private string $name, + private array $references, + ) { } diff --git a/src/Dibi/Reflection/Index.php b/src/Dibi/Reflection/Index.php index 13fe1df7..29739f3f 100644 --- a/src/Dibi/Reflection/Index.php +++ b/src/Dibi/Reflection/Index.php @@ -21,13 +21,9 @@ */ class Index { - /** @var array (name, columns, [unique], [primary]) */ - private array $info; - - - public function __construct(array $info) - { - $this->info = $info; + public function __construct( + private array $info, + ) { } diff --git a/src/Dibi/Reflection/Result.php b/src/Dibi/Reflection/Result.php index 3cd1dd93..f62b5239 100644 --- a/src/Dibi/Reflection/Result.php +++ b/src/Dibi/Reflection/Result.php @@ -20,8 +20,6 @@ */ class Result { - private Dibi\ResultDriver $driver; - /** @var Column[]|null */ private ?array $columns; @@ -29,9 +27,9 @@ class Result private ?array $names; - public function __construct(Dibi\ResultDriver $driver) - { - $this->driver = $driver; + public function __construct( + private Dibi\ResultDriver $driver, + ) { } diff --git a/src/Dibi/ResultIterator.php b/src/Dibi/ResultIterator.php index 505489a9..d47ff882 100644 --- a/src/Dibi/ResultIterator.php +++ b/src/Dibi/ResultIterator.php @@ -15,14 +15,13 @@ */ class ResultIterator implements \Iterator, \Countable { - private Result $result; private mixed $row; private int $pointer = 0; - public function __construct(Result $result) - { - $this->result = $result; + public function __construct( + private Result $result, + ) { } From c3b5d0b0fb2ef3f5babb7dc69f1925d71a1f8f5b Mon Sep 17 00:00:00 2001 From: David Grudl Date: Tue, 3 Sep 2024 15:57:10 +0200 Subject: [PATCH 03/11] opened 6.0-dev --- composer.json | 2 +- src/Dibi/dibi.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/composer.json b/composer.json index eb8aa73e..21f0156d 100644 --- a/composer.json +++ b/composer.json @@ -33,7 +33,7 @@ }, "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "6.0-dev" } } } diff --git a/src/Dibi/dibi.php b/src/Dibi/dibi.php index 7ae4620f..58aaa84b 100644 --- a/src/Dibi/dibi.php +++ b/src/Dibi/dibi.php @@ -37,7 +37,7 @@ */ class dibi { - public const Version = '5.0.2'; + public const Version = '6.0-dev'; /** @deprecated use dibi::Version */ public const VERSION = self::Version; From 2d3105f51a4c6441b99569b94207ff3674b7743c Mon Sep 17 00:00:00 2001 From: David Grudl Date: Tue, 3 Sep 2024 16:25:05 +0200 Subject: [PATCH 04/11] requires PHP 8.2 --- .github/workflows/coding-style.yml | 4 ++-- .github/workflows/static-analysis.yml | 2 +- .github/workflows/tests.yml | 4 ++-- composer.json | 2 +- readme.md | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/coding-style.yml b/.github/workflows/coding-style.yml index 97e6c166..013331b5 100644 --- a/.github/workflows/coding-style.yml +++ b/.github/workflows/coding-style.yml @@ -10,7 +10,7 @@ jobs: - uses: actions/checkout@v4 - uses: shivammathur/setup-php@v2 with: - php-version: 8.0 + php-version: 8.2 coverage: none - run: composer create-project nette/code-checker temp/code-checker ^3 --no-progress @@ -24,7 +24,7 @@ jobs: - uses: actions/checkout@v4 - uses: shivammathur/setup-php@v2 with: - php-version: 8.0 + php-version: 8.2 coverage: none - run: composer create-project nette/coding-standard temp/coding-standard ^3 --no-progress diff --git a/.github/workflows/static-analysis.yml b/.github/workflows/static-analysis.yml index 5a39324e..6f22b2fb 100644 --- a/.github/workflows/static-analysis.yml +++ b/.github/workflows/static-analysis.yml @@ -13,7 +13,7 @@ jobs: - uses: actions/checkout@v4 - uses: shivammathur/setup-php@v2 with: - php-version: 8.0 + php-version: 8.2 coverage: none - run: composer install --no-progress --prefer-dist diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index d3176099..8337933e 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -11,7 +11,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - php: ['8.0', '8.1', '8.2', '8.3', '8.4'] + php: ['8.2', '8.3', '8.4'] fail-fast: false @@ -112,7 +112,7 @@ jobs: - name: Save Code Coverage - if: ${{ matrix.php == '8.0' }} + if: ${{ matrix.php == '8.2' }} env: COVERALLS_REPO_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | diff --git a/composer.json b/composer.json index 21f0156d..ab19434f 100644 --- a/composer.json +++ b/composer.json @@ -11,7 +11,7 @@ } ], "require": { - "php": "8.0 - 8.4" + "php": "8.2 - 8.4" }, "require-dev": { "tracy/tracy": "^2.9", diff --git a/readme.md b/readme.md index e75f2773..b225b203 100644 --- a/readme.md +++ b/readme.md @@ -34,7 +34,7 @@ Install Dibi via Composer: composer require dibi/dibi ``` -The Dibi 5.0 requires PHP version 8.0 and supports PHP up to 8.4. +The Dibi 5.0 requires PHP version 8.2 and supports PHP up to 8.4. Usage From fef6091e5c332e721b25b80e705e359b1ddac62b Mon Sep 17 00:00:00 2001 From: David Grudl Date: Tue, 3 Sep 2024 16:31:38 +0200 Subject: [PATCH 05/11] uses PHP 5.2 features --- examples/using-substitutions.php | 2 +- src/Dibi/Bridges/Tracy/Panel.php | 4 ++-- src/Dibi/Drivers/PostgreDriver.php | 19 +++++++------------ src/Dibi/Drivers/PostgreResult.php | 10 +++------- src/Dibi/Fluent.php | 2 +- src/Dibi/Helpers.php | 2 +- src/Dibi/Translator.php | 6 +++--- 7 files changed, 18 insertions(+), 27 deletions(-) diff --git a/examples/using-substitutions.php b/examples/using-substitutions.php index d10d85a1..058ed47b 100644 --- a/examples/using-substitutions.php +++ b/examples/using-substitutions.php @@ -45,7 +45,7 @@ function substFallBack($expr) // define callback -$dibi->getSubstitutes()->setCallback('substFallBack'); +$dibi->getSubstitutes()->setCallback(substFallBack(...)); // define substitutes as constants define('SUBST_ACCOUNT', 'eshop_'); diff --git a/src/Dibi/Bridges/Tracy/Panel.php b/src/Dibi/Bridges/Tracy/Panel.php index 50071e39..5e3d5ae1 100644 --- a/src/Dibi/Bridges/Tracy/Panel.php +++ b/src/Dibi/Bridges/Tracy/Panel.php @@ -35,8 +35,8 @@ public function __construct( public function register(Dibi\Connection $connection): void { Tracy\Debugger::getBar()->addPanel($this); - Tracy\Debugger::getBlueScreen()->addPanel([self::class, 'renderException']); - $connection->onEvent[] = [$this, 'logEvent']; + Tracy\Debugger::getBlueScreen()->addPanel(self::renderException(...)); + $connection->onEvent[] = $this->logEvent(...); } diff --git a/src/Dibi/Drivers/PostgreDriver.php b/src/Dibi/Drivers/PostgreDriver.php index 776e5288..ce3aa43e 100644 --- a/src/Dibi/Drivers/PostgreDriver.php +++ b/src/Dibi/Drivers/PostgreDriver.php @@ -23,13 +23,12 @@ * - schema => the schema search path * - charset => character encoding to set (default is utf8) * - persistent (bool) => try to find a persistent link? - * - resource (resource) => existing connection resource + * - resource (PgSql\Connection) => existing connection resource * - connect_type (int) => see pg_connect() */ class PostgreDriver implements Dibi\Driver { - /** @var resource|PgSql\Connection */ - private $connection; + private PgSql\Connection $connection; private ?int $affectedRows; @@ -72,7 +71,7 @@ public function __construct(array $config) restore_error_handler(); } - if (!is_resource($this->connection) && !$this->connection instanceof PgSql\Connection) { + if (!$this->connection instanceof PgSql\Connection) { throw new Dibi\DriverException($error ?: 'Connecting error.'); } @@ -118,7 +117,7 @@ public function query(string $sql): ?Dibi\ResultDriver if ($res === false) { throw static::createException(pg_last_error($this->connection), null, $sql); - } elseif (is_resource($res) || $res instanceof PgSql\Result) { + } elseif ($res instanceof PgSql\Result) { $this->affectedRows = Helpers::false2Null(pg_affected_rows($res)); if (pg_num_fields($res)) { return $this->createResultDriver($res); @@ -222,13 +221,10 @@ public function inTransaction(): bool /** * Returns the connection resource. - * @return resource|null */ - public function getResource(): mixed + public function getResource(): PgSql\Connection { - return is_resource($this->connection) || $this->connection instanceof PgSql\Connection - ? $this->connection - : null; + return $this->connection; } @@ -243,9 +239,8 @@ public function getReflector(): Dibi\Reflector /** * Result set driver factory. - * @param resource $resource */ - public function createResultDriver($resource): PostgreResult + public function createResultDriver(PgSql\Result $resource): PostgreResult { return new PostgreResult($resource); } diff --git a/src/Dibi/Drivers/PostgreResult.php b/src/Dibi/Drivers/PostgreResult.php index 0f2b00e0..62851e3a 100644 --- a/src/Dibi/Drivers/PostgreResult.php +++ b/src/Dibi/Drivers/PostgreResult.php @@ -20,8 +20,7 @@ class PostgreResult implements Dibi\ResultDriver { public function __construct( - /** @var resource|PgSql\Result */ - private $resultSet, + private PgSql\Result $resultSet, ) { } @@ -88,13 +87,10 @@ public function getResultColumns(): array /** * Returns the result set resource. - * @return resource|PgSql\Result|null */ - public function getResultResource(): mixed + public function getResultResource(): PgSql\Result { - return is_resource($this->resultSet) || $this->resultSet instanceof PgSql\Result - ? $this->resultSet - : null; + return $this->resultSet; } diff --git a/src/Dibi/Fluent.php b/src/Dibi/Fluent.php index 011ba5e2..c24c06e4 100644 --- a/src/Dibi/Fluent.php +++ b/src/Dibi/Fluent.php @@ -113,7 +113,7 @@ public function __construct(Connection $connection) $this->connection = $connection; if (!isset(self::$normalizer)) { - self::$normalizer = new HashMap([self::class, '_formatClause']); + self::$normalizer = new HashMap(self::_formatClause(...)); } } diff --git a/src/Dibi/Helpers.php b/src/Dibi/Helpers.php index 82bed671..83fca323 100644 --- a/src/Dibi/Helpers.php +++ b/src/Dibi/Helpers.php @@ -208,7 +208,7 @@ public static function detectType(string $type): ?string public static function getTypeCache(): HashMap { if (!isset(self::$types)) { - self::$types = new HashMap([self::class, 'detectType']); + self::$types = new HashMap(self::detectType(...)); } return self::$types; diff --git a/src/Dibi/Translator.php b/src/Dibi/Translator.php index 35d31c71..e20ee055 100644 --- a/src/Dibi/Translator.php +++ b/src/Dibi/Translator.php @@ -34,7 +34,7 @@ public function __construct(Connection $connection) { $this->connection = $connection; $this->driver = $connection->getDriver(); - $this->identifiers = new HashMap([$this, 'delimite']); + $this->identifiers = new HashMap($this->delimite(...)); } @@ -88,7 +88,7 @@ public function translate(array $args): string (\?) ## 11) placeholder )/xs XX, - [$this, 'cb'], + $this->cb(...), substr($arg, $toSkip), ); if (preg_last_error()) { @@ -434,7 +434,7 @@ public function formatValue(mixed $value, ?string $modifier): string :(\S*?:)([a-zA-Z0-9._]?) )/sx XX, - [$this, 'cb'], + $this->cb(...), substr($value, $toSkip), ); if (preg_last_error()) { From 7d0be6849e749c89c3642395535ce29470dd6dae Mon Sep 17 00:00:00 2001 From: David Grudl Date: Tue, 3 Sep 2024 16:33:45 +0200 Subject: [PATCH 06/11] readonly properties --- src/Dibi/DataSource.php | 4 ++-- src/Dibi/Drivers/FirebirdReflector.php | 2 +- src/Dibi/Drivers/MySqlReflector.php | 2 +- src/Dibi/Drivers/MySqliResult.php | 4 ++-- src/Dibi/Drivers/NoDataResult.php | 2 +- src/Dibi/Drivers/OdbcReflector.php | 2 +- src/Dibi/Drivers/OracleReflector.php | 2 +- src/Dibi/Drivers/PdoResult.php | 2 +- src/Dibi/Drivers/PostgreReflector.php | 4 ++-- src/Dibi/Drivers/PostgreResult.php | 2 +- src/Dibi/Drivers/SqliteReflector.php | 2 +- src/Dibi/Drivers/SqliteResult.php | 2 +- src/Dibi/Drivers/SqlsrvReflector.php | 2 +- src/Dibi/Event.php | 6 +++--- src/Dibi/Expression.php | 2 +- src/Dibi/Fluent.php | 2 +- src/Dibi/Literal.php | 2 +- src/Dibi/Reflection/Column.php | 2 +- src/Dibi/Reflection/Database.php | 2 +- src/Dibi/Reflection/ForeignKey.php | 4 ++-- src/Dibi/Reflection/Index.php | 2 +- src/Dibi/Reflection/Result.php | 2 +- src/Dibi/Reflection/Table.php | 2 +- src/Dibi/ResultIterator.php | 2 +- src/Dibi/Translator.php | 4 ++-- 25 files changed, 32 insertions(+), 32 deletions(-) diff --git a/src/Dibi/DataSource.php b/src/Dibi/DataSource.php index 89aa3707..c7df9e09 100644 --- a/src/Dibi/DataSource.php +++ b/src/Dibi/DataSource.php @@ -15,8 +15,8 @@ */ class DataSource implements IDataSource { - private Connection $connection; - private string $sql; + private readonly Connection $connection; + private readonly string $sql; private ?Result $result = null; private ?int $count = null; private ?int $totalCount = null; diff --git a/src/Dibi/Drivers/FirebirdReflector.php b/src/Dibi/Drivers/FirebirdReflector.php index ea992896..9b23fdd3 100644 --- a/src/Dibi/Drivers/FirebirdReflector.php +++ b/src/Dibi/Drivers/FirebirdReflector.php @@ -18,7 +18,7 @@ class FirebirdReflector implements Dibi\Reflector { public function __construct( - private Dibi\Driver $driver, + private readonly Dibi\Driver $driver, ) { } diff --git a/src/Dibi/Drivers/MySqlReflector.php b/src/Dibi/Drivers/MySqlReflector.php index d4e655d2..0f968a71 100644 --- a/src/Dibi/Drivers/MySqlReflector.php +++ b/src/Dibi/Drivers/MySqlReflector.php @@ -19,7 +19,7 @@ class MySqlReflector implements Dibi\Reflector { public function __construct( - private Dibi\Driver $driver, + private readonly Dibi\Driver $driver, ) { } diff --git a/src/Dibi/Drivers/MySqliResult.php b/src/Dibi/Drivers/MySqliResult.php index 20f8aa79..c993c943 100644 --- a/src/Dibi/Drivers/MySqliResult.php +++ b/src/Dibi/Drivers/MySqliResult.php @@ -18,8 +18,8 @@ class MySqliResult implements Dibi\ResultDriver { public function __construct( - private \mysqli_result $resultSet, - private bool $buffered, + private readonly \mysqli_result $resultSet, + private readonly bool $buffered, ) { } diff --git a/src/Dibi/Drivers/NoDataResult.php b/src/Dibi/Drivers/NoDataResult.php index cec1547f..480db598 100644 --- a/src/Dibi/Drivers/NoDataResult.php +++ b/src/Dibi/Drivers/NoDataResult.php @@ -18,7 +18,7 @@ class NoDataResult implements Dibi\ResultDriver { public function __construct( - private int $rows, + private readonly int $rows, ) { } diff --git a/src/Dibi/Drivers/OdbcReflector.php b/src/Dibi/Drivers/OdbcReflector.php index e922a49c..0ec04a4c 100644 --- a/src/Dibi/Drivers/OdbcReflector.php +++ b/src/Dibi/Drivers/OdbcReflector.php @@ -18,7 +18,7 @@ class OdbcReflector implements Dibi\Reflector { public function __construct( - private Dibi\Driver $driver, + private readonly Dibi\Driver $driver, ) { } diff --git a/src/Dibi/Drivers/OracleReflector.php b/src/Dibi/Drivers/OracleReflector.php index 031d78fd..1ab4962d 100644 --- a/src/Dibi/Drivers/OracleReflector.php +++ b/src/Dibi/Drivers/OracleReflector.php @@ -18,7 +18,7 @@ class OracleReflector implements Dibi\Reflector { public function __construct( - private Dibi\Driver $driver, + private readonly Dibi\Driver $driver, ) { } diff --git a/src/Dibi/Drivers/PdoResult.php b/src/Dibi/Drivers/PdoResult.php index f88d9f98..bfb0f602 100644 --- a/src/Dibi/Drivers/PdoResult.php +++ b/src/Dibi/Drivers/PdoResult.php @@ -21,7 +21,7 @@ class PdoResult implements Dibi\ResultDriver { public function __construct( private ?\PDOStatement $resultSet, - private string $driverName, + private readonly string $driverName, ) { } diff --git a/src/Dibi/Drivers/PostgreReflector.php b/src/Dibi/Drivers/PostgreReflector.php index 5bda3b9d..68679d3a 100644 --- a/src/Dibi/Drivers/PostgreReflector.php +++ b/src/Dibi/Drivers/PostgreReflector.php @@ -18,8 +18,8 @@ class PostgreReflector implements Dibi\Reflector { public function __construct( - private Dibi\Driver $driver, - private string $version, + private readonly Dibi\Driver $driver, + private readonly string $version, ) { } diff --git a/src/Dibi/Drivers/PostgreResult.php b/src/Dibi/Drivers/PostgreResult.php index 62851e3a..e74f36ca 100644 --- a/src/Dibi/Drivers/PostgreResult.php +++ b/src/Dibi/Drivers/PostgreResult.php @@ -20,7 +20,7 @@ class PostgreResult implements Dibi\ResultDriver { public function __construct( - private PgSql\Result $resultSet, + private readonly PgSql\Result $resultSet, ) { } diff --git a/src/Dibi/Drivers/SqliteReflector.php b/src/Dibi/Drivers/SqliteReflector.php index a8ce36ca..8c1e3ade 100644 --- a/src/Dibi/Drivers/SqliteReflector.php +++ b/src/Dibi/Drivers/SqliteReflector.php @@ -18,7 +18,7 @@ class SqliteReflector implements Dibi\Reflector { public function __construct( - private Dibi\Driver $driver, + private readonly Dibi\Driver $driver, ) { } diff --git a/src/Dibi/Drivers/SqliteResult.php b/src/Dibi/Drivers/SqliteResult.php index 2c26e950..c3fef40e 100644 --- a/src/Dibi/Drivers/SqliteResult.php +++ b/src/Dibi/Drivers/SqliteResult.php @@ -19,7 +19,7 @@ class SqliteResult implements Dibi\ResultDriver { public function __construct( - private \SQLite3Result $resultSet, + private readonly \SQLite3Result $resultSet, ) { } diff --git a/src/Dibi/Drivers/SqlsrvReflector.php b/src/Dibi/Drivers/SqlsrvReflector.php index 386cbb12..b19249a7 100644 --- a/src/Dibi/Drivers/SqlsrvReflector.php +++ b/src/Dibi/Drivers/SqlsrvReflector.php @@ -18,7 +18,7 @@ class SqlsrvReflector implements Dibi\Reflector { public function __construct( - private Dibi\Driver $driver, + private readonly Dibi\Driver $driver, ) { } diff --git a/src/Dibi/Event.php b/src/Dibi/Event.php index 92f4a162..9b9e8790 100644 --- a/src/Dibi/Event.php +++ b/src/Dibi/Event.php @@ -29,10 +29,10 @@ class Event TRANSACTION = 448, // BEGIN | COMMIT | ROLLBACK ALL = 1023; - public Connection $connection; + public readonly Connection $connection; public int $type; - public string $sql; - public Result|DriverException|null $result; + public readonly string $sql; + public readonly Result|DriverException|null $result; public float $time; public ?int $count = null; public ?array $source = null; diff --git a/src/Dibi/Expression.php b/src/Dibi/Expression.php index e5502991..c3f17490 100644 --- a/src/Dibi/Expression.php +++ b/src/Dibi/Expression.php @@ -15,7 +15,7 @@ */ class Expression { - private array $values; + private readonly array $values; public function __construct(...$values) diff --git a/src/Dibi/Fluent.php b/src/Dibi/Fluent.php index c24c06e4..2922e926 100644 --- a/src/Dibi/Fluent.php +++ b/src/Dibi/Fluent.php @@ -97,7 +97,7 @@ class Fluent implements IDataSource 'RIGHT JOIN' => 'FROM', ]; - private Connection $connection; + private readonly Connection $connection; private array $setups = []; private ?string $command = null; private array $clauses = []; diff --git a/src/Dibi/Literal.php b/src/Dibi/Literal.php index ca395859..15eecdf9 100644 --- a/src/Dibi/Literal.php +++ b/src/Dibi/Literal.php @@ -15,7 +15,7 @@ */ class Literal { - private string $value; + private readonly string $value; public function __construct($value) diff --git a/src/Dibi/Reflection/Column.php b/src/Dibi/Reflection/Column.php index 44ed7f1c..0ae1e58d 100644 --- a/src/Dibi/Reflection/Column.php +++ b/src/Dibi/Reflection/Column.php @@ -28,7 +28,7 @@ class Column { public function __construct( - private ?Dibi\Reflector $reflector, + private readonly ?Dibi\Reflector $reflector, private array $info, ) { } diff --git a/src/Dibi/Reflection/Database.php b/src/Dibi/Reflection/Database.php index 6a11ab72..d471c7dc 100644 --- a/src/Dibi/Reflection/Database.php +++ b/src/Dibi/Reflection/Database.php @@ -26,7 +26,7 @@ class Database public function __construct( - private Dibi\Reflector $reflector, + private readonly Dibi\Reflector $reflector, private ?string $name = null, ) { } diff --git a/src/Dibi/Reflection/ForeignKey.php b/src/Dibi/Reflection/ForeignKey.php index 68730b0f..c7f005b0 100644 --- a/src/Dibi/Reflection/ForeignKey.php +++ b/src/Dibi/Reflection/ForeignKey.php @@ -20,8 +20,8 @@ class ForeignKey { public function __construct( - private string $name, - private array $references, + private readonly string $name, + private readonly array $references, ) { } diff --git a/src/Dibi/Reflection/Index.php b/src/Dibi/Reflection/Index.php index 29739f3f..71e426c4 100644 --- a/src/Dibi/Reflection/Index.php +++ b/src/Dibi/Reflection/Index.php @@ -22,7 +22,7 @@ class Index { public function __construct( - private array $info, + private readonly array $info, ) { } diff --git a/src/Dibi/Reflection/Result.php b/src/Dibi/Reflection/Result.php index f62b5239..2218f08c 100644 --- a/src/Dibi/Reflection/Result.php +++ b/src/Dibi/Reflection/Result.php @@ -28,7 +28,7 @@ class Result public function __construct( - private Dibi\ResultDriver $driver, + private readonly Dibi\ResultDriver $driver, ) { } diff --git a/src/Dibi/Reflection/Table.php b/src/Dibi/Reflection/Table.php index b03d4807..7c5b64ed 100644 --- a/src/Dibi/Reflection/Table.php +++ b/src/Dibi/Reflection/Table.php @@ -25,7 +25,7 @@ */ class Table { - private Dibi\Reflector $reflector; + private readonly Dibi\Reflector $reflector; private string $name; private bool $view; diff --git a/src/Dibi/ResultIterator.php b/src/Dibi/ResultIterator.php index d47ff882..6bac6b57 100644 --- a/src/Dibi/ResultIterator.php +++ b/src/Dibi/ResultIterator.php @@ -20,7 +20,7 @@ class ResultIterator implements \Iterator, \Countable public function __construct( - private Result $result, + private readonly Result $result, ) { } diff --git a/src/Dibi/Translator.php b/src/Dibi/Translator.php index e20ee055..8dc4063e 100644 --- a/src/Dibi/Translator.php +++ b/src/Dibi/Translator.php @@ -15,8 +15,8 @@ */ final class Translator { - private Connection $connection; - private Driver $driver; + private readonly Connection $connection; + private readonly Driver $driver; private int $cursor = 0; private array $args; From 82a3b29d65f0202610667a03a8ff18b819252330 Mon Sep 17 00:00:00 2001 From: David Grudl Date: Tue, 3 Sep 2024 18:27:03 +0200 Subject: [PATCH 07/11] removed support for SQLServer < 2012, PostgreSQL < 9.3 --- src/Dibi/Drivers/PdoDriver.php | 23 ++--- src/Dibi/Drivers/PostgreDriver.php | 2 +- src/Dibi/Drivers/PostgreReflector.php | 20 ++-- src/Dibi/Drivers/SqliteDriver.php | 5 +- src/Dibi/Drivers/SqlsrvDriver.php | 10 -- tests/dibi/Fluent.fetch.limit.mssql.phpt | 20 ++-- tests/dibi/Sqlsrv.limits.phpt | 117 +++++++++-------------- 7 files changed, 76 insertions(+), 121 deletions(-) diff --git a/src/Dibi/Drivers/PdoDriver.php b/src/Dibi/Drivers/PdoDriver.php index e0944d84..d0b8a5d0 100644 --- a/src/Dibi/Drivers/PdoDriver.php +++ b/src/Dibi/Drivers/PdoDriver.php @@ -23,14 +23,12 @@ * - password (or pass) * - options (array) => driver specific options {@see PDO::__construct} * - resource (PDO) => existing connection - * - version */ class PdoDriver implements Dibi\Driver { private ?PDO $connection; private ?int $affectedRows; private string $driverName; - private string $serverVersion = ''; /** @throws Dibi\NotSupportedException */ @@ -65,7 +63,6 @@ public function __construct(array $config) } $this->driverName = $this->connection->getAttribute(PDO::ATTR_DRIVER_NAME); - $this->serverVersion = (string) ($config['version'] ?? @$this->connection->getAttribute(PDO::ATTR_SERVER_VERSION)); // @ - may be not supported } @@ -179,7 +176,7 @@ public function getReflector(): Dibi\Reflector return match ($this->driverName) { 'mysql' => new MySqlReflector($this), 'oci' => new OracleReflector($this), - 'pgsql' => new PostgreReflector($this, $this->connection->getAttribute(PDO::ATTR_SERVER_VERSION)), + 'pgsql' => new PostgreReflector($this), 'sqlite' => new SqliteReflector($this), 'mssql', 'dblib', 'sqlsrv' => new SqlsrvReflector($this), default => throw new Dibi\NotSupportedException, @@ -359,17 +356,15 @@ public function applyLimit(string &$sql, ?int $limit, ?int $offset): void case 'mssql': case 'sqlsrv': case 'dblib': - if (version_compare($this->serverVersion, '11.0') >= 0) { // 11 == SQL Server 2012 - // requires ORDER BY, see https://technet.microsoft.com/en-us/library/gg699618(v=sql.110).aspx - if ($limit !== null) { - $sql = sprintf('%s OFFSET %d ROWS FETCH NEXT %d ROWS ONLY', rtrim($sql), $offset, $limit); - } elseif ($offset) { - $sql = sprintf('%s OFFSET %d ROWS', rtrim($sql), $offset); - } - - break; + // requires ORDER BY, see https://technet.microsoft.com/en-us/library/gg699618(v=sql.110).aspx + if ($limit !== null) { + $sql = sprintf('%s OFFSET %d ROWS FETCH NEXT %d ROWS ONLY', rtrim($sql), $offset, $limit); + } elseif ($offset) { + $sql = sprintf('%s OFFSET %d ROWS', rtrim($sql), $offset); } - // break omitted + + break; + case 'odbc': if ($offset) { throw new Dibi\NotSupportedException('Offset is not supported by this database.'); diff --git a/src/Dibi/Drivers/PostgreDriver.php b/src/Dibi/Drivers/PostgreDriver.php index ce3aa43e..b9b0603c 100644 --- a/src/Dibi/Drivers/PostgreDriver.php +++ b/src/Dibi/Drivers/PostgreDriver.php @@ -233,7 +233,7 @@ public function getResource(): PgSql\Connection */ public function getReflector(): Dibi\Reflector { - return new PostgreReflector($this, pg_parameter_status($this->connection, 'server_version')); + return new PostgreReflector($this); } diff --git a/src/Dibi/Drivers/PostgreReflector.php b/src/Dibi/Drivers/PostgreReflector.php index 68679d3a..ab93130c 100644 --- a/src/Dibi/Drivers/PostgreReflector.php +++ b/src/Dibi/Drivers/PostgreReflector.php @@ -19,7 +19,6 @@ class PostgreReflector implements Dibi\Reflector { public function __construct( private readonly Dibi\Driver $driver, - private readonly string $version, ) { } @@ -39,18 +38,15 @@ public function getTables(): array FROM information_schema.tables WHERE - table_schema = ANY (current_schemas(false))"; + table_schema = ANY (current_schemas(false)) - if ($this->version >= 9.3) { - $query .= ' - UNION ALL - SELECT - matviewname, 1 - FROM - pg_matviews - WHERE - schemaname = ANY (current_schemas(false))'; - } + UNION ALL + SELECT + matviewname, 1 + FROM + pg_matviews + WHERE + schemaname = ANY (current_schemas(false))"; $res = $this->driver->query($query); $tables = []; diff --git a/src/Dibi/Drivers/SqliteDriver.php b/src/Dibi/Drivers/SqliteDriver.php index c1b4b227..d8ef49d0 100644 --- a/src/Dibi/Drivers/SqliteDriver.php +++ b/src/Dibi/Drivers/SqliteDriver.php @@ -56,10 +56,7 @@ public function __construct(array $config) } // enable foreign keys support (defaultly disabled; if disabled then foreign key constraints are not enforced) - $version = SQLite3::version(); - if ($version['versionNumber'] >= '3006019') { - $this->query('PRAGMA foreign_keys = ON'); - } + $this->query('PRAGMA foreign_keys = ON'); } diff --git a/src/Dibi/Drivers/SqlsrvDriver.php b/src/Dibi/Drivers/SqlsrvDriver.php index 523fd198..0a999335 100644 --- a/src/Dibi/Drivers/SqlsrvDriver.php +++ b/src/Dibi/Drivers/SqlsrvDriver.php @@ -30,7 +30,6 @@ class SqlsrvDriver implements Dibi\Driver /** @var resource */ private $connection; private ?int $affectedRows; - private string $version = ''; /** @throws Dibi\NotSupportedException */ @@ -68,8 +67,6 @@ public function __construct(array $config) sqlsrv_configure('WarningsReturnAsErrors', 1); } - - $this->version = sqlsrv_server_info($this->connection)['SQLServerVersion']; } @@ -256,13 +253,6 @@ public function applyLimit(string &$sql, ?int $limit, ?int $offset): void if ($limit < 0 || $offset < 0) { throw new Dibi\NotSupportedException('Negative offset or limit.'); - } elseif (version_compare($this->version, '11', '<')) { // 11 == SQL Server 2012 - if ($offset) { - throw new Dibi\NotSupportedException('Offset is not supported by this database.'); - - } elseif ($limit !== null) { - $sql = sprintf('SELECT TOP (%d) * FROM (%s) t', $limit, $sql); - } } elseif ($limit !== null) { // requires ORDER BY, see https://technet.microsoft.com/en-us/library/gg699618(v=sql.110).aspx $sql = sprintf('%s OFFSET %d ROWS FETCH NEXT %d ROWS ONLY', rtrim($sql), $offset, $limit); diff --git a/tests/dibi/Fluent.fetch.limit.mssql.phpt b/tests/dibi/Fluent.fetch.limit.mssql.phpt index 7df79eb1..d07ce4e8 100644 --- a/tests/dibi/Fluent.fetch.limit.mssql.phpt +++ b/tests/dibi/Fluent.fetch.limit.mssql.phpt @@ -57,28 +57,28 @@ $fluent = $conn->select('*') ->orderBy('customer_id'); Assert::same( - reformat('SELECT TOP (1) * FROM (SELECT * FROM [customers] ORDER BY [customer_id]) t'), + reformat('SELECT * FROM [customers] ORDER BY [customer_id] OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY'), (string) $fluent, ); $fluent->fetch(); Assert::same( - 'SELECT TOP (1) * FROM (SELECT * FROM [customers] ORDER BY [customer_id]) t', + 'SELECT * FROM [customers] ORDER BY [customer_id] OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY', dibi::$sql, ); $fluent->fetchSingle(); Assert::same( - reformat('SELECT TOP (1) * FROM (SELECT * FROM [customers] ORDER BY [customer_id]) t'), + reformat('SELECT * FROM [customers] ORDER BY [customer_id] OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY'), dibi::$sql, ); $fluent->fetchAll(0, 3); Assert::same( - reformat('SELECT TOP (3) * FROM (SELECT * FROM [customers] ORDER BY [customer_id]) t'), + reformat('SELECT * FROM [customers] ORDER BY [customer_id] OFFSET 0 ROWS FETCH NEXT 3 ROWS ONLY'), dibi::$sql, ); Assert::same( - reformat('SELECT TOP (1) * FROM (SELECT * FROM [customers] ORDER BY [customer_id]) t'), + reformat('SELECT * FROM [customers] ORDER BY [customer_id] OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY'), (string) $fluent, ); @@ -86,16 +86,16 @@ Assert::same( $fluent->limit(0); $fluent->fetch(); Assert::same( - reformat('SELECT TOP (0) * FROM (SELECT * FROM [customers] ORDER BY [customer_id]) t'), + reformat('SELECT * FROM [customers] ORDER BY [customer_id] OFFSET 0 ROWS FETCH NEXT 0 ROWS ONLY'), dibi::$sql, ); $fluent->fetchSingle(); Assert::same( - reformat('SELECT TOP (0) * FROM (SELECT * FROM [customers] ORDER BY [customer_id]) t'), + reformat('SELECT * FROM [customers] ORDER BY [customer_id] OFFSET 0 ROWS FETCH NEXT 0 ROWS ONLY'), dibi::$sql, ); Assert::same( - reformat('SELECT TOP (0) * FROM (SELECT * FROM [customers] ORDER BY [customer_id]) t'), + reformat('SELECT * FROM [customers] ORDER BY [customer_id] OFFSET 0 ROWS FETCH NEXT 0 ROWS ONLY'), (string) $fluent, ); @@ -104,12 +104,12 @@ $fluent->removeClause('limit'); $fluent->removeClause('offset'); $fluent->fetch(); Assert::same( - reformat('SELECT TOP (1) * FROM (SELECT * FROM [customers] ORDER BY [customer_id]) t'), + reformat('SELECT * FROM [customers] ORDER BY [customer_id] OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY'), dibi::$sql, ); $fluent->fetchSingle(); Assert::same( - reformat('SELECT TOP (1) * FROM (SELECT * FROM [customers] ORDER BY [customer_id]) t'), + reformat('SELECT * FROM [customers] ORDER BY [customer_id] OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY'), dibi::$sql, ); Assert::same( diff --git a/tests/dibi/Sqlsrv.limits.phpt b/tests/dibi/Sqlsrv.limits.phpt index f70ea197..cc0c8a1c 100644 --- a/tests/dibi/Sqlsrv.limits.phpt +++ b/tests/dibi/Sqlsrv.limits.phpt @@ -11,82 +11,59 @@ use Tester\Assert; require __DIR__ . '/bootstrap.php'; $tests = function ($conn) { - $resource = $conn->getDriver()->getResource(); - $version = is_resource($resource) - ? sqlsrv_server_info($resource)['SQLServerVersion'] - : $resource->getAttribute(PDO::ATTR_SERVER_VERSION); + // Limit and offset + Assert::same( + 'SELECT 1 OFFSET 10 ROWS FETCH NEXT 10 ROWS ONLY', + $conn->translate('SELECT 1 %ofs %lmt', 10, 10), + ); - // MsSQL2012+ - if (version_compare($version, '11.0') >= 0) { - // Limit and offset - Assert::same( - 'SELECT 1 OFFSET 10 ROWS FETCH NEXT 10 ROWS ONLY', - $conn->translate('SELECT 1 %ofs %lmt', 10, 10), - ); + // Limit only + Assert::same( + 'SELECT 1 OFFSET 0 ROWS FETCH NEXT 10 ROWS ONLY', + $conn->translate('SELECT 1 %lmt', 10), + ); - // Limit only - Assert::same( - 'SELECT 1 OFFSET 0 ROWS FETCH NEXT 10 ROWS ONLY', - $conn->translate('SELECT 1 %lmt', 10), - ); + // Offset only + Assert::same( + 'SELECT 1 OFFSET 10 ROWS', + $conn->translate('SELECT 1 %ofs', 10), + ); - // Offset only - Assert::same( - 'SELECT 1 OFFSET 10 ROWS', - $conn->translate('SELECT 1 %ofs', 10), - ); + // Offset invalid + Assert::error( + function () use ($conn) { + $conn->translate('SELECT 1 %ofs', -10); + }, + Dibi\NotSupportedException::class, + 'Negative offset or limit.', + ); - // Offset invalid - Assert::error( - function () use ($conn) { - $conn->translate('SELECT 1 %ofs', -10); - }, - Dibi\NotSupportedException::class, - 'Negative offset or limit.', - ); + // Limit invalid + Assert::error( + function () use ($conn) { + $conn->translate('SELECT 1 %lmt', -10); + }, + Dibi\NotSupportedException::class, + 'Negative offset or limit.', + ); - // Limit invalid - Assert::error( - function () use ($conn) { - $conn->translate('SELECT 1 %lmt', -10); - }, - Dibi\NotSupportedException::class, - 'Negative offset or limit.', - ); + // Limit invalid, offset valid + Assert::error( + function () use ($conn) { + $conn->translate('SELECT 1 %ofs %lmt', 10, -10); + }, + Dibi\NotSupportedException::class, + 'Negative offset or limit.', + ); - // Limit invalid, offset valid - Assert::error( - function () use ($conn) { - $conn->translate('SELECT 1 %ofs %lmt', 10, -10); - }, - Dibi\NotSupportedException::class, - 'Negative offset or limit.', - ); - - // Limit valid, offset invalid - Assert::error( - function () use ($conn) { - $conn->translate('SELECT 1 %ofs %lmt', -10, 10); - }, - Dibi\NotSupportedException::class, - 'Negative offset or limit.', - ); - } else { - Assert::same( - 'SELECT TOP (1) * FROM (SELECT 1) t', - $conn->translate('SELECT 1 %lmt', 1), - ); - - Assert::same( - 'SELECT 1', - $conn->translate('SELECT 1 %lmt', -10), - ); - - Assert::exception( - fn() => $conn->translate('SELECT 1 %ofs %lmt', 10, 10), - Dibi\NotSupportedException::class, - ); - } + // Limit valid, offset invalid + Assert::error( + function () use ($conn) { + $conn->translate('SELECT 1 %ofs %lmt', -10, 10); + }, + Dibi\NotSupportedException::class, + 'Negative offset or limit.', + ); }; $conn = new Dibi\Connection($config); From d38a77fb9a8e64276b8edb385939b16372808a63 Mon Sep 17 00:00:00 2001 From: David Grudl Date: Tue, 3 Sep 2024 15:58:35 +0200 Subject: [PATCH 08/11] removed IConnection (BC break) --- src/Dibi/Connection.php | 2 +- src/Dibi/interfaces.php | 60 ----------------------------------------- 2 files changed, 1 insertion(+), 61 deletions(-) diff --git a/src/Dibi/Connection.php b/src/Dibi/Connection.php index 916d0956..3cb40eac 100644 --- a/src/Dibi/Connection.php +++ b/src/Dibi/Connection.php @@ -19,7 +19,7 @@ * @property-read int $affectedRows * @property-read int $insertId */ -class Connection implements IConnection +class Connection { /** function (Event $event); Occurs after query is executed */ public ?array $onEvent = []; diff --git a/src/Dibi/interfaces.php b/src/Dibi/interfaces.php index 3cf33685..753d0b6e 100644 --- a/src/Dibi/interfaces.php +++ b/src/Dibi/interfaces.php @@ -178,63 +178,3 @@ function getIndexes(string $table): array; */ function getForeignKeys(string $table): array; } - - -/** - * Dibi connection. - */ -interface IConnection -{ - /** - * Connects to a database. - */ - function connect(): void; - - /** - * Disconnects from a database. - */ - function disconnect(): void; - - /** - * Returns true when connection was established. - */ - function isConnected(): bool; - - /** - * Returns the driver and connects to a database in lazy mode. - */ - function getDriver(): Driver; - - /** - * Generates (translates) and executes SQL query. - * @throws Exception - */ - function query(...$args): Result; - - /** - * Gets the number of affected rows by the last INSERT, UPDATE or DELETE query. - * @throws Exception - */ - function getAffectedRows(): int; - - /** - * Retrieves the ID generated for an AUTO_INCREMENT column by the previous INSERT query. - * @throws Exception - */ - function getInsertId(?string $sequence = null): int; - - /** - * Begins a transaction (if supported). - */ - function begin(?string $savepoint = null): void; - - /** - * Commits statements in a transaction. - */ - function commit(?string $savepoint = null): void; - - /** - * Rollback changes in a transaction. - */ - function rollback(?string $savepoint = null): void; -} From bab9739321071a36544c20582eb4744bc120087d Mon Sep 17 00:00:00 2001 From: David Grudl Date: Tue, 3 Sep 2024 18:20:04 +0200 Subject: [PATCH 09/11] renamed interfaces (BC break) Dibi\Driver => Dibi\Drivers\Connection Dibi\ResultDriver => Dibi\Drivers\Result Dibi\Reflector => Dibi\Drivers\Engine --- src/Dibi/Connection.php | 10 +- src/Dibi/Drivers/Connection.php | 97 ++++++++++++ src/Dibi/Drivers/DummyDriver.php | 6 +- src/Dibi/Drivers/Engine.php | 40 +++++ src/Dibi/Drivers/FirebirdDriver.php | 6 +- src/Dibi/Drivers/FirebirdReflector.php | 5 +- src/Dibi/Drivers/FirebirdResult.php | 2 +- src/Dibi/Drivers/MySqlReflector.php | 4 +- src/Dibi/Drivers/MySqliDriver.php | 6 +- src/Dibi/Drivers/MySqliResult.php | 2 +- src/Dibi/Drivers/NoDataResult.php | 3 +- src/Dibi/Drivers/OdbcDriver.php | 6 +- src/Dibi/Drivers/OdbcReflector.php | 4 +- src/Dibi/Drivers/OdbcResult.php | 2 +- src/Dibi/Drivers/OracleDriver.php | 6 +- src/Dibi/Drivers/OracleReflector.php | 4 +- src/Dibi/Drivers/OracleResult.php | 2 +- src/Dibi/Drivers/PdoDriver.php | 6 +- src/Dibi/Drivers/PdoResult.php | 2 +- src/Dibi/Drivers/PostgreDriver.php | 6 +- src/Dibi/Drivers/PostgreReflector.php | 5 +- src/Dibi/Drivers/PostgreResult.php | 3 +- src/Dibi/Drivers/Result.php | 58 ++++++++ src/Dibi/Drivers/SqliteDriver.php | 6 +- src/Dibi/Drivers/SqliteReflector.php | 5 +- src/Dibi/Drivers/SqliteResult.php | 2 +- src/Dibi/Drivers/SqlsrvDriver.php | 6 +- src/Dibi/Drivers/SqlsrvReflector.php | 4 +- src/Dibi/Drivers/SqlsrvResult.php | 2 +- src/Dibi/Helpers.php | 2 +- src/Dibi/IDataSource.php | 20 +++ src/Dibi/Reflection/Column.php | 2 +- src/Dibi/Reflection/Database.php | 2 +- src/Dibi/Reflection/Result.php | 4 +- src/Dibi/Reflection/Table.php | 4 +- src/Dibi/Result.php | 6 +- src/Dibi/Translator.php | 4 +- src/Dibi/interfaces.php | 180 ----------------------- tests/dibi/Connection.connect.phpt | 2 +- tests/dibi/Fluent.fetch.limit.mssql.phpt | 2 +- 40 files changed, 284 insertions(+), 254 deletions(-) create mode 100644 src/Dibi/Drivers/Connection.php create mode 100644 src/Dibi/Drivers/Engine.php create mode 100644 src/Dibi/Drivers/Result.php create mode 100644 src/Dibi/IDataSource.php delete mode 100644 src/Dibi/interfaces.php diff --git a/src/Dibi/Connection.php b/src/Dibi/Connection.php index 3cb40eac..7ec88463 100644 --- a/src/Dibi/Connection.php +++ b/src/Dibi/Connection.php @@ -27,7 +27,7 @@ class Connection /** @var string[] resultset formats */ private array $formats; - private ?Driver $driver = null; + private ?Drivers\Connection $driver = null; private ?Translator $translator = null; /** @var array */ @@ -120,12 +120,12 @@ public function __destruct() */ final public function connect(): void { - if ($this->config['driver'] instanceof Driver) { + if ($this->config['driver'] instanceof Drivers\Connection) { $this->driver = $this->config['driver']; $this->translator = new Translator($this); return; - } elseif (is_subclass_of($this->config['driver'], Driver::class)) { + } elseif (is_subclass_of($this->config['driver'], Drivers\Connection::class)) { $class = $this->config['driver']; } else { @@ -196,7 +196,7 @@ final public function getConfig(?string $key = null, $default = null): mixed /** * Returns the driver and connects to a database in lazy mode. */ - final public function getDriver(): Driver + final public function getDriver(): Drivers\Connection { if (!$this->driver) { $this->connect(); @@ -448,7 +448,7 @@ public function transaction(callable $callback): mixed /** * Result set factory. */ - public function createResultSet(ResultDriver $resultDriver): Result + public function createResultSet(Drivers\Result $resultDriver): Result { return (new Result($resultDriver, $this->config['result']['normalize'] ?? true)) ->setFormats($this->formats); diff --git a/src/Dibi/Drivers/Connection.php b/src/Dibi/Drivers/Connection.php new file mode 100644 index 00000000..9ff28e70 --- /dev/null +++ b/src/Dibi/Drivers/Connection.php @@ -0,0 +1,97 @@ + 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 */ -class FirebirdDriver implements Dibi\Driver +class FirebirdDriver implements Connection { public const ErrorExceptionThrown = -836; @@ -85,7 +85,7 @@ public function disconnect(): void * Executes the SQL query. * @throws Dibi\DriverException|Dibi\Exception */ - public function query(string $sql): ?Dibi\ResultDriver + public function query(string $sql): ?Result { $resource = $this->inTransaction ? $this->transaction @@ -199,7 +199,7 @@ public function getResource(): mixed /** * Returns the connection reflector. */ - public function getReflector(): Dibi\Reflector + public function getReflector(): Engine { return new FirebirdReflector($this); } diff --git a/src/Dibi/Drivers/FirebirdReflector.php b/src/Dibi/Drivers/FirebirdReflector.php index 9b23fdd3..292c800b 100644 --- a/src/Dibi/Drivers/FirebirdReflector.php +++ b/src/Dibi/Drivers/FirebirdReflector.php @@ -9,16 +9,15 @@ namespace Dibi\Drivers; -use Dibi; /** * The reflector for Firebird/InterBase database. */ -class FirebirdReflector implements Dibi\Reflector +class FirebirdReflector implements Engine { public function __construct( - private readonly Dibi\Driver $driver, + private readonly Connection $driver, ) { } diff --git a/src/Dibi/Drivers/FirebirdResult.php b/src/Dibi/Drivers/FirebirdResult.php index 38ca75c5..f3bf3966 100644 --- a/src/Dibi/Drivers/FirebirdResult.php +++ b/src/Dibi/Drivers/FirebirdResult.php @@ -16,7 +16,7 @@ /** * The driver for Firebird/InterBase result set. */ -class FirebirdResult implements Dibi\ResultDriver +class FirebirdResult implements Result { public function __construct( /** @var resource */ diff --git a/src/Dibi/Drivers/MySqlReflector.php b/src/Dibi/Drivers/MySqlReflector.php index 0f968a71..ecf1cfa2 100644 --- a/src/Dibi/Drivers/MySqlReflector.php +++ b/src/Dibi/Drivers/MySqlReflector.php @@ -16,10 +16,10 @@ * The reflector for MySQL databases. * @internal */ -class MySqlReflector implements Dibi\Reflector +class MySqlReflector implements Engine { public function __construct( - private readonly Dibi\Driver $driver, + private readonly Connection $driver, ) { } diff --git a/src/Dibi/Drivers/MySqliDriver.php b/src/Dibi/Drivers/MySqliDriver.php index 41e7c606..3bf130df 100644 --- a/src/Dibi/Drivers/MySqliDriver.php +++ b/src/Dibi/Drivers/MySqliDriver.php @@ -30,7 +30,7 @@ * - sqlmode => see http://dev.mysql.com/doc/refman/5.0/en/server-sql-mode.html * - resource (mysqli) => existing connection resource */ -class MySqliDriver implements Dibi\Driver +class MySqliDriver implements Connection { public const ErrorAccessDenied = 1045; public const ErrorDuplicateEntry = 1062; @@ -146,7 +146,7 @@ public function ping(): bool * Executes the SQL query. * @throws Dibi\DriverException */ - public function query(string $sql): ?Dibi\ResultDriver + public function query(string $sql): ?Result { $res = @$this->connection->query($sql, $this->buffered ? MYSQLI_STORE_RESULT : MYSQLI_USE_RESULT); // intentionally @ @@ -263,7 +263,7 @@ public function getResource(): ?\mysqli /** * Returns the connection reflector. */ - public function getReflector(): Dibi\Reflector + public function getReflector(): Engine { return new MySqlReflector($this); } diff --git a/src/Dibi/Drivers/MySqliResult.php b/src/Dibi/Drivers/MySqliResult.php index c993c943..59c5058a 100644 --- a/src/Dibi/Drivers/MySqliResult.php +++ b/src/Dibi/Drivers/MySqliResult.php @@ -15,7 +15,7 @@ /** * The driver for MySQL result set. */ -class MySqliResult implements Dibi\ResultDriver +class MySqliResult implements Result { public function __construct( private readonly \mysqli_result $resultSet, diff --git a/src/Dibi/Drivers/NoDataResult.php b/src/Dibi/Drivers/NoDataResult.php index 480db598..7f5190a5 100644 --- a/src/Dibi/Drivers/NoDataResult.php +++ b/src/Dibi/Drivers/NoDataResult.php @@ -9,13 +9,12 @@ namespace Dibi\Drivers; -use Dibi; /** * The driver for no result set. */ -class NoDataResult implements Dibi\ResultDriver +class NoDataResult implements Result { public function __construct( private readonly int $rows, diff --git a/src/Dibi/Drivers/OdbcDriver.php b/src/Dibi/Drivers/OdbcDriver.php index a5471c35..f1e216e3 100644 --- a/src/Dibi/Drivers/OdbcDriver.php +++ b/src/Dibi/Drivers/OdbcDriver.php @@ -23,7 +23,7 @@ * - resource (resource) => existing connection resource * - microseconds (bool) => use microseconds in datetime format? */ -class OdbcDriver implements Dibi\Driver +class OdbcDriver implements Connection { /** @var resource */ private $connection; @@ -76,7 +76,7 @@ public function disconnect(): void * Executes the SQL query. * @throws Dibi\DriverException */ - public function query(string $sql): ?Dibi\ResultDriver + public function query(string $sql): ?Result { $this->affectedRows = null; $res = @odbc_exec($this->connection, $sql); // intentionally @ @@ -175,7 +175,7 @@ public function getResource(): mixed /** * Returns the connection reflector. */ - public function getReflector(): Dibi\Reflector + public function getReflector(): Engine { return new OdbcReflector($this); } diff --git a/src/Dibi/Drivers/OdbcReflector.php b/src/Dibi/Drivers/OdbcReflector.php index 0ec04a4c..a9da505c 100644 --- a/src/Dibi/Drivers/OdbcReflector.php +++ b/src/Dibi/Drivers/OdbcReflector.php @@ -15,10 +15,10 @@ /** * The reflector for ODBC connections. */ -class OdbcReflector implements Dibi\Reflector +class OdbcReflector implements Engine { public function __construct( - private readonly Dibi\Driver $driver, + private readonly Connection $driver, ) { } diff --git a/src/Dibi/Drivers/OdbcResult.php b/src/Dibi/Drivers/OdbcResult.php index 3a985a83..9417272d 100644 --- a/src/Dibi/Drivers/OdbcResult.php +++ b/src/Dibi/Drivers/OdbcResult.php @@ -15,7 +15,7 @@ /** * The driver interacting with result set via ODBC connections. */ -class OdbcResult implements Dibi\ResultDriver +class OdbcResult implements Result { private int $row = 0; diff --git a/src/Dibi/Drivers/OracleDriver.php b/src/Dibi/Drivers/OracleDriver.php index 46a757db..17ebbabc 100644 --- a/src/Dibi/Drivers/OracleDriver.php +++ b/src/Dibi/Drivers/OracleDriver.php @@ -25,7 +25,7 @@ * - resource (resource) => existing connection resource * - persistent => Creates persistent connections with oci_pconnect instead of oci_new_connect */ -class OracleDriver implements Dibi\Driver +class OracleDriver implements Connection { /** @var resource */ private $connection; @@ -76,7 +76,7 @@ public function disconnect(): void * Executes the SQL query. * @throws Dibi\DriverException */ - public function query(string $sql): ?Dibi\ResultDriver + public function query(string $sql): ?Result { $this->affectedRows = null; $res = oci_parse($this->connection, $sql); @@ -189,7 +189,7 @@ public function getResource(): mixed /** * Returns the connection reflector. */ - public function getReflector(): Dibi\Reflector + public function getReflector(): Engine { return new OracleReflector($this); } diff --git a/src/Dibi/Drivers/OracleReflector.php b/src/Dibi/Drivers/OracleReflector.php index 1ab4962d..8ffa5e18 100644 --- a/src/Dibi/Drivers/OracleReflector.php +++ b/src/Dibi/Drivers/OracleReflector.php @@ -15,10 +15,10 @@ /** * The reflector for Oracle database. */ -class OracleReflector implements Dibi\Reflector +class OracleReflector implements Engine { public function __construct( - private readonly Dibi\Driver $driver, + private readonly Connection $driver, ) { } diff --git a/src/Dibi/Drivers/OracleResult.php b/src/Dibi/Drivers/OracleResult.php index ca691559..8a96cbca 100644 --- a/src/Dibi/Drivers/OracleResult.php +++ b/src/Dibi/Drivers/OracleResult.php @@ -15,7 +15,7 @@ /** * The driver for Oracle result set. */ -class OracleResult implements Dibi\ResultDriver +class OracleResult implements Result { public function __construct( /** @var resource */ diff --git a/src/Dibi/Drivers/PdoDriver.php b/src/Dibi/Drivers/PdoDriver.php index d0b8a5d0..6fb09a71 100644 --- a/src/Dibi/Drivers/PdoDriver.php +++ b/src/Dibi/Drivers/PdoDriver.php @@ -24,7 +24,7 @@ * - options (array) => driver specific options {@see PDO::__construct} * - resource (PDO) => existing connection */ -class PdoDriver implements Dibi\Driver +class PdoDriver implements Connection { private ?PDO $connection; private ?int $affectedRows; @@ -79,7 +79,7 @@ public function disconnect(): void * Executes the SQL query. * @throws Dibi\DriverException */ - public function query(string $sql): ?Dibi\ResultDriver + public function query(string $sql): ?Result { $res = $this->connection->query($sql); if ($res) { @@ -171,7 +171,7 @@ public function getResource(): ?PDO /** * Returns the connection reflector. */ - public function getReflector(): Dibi\Reflector + public function getReflector(): Engine { return match ($this->driverName) { 'mysql' => new MySqlReflector($this), diff --git a/src/Dibi/Drivers/PdoResult.php b/src/Dibi/Drivers/PdoResult.php index bfb0f602..1bb1673c 100644 --- a/src/Dibi/Drivers/PdoResult.php +++ b/src/Dibi/Drivers/PdoResult.php @@ -17,7 +17,7 @@ /** * The driver for PDO result set. */ -class PdoResult implements Dibi\ResultDriver +class PdoResult implements Result { public function __construct( private ?\PDOStatement $resultSet, diff --git a/src/Dibi/Drivers/PostgreDriver.php b/src/Dibi/Drivers/PostgreDriver.php index b9b0603c..45ac4162 100644 --- a/src/Dibi/Drivers/PostgreDriver.php +++ b/src/Dibi/Drivers/PostgreDriver.php @@ -26,7 +26,7 @@ * - resource (PgSql\Connection) => existing connection resource * - connect_type (int) => see pg_connect() */ -class PostgreDriver implements Dibi\Driver +class PostgreDriver implements Connection { private PgSql\Connection $connection; private ?int $affectedRows; @@ -109,7 +109,7 @@ public function ping(): bool * Executes the SQL query. * @throws Dibi\DriverException */ - public function query(string $sql): ?Dibi\ResultDriver + public function query(string $sql): ?Result { $this->affectedRows = null; $res = @pg_query($this->connection, $sql); // intentionally @ @@ -231,7 +231,7 @@ public function getResource(): PgSql\Connection /** * Returns the connection reflector. */ - public function getReflector(): Dibi\Reflector + public function getReflector(): Engine { return new PostgreReflector($this); } diff --git a/src/Dibi/Drivers/PostgreReflector.php b/src/Dibi/Drivers/PostgreReflector.php index ab93130c..c16a9b63 100644 --- a/src/Dibi/Drivers/PostgreReflector.php +++ b/src/Dibi/Drivers/PostgreReflector.php @@ -9,16 +9,15 @@ namespace Dibi\Drivers; -use Dibi; /** * The reflector for PostgreSQL database. */ -class PostgreReflector implements Dibi\Reflector +class PostgreReflector implements Engine { public function __construct( - private readonly Dibi\Driver $driver, + private readonly Connection $driver, ) { } diff --git a/src/Dibi/Drivers/PostgreResult.php b/src/Dibi/Drivers/PostgreResult.php index e74f36ca..dc975465 100644 --- a/src/Dibi/Drivers/PostgreResult.php +++ b/src/Dibi/Drivers/PostgreResult.php @@ -9,7 +9,6 @@ namespace Dibi\Drivers; -use Dibi; use Dibi\Helpers; use PgSql; @@ -17,7 +16,7 @@ /** * The driver for PostgreSQL result set. */ -class PostgreResult implements Dibi\ResultDriver +class PostgreResult implements Result { public function __construct( private readonly PgSql\Result $resultSet, diff --git a/src/Dibi/Drivers/Result.php b/src/Dibi/Drivers/Result.php new file mode 100644 index 00000000..f90658b3 --- /dev/null +++ b/src/Dibi/Drivers/Result.php @@ -0,0 +1,58 @@ + how to format datetime in SQL (@see date) * - resource (SQLite3) => existing connection resource */ -class SqliteDriver implements Dibi\Driver +class SqliteDriver implements Connection { private SQLite3 $connection; private string $fmtDate; @@ -73,7 +73,7 @@ public function disconnect(): void * Executes the SQL query. * @throws Dibi\DriverException */ - public function query(string $sql): ?Dibi\ResultDriver + public function query(string $sql): ?Result { $res = @$this->connection->query($sql); // intentionally @ if ($code = $this->connection->lastErrorCode()) { @@ -174,7 +174,7 @@ public function getResource(): ?SQLite3 /** * Returns the connection reflector. */ - public function getReflector(): Dibi\Reflector + public function getReflector(): Engine { return new SqliteReflector($this); } diff --git a/src/Dibi/Drivers/SqliteReflector.php b/src/Dibi/Drivers/SqliteReflector.php index 8c1e3ade..d2c449a9 100644 --- a/src/Dibi/Drivers/SqliteReflector.php +++ b/src/Dibi/Drivers/SqliteReflector.php @@ -9,16 +9,15 @@ namespace Dibi\Drivers; -use Dibi; /** * The reflector for SQLite database. */ -class SqliteReflector implements Dibi\Reflector +class SqliteReflector implements Engine { public function __construct( - private readonly Dibi\Driver $driver, + private readonly Connection $driver, ) { } diff --git a/src/Dibi/Drivers/SqliteResult.php b/src/Dibi/Drivers/SqliteResult.php index c3fef40e..dede2d29 100644 --- a/src/Dibi/Drivers/SqliteResult.php +++ b/src/Dibi/Drivers/SqliteResult.php @@ -16,7 +16,7 @@ /** * The driver for SQLite result set. */ -class SqliteResult implements Dibi\ResultDriver +class SqliteResult implements Result { public function __construct( private readonly \SQLite3Result $resultSet, diff --git a/src/Dibi/Drivers/SqlsrvDriver.php b/src/Dibi/Drivers/SqlsrvDriver.php index 0a999335..b3d8d46e 100644 --- a/src/Dibi/Drivers/SqlsrvDriver.php +++ b/src/Dibi/Drivers/SqlsrvDriver.php @@ -25,7 +25,7 @@ * - charset => character encoding to set (default is UTF-8) * - resource (resource) => existing connection resource */ -class SqlsrvDriver implements Dibi\Driver +class SqlsrvDriver implements Connection { /** @var resource */ private $connection; @@ -83,7 +83,7 @@ public function disconnect(): void * Executes the SQL query. * @throws Dibi\DriverException */ - public function query(string $sql): ?Dibi\ResultDriver + public function query(string $sql): ?Result { $this->affectedRows = null; $res = sqlsrv_query($this->connection, $sql); @@ -170,7 +170,7 @@ public function getResource(): mixed /** * Returns the connection reflector. */ - public function getReflector(): Dibi\Reflector + public function getReflector(): Engine { return new SqlsrvReflector($this); } diff --git a/src/Dibi/Drivers/SqlsrvReflector.php b/src/Dibi/Drivers/SqlsrvReflector.php index b19249a7..46b95f6c 100644 --- a/src/Dibi/Drivers/SqlsrvReflector.php +++ b/src/Dibi/Drivers/SqlsrvReflector.php @@ -15,10 +15,10 @@ /** * The reflector for Microsoft SQL Server and SQL Azure databases. */ -class SqlsrvReflector implements Dibi\Reflector +class SqlsrvReflector implements Engine { public function __construct( - private readonly Dibi\Driver $driver, + private readonly Connection $driver, ) { } diff --git a/src/Dibi/Drivers/SqlsrvResult.php b/src/Dibi/Drivers/SqlsrvResult.php index 8ad14a74..1f692ab0 100644 --- a/src/Dibi/Drivers/SqlsrvResult.php +++ b/src/Dibi/Drivers/SqlsrvResult.php @@ -15,7 +15,7 @@ /** * The driver for Microsoft SQL Server and SQL Azure result set. */ -class SqlsrvResult implements Dibi\ResultDriver +class SqlsrvResult implements Result { public function __construct( /** @var resource */ diff --git a/src/Dibi/Helpers.php b/src/Dibi/Helpers.php index 83fca323..40bcba18 100644 --- a/src/Dibi/Helpers.php +++ b/src/Dibi/Helpers.php @@ -156,7 +156,7 @@ public static function getSuggestion(array $items, string $value): ?string /** @internal */ - public static function escape(Driver $driver, $value, string $type): string + public static function escape(Drivers\Connection $driver, $value, string $type): string { $types = [ Type::Text => 'text', diff --git a/src/Dibi/IDataSource.php b/src/Dibi/IDataSource.php new file mode 100644 index 00000000..0565fc45 --- /dev/null +++ b/src/Dibi/IDataSource.php @@ -0,0 +1,20 @@ +columns)) { $this->columns = []; - $reflector = $this->driver instanceof Dibi\Reflector + $reflector = $this->driver instanceof Dibi\Drivers\Engine ? $this->driver : null; foreach ($this->driver->getResultColumns() as $info) { diff --git a/src/Dibi/Reflection/Table.php b/src/Dibi/Reflection/Table.php index 7c5b64ed..e262add4 100644 --- a/src/Dibi/Reflection/Table.php +++ b/src/Dibi/Reflection/Table.php @@ -25,7 +25,7 @@ */ class Table { - private readonly Dibi\Reflector $reflector; + private readonly Dibi\Drivers\Engine $reflector; private string $name; private bool $view; @@ -40,7 +40,7 @@ class Table private ?Index $primaryKey; - public function __construct(Dibi\Reflector $reflector, array $info) + public function __construct(Dibi\Drivers\Engine $reflector, array $info) { $this->reflector = $reflector; $this->name = $info['name']; diff --git a/src/Dibi/Result.php b/src/Dibi/Result.php index 24f4513d..45a3b882 100644 --- a/src/Dibi/Result.php +++ b/src/Dibi/Result.php @@ -17,7 +17,7 @@ */ class Result implements IDataSource { - private ?ResultDriver $driver; + private ?Drivers\Result $driver; /** Translate table */ private array $types = []; @@ -34,7 +34,7 @@ class Result implements IDataSource private array $formats = []; - public function __construct(ResultDriver $driver, bool $normalize = true) + public function __construct(Drivers\Result $driver, bool $normalize = true) { $this->driver = $driver; if ($normalize) { @@ -59,7 +59,7 @@ final public function free(): void * Safe access to property $driver. * @throws \RuntimeException */ - final public function getResultDriver(): ResultDriver + final public function getResultDriver(): Drivers\Result { if ($this->driver === null) { throw new \RuntimeException('Result-set was released from memory.'); diff --git a/src/Dibi/Translator.php b/src/Dibi/Translator.php index 8dc4063e..4fefa673 100644 --- a/src/Dibi/Translator.php +++ b/src/Dibi/Translator.php @@ -15,8 +15,8 @@ */ final class Translator { - private readonly Connection $connection; - private readonly Driver $driver; + private Connection $connection; + private readonly Drivers\Connection $driver; private int $cursor = 0; private array $args; diff --git a/src/Dibi/interfaces.php b/src/Dibi/interfaces.php deleted file mode 100644 index 753d0b6e..00000000 --- a/src/Dibi/interfaces.php +++ /dev/null @@ -1,180 +0,0 @@ -getConfig('lazy')); Assert::same($config['driver'], $conn->getConfig('driver')); - Assert::type(Dibi\Driver::class, $conn->getDriver()); + Assert::type(Dibi\Drivers\Connection::class, $conn->getDriver()); }); diff --git a/tests/dibi/Fluent.fetch.limit.mssql.phpt b/tests/dibi/Fluent.fetch.limit.mssql.phpt index d07ce4e8..cc358042 100644 --- a/tests/dibi/Fluent.fetch.limit.mssql.phpt +++ b/tests/dibi/Fluent.fetch.limit.mssql.phpt @@ -19,7 +19,7 @@ class MockDriver extends Dibi\Drivers\SqlsrvDriver } - public function query(string $sql): ?Dibi\ResultDriver + public function query(string $sql): ?Dibi\Drivers\Result { return new MockResult; } From 04f006adce6d7e9e57cebfeb34b8e52e8182ac83 Mon Sep 17 00:00:00 2001 From: David Grudl Date: Tue, 3 Sep 2024 16:39:56 +0200 Subject: [PATCH 10/11] renamed driver classes --- src/Dibi/Connection.php | 17 +++++++++-- .../{DummyDriver.php => Dummy/Connection.php} | 7 +++-- .../{NoDataResult.php => Dummy/Result.php} | 5 ++-- .../FirebirdEngine.php} | 6 ++-- .../MySQLEngine.php} | 6 ++-- .../ODBCEngine.php} | 6 ++-- .../OracleEngine.php} | 6 ++-- .../PostgreSQLEngine.php} | 6 ++-- .../SQLServerEngine.php} | 6 ++-- .../SQLiteEngine.php} | 6 ++-- .../Connection.php} | 13 ++++---- .../Result.php} | 7 +++-- .../Connection.php} | 13 ++++---- .../{MySqliResult.php => MySQLi/Result.php} | 5 ++-- .../{OracleDriver.php => OCI8/Connection.php} | 13 ++++---- .../{OracleResult.php => OCI8/Result.php} | 5 ++-- .../{OdbcDriver.php => ODBC/Connection.php} | 13 ++++---- .../{OdbcResult.php => ODBC/Result.php} | 5 ++-- .../{PdoDriver.php => PDO/Connection.php} | 30 ++++++++++--------- .../Drivers/{PdoResult.php => PDO/Result.php} | 5 ++-- .../Connection.php} | 13 ++++---- .../{PostgreResult.php => PgSQL/Result.php} | 5 ++-- .../Connection.php} | 13 ++++---- .../{SqlsrvResult.php => SQLSrv/Result.php} | 5 ++-- .../Connection.php} | 13 ++++---- .../{SqliteResult.php => SQLite3/Result.php} | 5 ++-- src/Dibi/Drivers/Sqlite3Driver.php | 18 ----------- src/Dibi/Drivers/Sqlite3Result.php | 18 ----------- tests/dibi/Fluent.fetch.limit.mssql.phpt | 8 +++-- tests/dibi/PdoDriver.providedConnection.phpt | 2 +- 30 files changed, 145 insertions(+), 135 deletions(-) rename src/Dibi/Drivers/{DummyDriver.php => Dummy/Connection.php} (94%) rename src/Dibi/Drivers/{NoDataResult.php => Dummy/Result.php} (90%) rename src/Dibi/Drivers/{FirebirdReflector.php => Engines/FirebirdEngine.php} (98%) rename src/Dibi/Drivers/{MySqlReflector.php => Engines/MySQLEngine.php} (96%) rename src/Dibi/Drivers/{OdbcReflector.php => Engines/ODBCEngine.php} (93%) rename src/Dibi/Drivers/{OracleReflector.php => Engines/OracleEngine.php} (92%) rename src/Dibi/Drivers/{PostgreReflector.php => Engines/PostgreSQLEngine.php} (98%) rename src/Dibi/Drivers/{SqlsrvReflector.php => Engines/SQLServerEngine.php} (96%) rename src/Dibi/Drivers/{SqliteReflector.php => Engines/SQLiteEngine.php} (96%) rename src/Dibi/Drivers/{FirebirdDriver.php => Firebird/Connection.php} (95%) rename src/Dibi/Drivers/{FirebirdResult.php => Firebird/Result.php} (94%) rename src/Dibi/Drivers/{MySqliDriver.php => MySQLi/Connection.php} (96%) rename src/Dibi/Drivers/{MySqliResult.php => MySQLi/Result.php} (96%) rename src/Dibi/Drivers/{OracleDriver.php => OCI8/Connection.php} (96%) rename src/Dibi/Drivers/{OracleResult.php => OCI8/Result.php} (96%) rename src/Dibi/Drivers/{OdbcDriver.php => ODBC/Connection.php} (95%) rename src/Dibi/Drivers/{OdbcResult.php => ODBC/Result.php} (96%) rename src/Dibi/Drivers/{PdoDriver.php => PDO/Connection.php} (91%) rename src/Dibi/Drivers/{PdoResult.php => PDO/Result.php} (96%) rename src/Dibi/Drivers/{PostgreDriver.php => PgSQL/Connection.php} (96%) rename src/Dibi/Drivers/{PostgreResult.php => PgSQL/Result.php} (95%) rename src/Dibi/Drivers/{SqlsrvDriver.php => SQLSrv/Connection.php} (95%) rename src/Dibi/Drivers/{SqlsrvResult.php => SQLSrv/Result.php} (95%) rename src/Dibi/Drivers/{SqliteDriver.php => SQLite3/Connection.php} (95%) rename src/Dibi/Drivers/{SqliteResult.php => SQLite3/Result.php} (96%) delete mode 100644 src/Dibi/Drivers/Sqlite3Driver.php delete mode 100644 src/Dibi/Drivers/Sqlite3Result.php diff --git a/src/Dibi/Connection.php b/src/Dibi/Connection.php index 7ec88463..84ab5c06 100644 --- a/src/Dibi/Connection.php +++ b/src/Dibi/Connection.php @@ -21,6 +21,18 @@ */ 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 */ public ?array $onEvent = []; private array $config; @@ -129,8 +141,7 @@ final public function connect(): void $class = $this->config['driver']; } else { - $class = preg_replace(['#\W#', '#sql#'], ['_', 'Sql'], ucfirst(strtolower($this->config['driver']))); - $class = "Dibi\\Drivers\\{$class}Driver"; + $class = self::Drivers[strtolower($this->config['driver'])] ?? throw new Exception("Unknown driver '{$this->config['driver']}'."); if (!class_exists($class)) { throw new Exception("Unable to create instance of Dibi driver '$class'."); } @@ -284,7 +295,7 @@ final public function nativeQuery(#[Language('SQL')] string $sql): Result 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) { $this->onEvent($event->done($res)); } diff --git a/src/Dibi/Drivers/DummyDriver.php b/src/Dibi/Drivers/Dummy/Connection.php similarity index 94% rename from src/Dibi/Drivers/DummyDriver.php rename to src/Dibi/Drivers/Dummy/Connection.php index 74501d3a..e4c630c4 100644 --- a/src/Dibi/Drivers/DummyDriver.php +++ b/src/Dibi/Drivers/Dummy/Connection.php @@ -7,15 +7,16 @@ declare(strict_types=1); -namespace Dibi\Drivers; +namespace Dibi\Drivers\Dummy; use Dibi; +use Dibi\Drivers; /** * 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 { @@ -64,7 +65,7 @@ public function getResource(): mixed /** * Returns the connection reflector. */ - public function getReflector(): Engine + public function getReflector(): Drivers\Engine { return $this; } diff --git a/src/Dibi/Drivers/NoDataResult.php b/src/Dibi/Drivers/Dummy/Result.php similarity index 90% rename from src/Dibi/Drivers/NoDataResult.php rename to src/Dibi/Drivers/Dummy/Result.php index 7f5190a5..4e13e702 100644 --- a/src/Dibi/Drivers/NoDataResult.php +++ b/src/Dibi/Drivers/Dummy/Result.php @@ -7,14 +7,15 @@ declare(strict_types=1); -namespace Dibi\Drivers; +namespace Dibi\Drivers\Dummy; +use Dibi\Drivers; /** * The driver for no result set. */ -class NoDataResult implements Result +class Result implements Drivers\Result { public function __construct( private readonly int $rows, diff --git a/src/Dibi/Drivers/FirebirdReflector.php b/src/Dibi/Drivers/Engines/FirebirdEngine.php similarity index 98% rename from src/Dibi/Drivers/FirebirdReflector.php rename to src/Dibi/Drivers/Engines/FirebirdEngine.php index 292c800b..1818d8f7 100644 --- a/src/Dibi/Drivers/FirebirdReflector.php +++ b/src/Dibi/Drivers/Engines/FirebirdEngine.php @@ -7,14 +7,16 @@ 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. */ -class FirebirdReflector implements Engine +class FirebirdEngine implements Engine { public function __construct( private readonly Connection $driver, diff --git a/src/Dibi/Drivers/MySqlReflector.php b/src/Dibi/Drivers/Engines/MySQLEngine.php similarity index 96% rename from src/Dibi/Drivers/MySqlReflector.php rename to src/Dibi/Drivers/Engines/MySQLEngine.php index ecf1cfa2..f3680634 100644 --- a/src/Dibi/Drivers/MySqlReflector.php +++ b/src/Dibi/Drivers/Engines/MySQLEngine.php @@ -7,16 +7,18 @@ declare(strict_types=1); -namespace Dibi\Drivers; +namespace Dibi\Drivers\Engines; use Dibi; +use Dibi\Drivers\Connection; +use Dibi\Drivers\Engine; /** * The reflector for MySQL databases. * @internal */ -class MySqlReflector implements Engine +class MySQLEngine implements Engine { public function __construct( private readonly Connection $driver, diff --git a/src/Dibi/Drivers/OdbcReflector.php b/src/Dibi/Drivers/Engines/ODBCEngine.php similarity index 93% rename from src/Dibi/Drivers/OdbcReflector.php rename to src/Dibi/Drivers/Engines/ODBCEngine.php index a9da505c..4831bf0e 100644 --- a/src/Dibi/Drivers/OdbcReflector.php +++ b/src/Dibi/Drivers/Engines/ODBCEngine.php @@ -7,15 +7,17 @@ declare(strict_types=1); -namespace Dibi\Drivers; +namespace Dibi\Drivers\Engines; use Dibi; +use Dibi\Drivers\Connection; +use Dibi\Drivers\Engine; /** * The reflector for ODBC connections. */ -class OdbcReflector implements Engine +class ODBCEngine implements Engine { public function __construct( private readonly Connection $driver, diff --git a/src/Dibi/Drivers/OracleReflector.php b/src/Dibi/Drivers/Engines/OracleEngine.php similarity index 92% rename from src/Dibi/Drivers/OracleReflector.php rename to src/Dibi/Drivers/Engines/OracleEngine.php index 8ffa5e18..b20b29a1 100644 --- a/src/Dibi/Drivers/OracleReflector.php +++ b/src/Dibi/Drivers/Engines/OracleEngine.php @@ -7,15 +7,17 @@ declare(strict_types=1); -namespace Dibi\Drivers; +namespace Dibi\Drivers\Engines; use Dibi; +use Dibi\Drivers\Connection; +use Dibi\Drivers\Engine; /** * The reflector for Oracle database. */ -class OracleReflector implements Engine +class OracleEngine implements Engine { public function __construct( private readonly Connection $driver, diff --git a/src/Dibi/Drivers/PostgreReflector.php b/src/Dibi/Drivers/Engines/PostgreSQLEngine.php similarity index 98% rename from src/Dibi/Drivers/PostgreReflector.php rename to src/Dibi/Drivers/Engines/PostgreSQLEngine.php index c16a9b63..04c2927b 100644 --- a/src/Dibi/Drivers/PostgreReflector.php +++ b/src/Dibi/Drivers/Engines/PostgreSQLEngine.php @@ -7,14 +7,16 @@ declare(strict_types=1); -namespace Dibi\Drivers; +namespace Dibi\Drivers\Engines; +use Dibi\Drivers\Connection; +use Dibi\Drivers\Engine; /** * The reflector for PostgreSQL database. */ -class PostgreReflector implements Engine +class PostgreSQLEngine implements Engine { public function __construct( private readonly Connection $driver, diff --git a/src/Dibi/Drivers/SqlsrvReflector.php b/src/Dibi/Drivers/Engines/SQLServerEngine.php similarity index 96% rename from src/Dibi/Drivers/SqlsrvReflector.php rename to src/Dibi/Drivers/Engines/SQLServerEngine.php index 46b95f6c..bee8c746 100644 --- a/src/Dibi/Drivers/SqlsrvReflector.php +++ b/src/Dibi/Drivers/Engines/SQLServerEngine.php @@ -7,15 +7,17 @@ declare(strict_types=1); -namespace Dibi\Drivers; +namespace Dibi\Drivers\Engines; use Dibi; +use Dibi\Drivers\Connection; +use Dibi\Drivers\Engine; /** * The reflector for Microsoft SQL Server and SQL Azure databases. */ -class SqlsrvReflector implements Engine +class SQLServerEngine implements Engine { public function __construct( private readonly Connection $driver, diff --git a/src/Dibi/Drivers/SqliteReflector.php b/src/Dibi/Drivers/Engines/SQLiteEngine.php similarity index 96% rename from src/Dibi/Drivers/SqliteReflector.php rename to src/Dibi/Drivers/Engines/SQLiteEngine.php index d2c449a9..7ab2328e 100644 --- a/src/Dibi/Drivers/SqliteReflector.php +++ b/src/Dibi/Drivers/Engines/SQLiteEngine.php @@ -7,14 +7,16 @@ declare(strict_types=1); -namespace Dibi\Drivers; +namespace Dibi\Drivers\Engines; +use Dibi\Drivers\Connection; +use Dibi\Drivers\Engine; /** * The reflector for SQLite database. */ -class SqliteReflector implements Engine +class SQLiteEngine implements Engine { public function __construct( private readonly Connection $driver, diff --git a/src/Dibi/Drivers/FirebirdDriver.php b/src/Dibi/Drivers/Firebird/Connection.php similarity index 95% rename from src/Dibi/Drivers/FirebirdDriver.php rename to src/Dibi/Drivers/Firebird/Connection.php index ba7f86dc..82dae6c0 100644 --- a/src/Dibi/Drivers/FirebirdDriver.php +++ b/src/Dibi/Drivers/Firebird/Connection.php @@ -7,9 +7,10 @@ declare(strict_types=1); -namespace Dibi\Drivers; +namespace Dibi\Drivers\Ibase; use Dibi; +use Dibi\Drivers; use Dibi\Helpers; @@ -24,7 +25,7 @@ * - 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 */ -class FirebirdDriver implements Connection +class Connection implements Drivers\Connection { public const ErrorExceptionThrown = -836; @@ -199,9 +200,9 @@ public function getResource(): mixed /** * Returns the connection reflector. */ - public function getReflector(): Engine + public function getReflector(): Drivers\Engine { - return new FirebirdReflector($this); + return new Drivers\Engines\FirebirdEngine($this); } @@ -209,9 +210,9 @@ public function getReflector(): Engine * Result set driver factory. * @param resource $resource */ - public function createResultDriver($resource): FirebirdResult + public function createResultDriver($resource): Result { - return new FirebirdResult($resource); + return new Result($resource); } diff --git a/src/Dibi/Drivers/FirebirdResult.php b/src/Dibi/Drivers/Firebird/Result.php similarity index 94% rename from src/Dibi/Drivers/FirebirdResult.php rename to src/Dibi/Drivers/Firebird/Result.php index f3bf3966..c6f537c2 100644 --- a/src/Dibi/Drivers/FirebirdResult.php +++ b/src/Dibi/Drivers/Firebird/Result.php @@ -7,16 +7,17 @@ declare(strict_types=1); -namespace Dibi\Drivers; +namespace Dibi\Drivers\Ibase; use Dibi; +use Dibi\Drivers; use Dibi\Helpers; /** * The driver for Firebird/InterBase result set. */ -class FirebirdResult implements Result +class Result implements Drivers\Result { public function __construct( /** @var resource */ @@ -45,7 +46,7 @@ public function fetch(bool $assoc): ?array : @ibase_fetch_row($this->resultSet, IBASE_TEXT); // intentionally @ 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); throw new Dibi\ProcedureException($match[3], $match[1], $match[2]); diff --git a/src/Dibi/Drivers/MySqliDriver.php b/src/Dibi/Drivers/MySQLi/Connection.php similarity index 96% rename from src/Dibi/Drivers/MySqliDriver.php rename to src/Dibi/Drivers/MySQLi/Connection.php index 3bf130df..35afac93 100644 --- a/src/Dibi/Drivers/MySqliDriver.php +++ b/src/Dibi/Drivers/MySQLi/Connection.php @@ -7,9 +7,10 @@ declare(strict_types=1); -namespace Dibi\Drivers; +namespace Dibi\Drivers\MySQLi; use Dibi; +use Dibi\Drivers; /** @@ -30,7 +31,7 @@ * - sqlmode => see http://dev.mysql.com/doc/refman/5.0/en/server-sql-mode.html * - resource (mysqli) => existing connection resource */ -class MySqliDriver implements Connection +class Connection implements Drivers\Connection { public const ErrorAccessDenied = 1045; public const ErrorDuplicateEntry = 1062; @@ -263,18 +264,18 @@ public function getResource(): ?\mysqli /** * 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. */ - 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); } diff --git a/src/Dibi/Drivers/MySqliResult.php b/src/Dibi/Drivers/MySQLi/Result.php similarity index 96% rename from src/Dibi/Drivers/MySqliResult.php rename to src/Dibi/Drivers/MySQLi/Result.php index 59c5058a..830cb6a2 100644 --- a/src/Dibi/Drivers/MySqliResult.php +++ b/src/Dibi/Drivers/MySQLi/Result.php @@ -7,15 +7,16 @@ declare(strict_types=1); -namespace Dibi\Drivers; +namespace Dibi\Drivers\MySQLi; use Dibi; +use Dibi\Drivers; /** * The driver for MySQL result set. */ -class MySqliResult implements Result +class Result implements Drivers\Result { public function __construct( private readonly \mysqli_result $resultSet, diff --git a/src/Dibi/Drivers/OracleDriver.php b/src/Dibi/Drivers/OCI8/Connection.php similarity index 96% rename from src/Dibi/Drivers/OracleDriver.php rename to src/Dibi/Drivers/OCI8/Connection.php index 17ebbabc..3422d4ac 100644 --- a/src/Dibi/Drivers/OracleDriver.php +++ b/src/Dibi/Drivers/OCI8/Connection.php @@ -7,9 +7,10 @@ declare(strict_types=1); -namespace Dibi\Drivers; +namespace Dibi\Drivers\OCI8; use Dibi; +use Dibi\Drivers; /** @@ -25,7 +26,7 @@ * - resource (resource) => existing connection resource * - persistent => Creates persistent connections with oci_pconnect instead of oci_new_connect */ -class OracleDriver implements Connection +class Connection implements Drivers\Connection { /** @var resource */ private $connection; @@ -189,9 +190,9 @@ public function getResource(): mixed /** * Returns the connection reflector. */ - public function getReflector(): Engine + public function getReflector(): Drivers\Engine { - return new OracleReflector($this); + return new Drivers\Engines\OracleEngine($this); } @@ -199,9 +200,9 @@ public function getReflector(): Engine * Result set driver factory. * @param resource $resource */ - public function createResultDriver($resource): OracleResult + public function createResultDriver($resource): Result { - return new OracleResult($resource); + return new Result($resource); } diff --git a/src/Dibi/Drivers/OracleResult.php b/src/Dibi/Drivers/OCI8/Result.php similarity index 96% rename from src/Dibi/Drivers/OracleResult.php rename to src/Dibi/Drivers/OCI8/Result.php index 8a96cbca..5281f333 100644 --- a/src/Dibi/Drivers/OracleResult.php +++ b/src/Dibi/Drivers/OCI8/Result.php @@ -7,15 +7,16 @@ declare(strict_types=1); -namespace Dibi\Drivers; +namespace Dibi\Drivers\OCI8; use Dibi; +use Dibi\Drivers; /** * The driver for Oracle result set. */ -class OracleResult implements Result +class Result implements Drivers\Result { public function __construct( /** @var resource */ diff --git a/src/Dibi/Drivers/OdbcDriver.php b/src/Dibi/Drivers/ODBC/Connection.php similarity index 95% rename from src/Dibi/Drivers/OdbcDriver.php rename to src/Dibi/Drivers/ODBC/Connection.php index f1e216e3..65e3c5ac 100644 --- a/src/Dibi/Drivers/OdbcDriver.php +++ b/src/Dibi/Drivers/ODBC/Connection.php @@ -7,9 +7,10 @@ declare(strict_types=1); -namespace Dibi\Drivers; +namespace Dibi\Drivers\ODBC; use Dibi; +use Dibi\Drivers; /** @@ -23,7 +24,7 @@ * - resource (resource) => existing connection resource * - microseconds (bool) => use microseconds in datetime format? */ -class OdbcDriver implements Connection +class Connection implements Drivers\Connection { /** @var resource */ private $connection; @@ -175,9 +176,9 @@ public function getResource(): mixed /** * Returns the connection reflector. */ - public function getReflector(): Engine + public function getReflector(): Drivers\Engine { - return new OdbcReflector($this); + return new Drivers\Engines\ODBCEngine($this); } @@ -185,9 +186,9 @@ public function getReflector(): Engine * Result set driver factory. * @param resource $resource */ - public function createResultDriver($resource): OdbcResult + public function createResultDriver($resource): Result { - return new OdbcResult($resource); + return new Result($resource); } diff --git a/src/Dibi/Drivers/OdbcResult.php b/src/Dibi/Drivers/ODBC/Result.php similarity index 96% rename from src/Dibi/Drivers/OdbcResult.php rename to src/Dibi/Drivers/ODBC/Result.php index 9417272d..4ec23f7b 100644 --- a/src/Dibi/Drivers/OdbcResult.php +++ b/src/Dibi/Drivers/ODBC/Result.php @@ -7,15 +7,16 @@ declare(strict_types=1); -namespace Dibi\Drivers; +namespace Dibi\Drivers\ODBC; use Dibi; +use Dibi\Drivers; /** * The driver interacting with result set via ODBC connections. */ -class OdbcResult implements Result +class Result implements Drivers\Result { private int $row = 0; diff --git a/src/Dibi/Drivers/PdoDriver.php b/src/Dibi/Drivers/PDO/Connection.php similarity index 91% rename from src/Dibi/Drivers/PdoDriver.php rename to src/Dibi/Drivers/PDO/Connection.php index 6fb09a71..72c298ff 100644 --- a/src/Dibi/Drivers/PdoDriver.php +++ b/src/Dibi/Drivers/PDO/Connection.php @@ -7,9 +7,11 @@ declare(strict_types=1); -namespace Dibi\Drivers; +namespace Dibi\Drivers\PDO; use Dibi; +use Dibi\Drivers; +use Dibi\Drivers\Engines; use Dibi\Helpers; use PDO; @@ -24,7 +26,7 @@ * - options (array) => driver specific options {@see PDO::__construct} * - resource (PDO) => existing connection */ -class PdoDriver implements Connection +class Connection implements Drivers\Connection { private ?PDO $connection; private ?int $affectedRows; @@ -93,10 +95,10 @@ public function query(string $sql): ?Result $code ??= 0; $message = "SQLSTATE[$sqlState]: $message"; throw match ($this->driverName) { - 'mysql' => MySqliDriver::createException($message, $code, $sql), - 'oci' => OracleDriver::createException($message, $code, $sql), - 'pgsql' => PostgreDriver::createException($message, $sqlState, $sql), - 'sqlite' => SqliteDriver::createException($message, $code, $sql), + 'mysql' => Drivers\MySQLi\Connection::createException($message, $code, $sql), + 'oci' => Drivers\OCI8\Connection::createException($message, $code, $sql), + 'pgsql' => Drivers\PgSQL\Connection::createException($message, $sqlState, $sql), + 'sqlite' => Drivers\SQLite3\Connection::createException($message, $code, $sql), default => new Dibi\DriverException($message, $code, $sql), }; } @@ -171,14 +173,14 @@ public function getResource(): ?PDO /** * Returns the connection reflector. */ - public function getReflector(): Engine + public function getReflector(): Drivers\Engine { return match ($this->driverName) { - 'mysql' => new MySqlReflector($this), - 'oci' => new OracleReflector($this), - 'pgsql' => new PostgreReflector($this), - 'sqlite' => new SqliteReflector($this), - 'mssql', 'dblib', 'sqlsrv' => new SqlsrvReflector($this), + 'mysql' => new Engines\MySQLEngine($this), + 'oci' => new Engines\OracleEngine($this), + 'pgsql' => new Engines\PostgreSQLEngine($this), + 'sqlite' => new Engines\SQLiteEngine($this), + 'mssql', 'dblib', 'sqlsrv' => new Engines\SQLServerEngine($this), default => throw new Dibi\NotSupportedException, }; } @@ -187,9 +189,9 @@ public function getReflector(): Engine /** * 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); } diff --git a/src/Dibi/Drivers/PdoResult.php b/src/Dibi/Drivers/PDO/Result.php similarity index 96% rename from src/Dibi/Drivers/PdoResult.php rename to src/Dibi/Drivers/PDO/Result.php index 1bb1673c..bf0d3960 100644 --- a/src/Dibi/Drivers/PdoResult.php +++ b/src/Dibi/Drivers/PDO/Result.php @@ -7,9 +7,10 @@ declare(strict_types=1); -namespace Dibi\Drivers; +namespace Dibi\Drivers\PDO; use Dibi; +use Dibi\Drivers; use Dibi\Helpers; use PDO; @@ -17,7 +18,7 @@ /** * The driver for PDO result set. */ -class PdoResult implements Result +class Result implements Drivers\Result { public function __construct( private ?\PDOStatement $resultSet, diff --git a/src/Dibi/Drivers/PostgreDriver.php b/src/Dibi/Drivers/PgSQL/Connection.php similarity index 96% rename from src/Dibi/Drivers/PostgreDriver.php rename to src/Dibi/Drivers/PgSQL/Connection.php index 45ac4162..9f36eb92 100644 --- a/src/Dibi/Drivers/PostgreDriver.php +++ b/src/Dibi/Drivers/PgSQL/Connection.php @@ -7,9 +7,10 @@ declare(strict_types=1); -namespace Dibi\Drivers; +namespace Dibi\Drivers\PgSQL; use Dibi; +use Dibi\Drivers; use Dibi\Helpers; use PgSql; @@ -26,7 +27,7 @@ * - resource (PgSql\Connection) => existing connection resource * - connect_type (int) => see pg_connect() */ -class PostgreDriver implements Connection +class Connection implements Drivers\Connection { private PgSql\Connection $connection; private ?int $affectedRows; @@ -231,18 +232,18 @@ public function getResource(): PgSql\Connection /** * 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. */ - public function createResultDriver(PgSql\Result $resource): PostgreResult + public function createResultDriver(PgSql\Result $resource): Result { - return new PostgreResult($resource); + return new Result($resource); } diff --git a/src/Dibi/Drivers/PostgreResult.php b/src/Dibi/Drivers/PgSQL/Result.php similarity index 95% rename from src/Dibi/Drivers/PostgreResult.php rename to src/Dibi/Drivers/PgSQL/Result.php index dc975465..1f66c29f 100644 --- a/src/Dibi/Drivers/PostgreResult.php +++ b/src/Dibi/Drivers/PgSQL/Result.php @@ -7,8 +7,9 @@ declare(strict_types=1); -namespace Dibi\Drivers; +namespace Dibi\Drivers\PgSQL; +use Dibi\Drivers; use Dibi\Helpers; use PgSql; @@ -16,7 +17,7 @@ /** * The driver for PostgreSQL result set. */ -class PostgreResult implements Result +class Result implements Drivers\Result { public function __construct( private readonly PgSql\Result $resultSet, diff --git a/src/Dibi/Drivers/SqlsrvDriver.php b/src/Dibi/Drivers/SQLSrv/Connection.php similarity index 95% rename from src/Dibi/Drivers/SqlsrvDriver.php rename to src/Dibi/Drivers/SQLSrv/Connection.php index b3d8d46e..ef9dc999 100644 --- a/src/Dibi/Drivers/SqlsrvDriver.php +++ b/src/Dibi/Drivers/SQLSrv/Connection.php @@ -7,9 +7,10 @@ declare(strict_types=1); -namespace Dibi\Drivers; +namespace Dibi\Drivers\SQLSrv; use Dibi; +use Dibi\Drivers; use Dibi\Helpers; @@ -25,7 +26,7 @@ * - charset => character encoding to set (default is UTF-8) * - resource (resource) => existing connection resource */ -class SqlsrvDriver implements Connection +class Connection implements Drivers\Connection { /** @var resource */ private $connection; @@ -170,9 +171,9 @@ public function getResource(): mixed /** * Returns the connection reflector. */ - public function getReflector(): Engine + public function getReflector(): Drivers\Engine { - return new SqlsrvReflector($this); + return new Drivers\Engines\SQLServerEngine($this); } @@ -180,9 +181,9 @@ public function getReflector(): Engine * Result set driver factory. * @param resource $resource */ - public function createResultDriver($resource): SqlsrvResult + public function createResultDriver($resource): Result { - return new SqlsrvResult($resource); + return new Result($resource); } diff --git a/src/Dibi/Drivers/SqlsrvResult.php b/src/Dibi/Drivers/SQLSrv/Result.php similarity index 95% rename from src/Dibi/Drivers/SqlsrvResult.php rename to src/Dibi/Drivers/SQLSrv/Result.php index 1f692ab0..c69488be 100644 --- a/src/Dibi/Drivers/SqlsrvResult.php +++ b/src/Dibi/Drivers/SQLSrv/Result.php @@ -7,15 +7,16 @@ declare(strict_types=1); -namespace Dibi\Drivers; +namespace Dibi\Drivers\SQLSrv; use Dibi; +use Dibi\Drivers; /** * The driver for Microsoft SQL Server and SQL Azure result set. */ -class SqlsrvResult implements Result +class Result implements Drivers\Result { public function __construct( /** @var resource */ diff --git a/src/Dibi/Drivers/SqliteDriver.php b/src/Dibi/Drivers/SQLite3/Connection.php similarity index 95% rename from src/Dibi/Drivers/SqliteDriver.php rename to src/Dibi/Drivers/SQLite3/Connection.php index abf8e9e2..391ad206 100644 --- a/src/Dibi/Drivers/SqliteDriver.php +++ b/src/Dibi/Drivers/SQLite3/Connection.php @@ -7,9 +7,10 @@ declare(strict_types=1); -namespace Dibi\Drivers; +namespace Dibi\Drivers\SQLite3; use Dibi; +use Dibi\Drivers; use Dibi\Helpers; use SQLite3; @@ -23,7 +24,7 @@ * - formatDateTime => how to format datetime in SQL (@see date) * - resource (SQLite3) => existing connection resource */ -class SqliteDriver implements Connection +class Connection implements Drivers\Connection { private SQLite3 $connection; private string $fmtDate; @@ -174,18 +175,18 @@ public function getResource(): ?SQLite3 /** * 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. */ - public function createResultDriver(\SQLite3Result $result): SqliteResult + public function createResultDriver(\SQLite3Result $result): Result { - return new SqliteResult($result); + return new Result($result); } diff --git a/src/Dibi/Drivers/SqliteResult.php b/src/Dibi/Drivers/SQLite3/Result.php similarity index 96% rename from src/Dibi/Drivers/SqliteResult.php rename to src/Dibi/Drivers/SQLite3/Result.php index dede2d29..2aa8e643 100644 --- a/src/Dibi/Drivers/SqliteResult.php +++ b/src/Dibi/Drivers/SQLite3/Result.php @@ -7,16 +7,17 @@ declare(strict_types=1); -namespace Dibi\Drivers; +namespace Dibi\Drivers\SQLite3; use Dibi; +use Dibi\Drivers; use Dibi\Helpers; /** * The driver for SQLite result set. */ -class SqliteResult implements Result +class Result implements Drivers\Result { public function __construct( private readonly \SQLite3Result $resultSet, diff --git a/src/Dibi/Drivers/Sqlite3Driver.php b/src/Dibi/Drivers/Sqlite3Driver.php deleted file mode 100644 index f3dfa9ed..00000000 --- a/src/Dibi/Drivers/Sqlite3Driver.php +++ /dev/null @@ -1,18 +0,0 @@ -setAttribute(PDO::ATTR_ERRMODE, $errorMode); } - new Dibi\Drivers\PdoDriver(['resource' => $pdo]); + new Dibi\Drivers\PDO\Connection(['resource' => $pdo]); } From 98337e4e8868cae07a0f04350436d9d14bc8e47c Mon Sep 17 00:00:00 2001 From: Tomas Jacik Date: Sat, 23 Nov 2024 12:08:02 +0100 Subject: [PATCH 11/11] Added IConnection connection interface --- src/Dibi/Connection.php | 2 +- src/Dibi/DataSource.php | 6 +++--- src/Dibi/Event.php | 4 ++-- src/Dibi/Fluent.php | 6 +++--- src/Dibi/Helpers.php | 2 +- src/Dibi/IConnection.php | 40 ++++++++++++++++++++++++++++++++++++++++ src/Dibi/Translator.php | 4 ++-- 7 files changed, 52 insertions(+), 12 deletions(-) create mode 100644 src/Dibi/IConnection.php diff --git a/src/Dibi/Connection.php b/src/Dibi/Connection.php index 84ab5c06..2ad78b92 100644 --- a/src/Dibi/Connection.php +++ b/src/Dibi/Connection.php @@ -19,7 +19,7 @@ * @property-read int $affectedRows * @property-read int $insertId */ -class Connection +class Connection implements IConnection { private const Drivers = [ 'firebird' => Drivers\Ibase\Connection::class, diff --git a/src/Dibi/DataSource.php b/src/Dibi/DataSource.php index c7df9e09..0d81d1e8 100644 --- a/src/Dibi/DataSource.php +++ b/src/Dibi/DataSource.php @@ -15,7 +15,7 @@ */ class DataSource implements IDataSource { - private readonly Connection $connection; + private readonly IConnection $connection; private readonly string $sql; private ?Result $result = null; private ?int $count = null; @@ -30,7 +30,7 @@ class DataSource implements IDataSource /** * @param string $sql command or table or view name, as data source */ - public function __construct(string $sql, Connection $connection) + public function __construct(string $sql, IConnection $connection) { $this->sql = strpbrk($sql, " \t\r\n") === false ? $connection->getDriver()->escapeIdentifier($sql) // table name @@ -99,7 +99,7 @@ public function applyLimit(int $limit, ?int $offset = null): static } - final public function getConnection(): Connection + final public function getConnection(): IConnection { return $this->connection; } diff --git a/src/Dibi/Event.php b/src/Dibi/Event.php index 9b9e8790..ace4d809 100644 --- a/src/Dibi/Event.php +++ b/src/Dibi/Event.php @@ -29,7 +29,7 @@ class Event TRANSACTION = 448, // BEGIN | COMMIT | ROLLBACK ALL = 1023; - public readonly Connection $connection; + public readonly IConnection $connection; public int $type; public readonly string $sql; public readonly Result|DriverException|null $result; @@ -38,7 +38,7 @@ class Event public ?array $source = null; - public function __construct(Connection $connection, int $type, ?string $sql = null) + public function __construct(IConnection $connection, int $type, ?string $sql = null) { $this->connection = $connection; $this->type = $type; diff --git a/src/Dibi/Fluent.php b/src/Dibi/Fluent.php index 2922e926..d3b42200 100644 --- a/src/Dibi/Fluent.php +++ b/src/Dibi/Fluent.php @@ -97,7 +97,7 @@ class Fluent implements IDataSource 'RIGHT JOIN' => 'FROM', ]; - private readonly Connection $connection; + private readonly IConnection $connection; private array $setups = []; private ?string $command = null; private array $clauses = []; @@ -108,7 +108,7 @@ class Fluent implements IDataSource private static HashMap $normalizer; - public function __construct(Connection $connection) + public function __construct(IConnection $connection) { $this->connection = $connection; @@ -263,7 +263,7 @@ final public function getCommand(): ?string } - final public function getConnection(): Connection + final public function getConnection(): IConnection { return $this->connection; } diff --git a/src/Dibi/Helpers.php b/src/Dibi/Helpers.php index 40bcba18..be2dbfbd 100644 --- a/src/Dibi/Helpers.php +++ b/src/Dibi/Helpers.php @@ -236,7 +236,7 @@ public static function alias(array &$config, string $key, string $alias): void * Import SQL dump from file. * Returns count of sql commands */ - public static function loadFromFile(Connection $connection, string $file, ?callable $onProgress = null): int + public static function loadFromFile(IConnection $connection, string $file, ?callable $onProgress = null): int { @set_time_limit(0); // intentionally @ diff --git a/src/Dibi/IConnection.php b/src/Dibi/IConnection.php new file mode 100644 index 00000000..cf6b120c --- /dev/null +++ b/src/Dibi/IConnection.php @@ -0,0 +1,40 @@ +connection = $connection; $this->driver = $connection->getDriver();