diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml
index 5ac1fdc67..660f6a9f8 100644
--- a/.github/workflows/tests.yml
+++ b/.github/workflows/tests.yml
@@ -11,7 +11,7 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
- php: ['7.2', '7.3', '7.4', '8.0', '8.1']
+ php: ['8.0', '8.1']
fail-fast: false
diff --git a/appveyor.yml b/appveyor.yml
index a4330dcf6..30ed27758 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -1,6 +1,6 @@
build: off
cache:
- - c:\php7 -> appveyor.yml
+ - c:\php -> appveyor.yml
- '%LOCALAPPDATA%\Composer\files -> appveyor.yml'
clone_folder: c:\projects\dibi
@@ -11,21 +11,21 @@ services:
- mysql
init:
- - SET PATH=c:\php7;%PATH%
+ - SET PATH=c:\php;%PATH%
- SET ANSICON=121x90 (121x90)
install:
- # Install PHP 7.2
- - IF EXIST c:\php7 (SET PHP=0) ELSE (SET PHP=1)
- - IF %PHP%==1 mkdir c:\php7
- - IF %PHP%==1 cd c:\php7
- - IF %PHP%==1 curl https://windows.php.net/downloads/releases/archives/php-7.2.18-Win32-VC15-x64.zip --output php.zip
+ # Install PHP 8.0
+ - IF EXIST c:\php (SET PHP=0) ELSE (SET PHP=1)
+ - IF %PHP%==1 mkdir c:\php
+ - IF %PHP%==1 cd c:\php
+ - IF %PHP%==1 curl https://windows.php.net/downloads/releases/archives/php-8.0.1-Win32-vs16-x64.zip --output php.zip
- IF %PHP%==1 7z x php.zip >nul
- IF %PHP%==1 echo extension_dir=ext >> php.ini
- IF %PHP%==1 echo extension=php_openssl.dll >> php.ini
- - IF %PHP%==1 curl https://github.com/microsoft/msphpsql/releases/download/v5.8.0/Windows-7.2.zip -L --output sqlsrv.zip
+ - IF %PHP%==1 curl https://github.com/microsoft/msphpsql/releases/download/v5.9.0/Windows-8.0.zip -L --output sqlsrv.zip
- IF %PHP%==1 7z x sqlsrv.zip >nul
- - IF %PHP%==1 copy Windows-7.2\x64\php_sqlsrv_72_ts.dll ext\php_sqlsrv_ts.dll
+ - IF %PHP%==1 copy Windows-8.0\x64\php_sqlsrv_80_ts.dll ext\php_sqlsrv_ts.dll
- IF %PHP%==1 del /Q *.zip
# Install Microsoft Access Database Engine x64
@@ -41,7 +41,7 @@ install:
- copy tests\databases.appveyor.ini tests\databases.ini
test_script:
- - vendor\bin\tester tests -s -p c:\php7\php -c tests\php-win.ini
+ - vendor\bin\tester tests -s -p c:\php\php -c tests\php-win.ini
on_failure:
# Print *.actual content
diff --git a/composer.json b/composer.json
index d94135ceb..32bbf4a20 100644
--- a/composer.json
+++ b/composer.json
@@ -11,11 +11,11 @@
}
],
"require": {
- "php": ">=7.2"
+ "php": ">=8.0 <8.2"
},
"require-dev": {
- "tracy/tracy": "~2.2",
- "nette/tester": "~2.0",
+ "tracy/tracy": "^2.8",
+ "nette/tester": "^2.4",
"nette/di": "^3.0",
"phpstan/phpstan": "^0.12"
},
@@ -31,7 +31,7 @@
},
"extra": {
"branch-alias": {
- "dev-master": "4.2-dev"
+ "dev-master": "5.0-dev"
}
}
}
diff --git a/examples/query-language-and-conditions.php b/examples/query-language-and-conditions.php
index 4f53b2b2c..ccf4eb71c 100644
--- a/examples/query-language-and-conditions.php
+++ b/examples/query-language-and-conditions.php
@@ -31,7 +31,7 @@
$dibi->test('
SELECT *
FROM customers
- %if', isset($name), 'WHERE name LIKE ?', $name, '%end'
+ %if', isset($name), 'WHERE name LIKE ?', $name, '%end',
);
// -> SELECT * FROM customers WHERE name LIKE 'K%'
@@ -54,7 +54,7 @@
WHERE
%if', isset($name), 'name LIKE ?', $name, '
%if', $cond2, 'AND admin=1 %end
- %else 1 LIMIT 10 %end'
+ %else 1 LIMIT 10 %end',
);
// -> SELECT * FROM customers WHERE LIMIT 10
diff --git a/examples/query-language-basic-examples.php b/examples/query-language-basic-examples.php
index b0efe523f..9e23eb2d1 100644
--- a/examples/query-language-basic-examples.php
+++ b/examples/query-language-basic-examples.php
@@ -28,7 +28,7 @@
SELECT COUNT(*) as [count]
FROM [comments]
WHERE [ip] LIKE ?', $ipMask, '
- AND [date] > ', new Dibi\DateTime($timestamp)
+ AND [date] > ', new Dibi\DateTime($timestamp),
);
// -> SELECT COUNT(*) as [count] FROM [comments] WHERE [ip] LIKE '192.168.%' AND [date] > 876693600
@@ -69,7 +69,7 @@
$dibi->test('
SELECT *
FROM people
- WHERE id IN (?)', $array
+ WHERE id IN (?)', $array,
);
// -> SELECT * FROM people WHERE id IN ( 1, 2, 3 )
diff --git a/examples/using-datetime.php b/examples/using-datetime.php
index 272a0ae16..fd3ca62c2 100644
--- a/examples/using-datetime.php
+++ b/examples/using-datetime.php
@@ -29,6 +29,6 @@
'id' => 123,
'date' => new DateTime('12.3.2007'),
'stamp' => new DateTime('23.1.2007 10:23'),
- ]
+ ],
);
// -> INSERT INTO [mytable] ([id], [date], [stamp]) VALUES (123, '2007-03-12', '2007-01-23 10-23-00')
diff --git a/examples/using-substitutions.php b/examples/using-substitutions.php
index d4d066d99..d10d85a1e 100644
--- a/examples/using-substitutions.php
+++ b/examples/using-substitutions.php
@@ -54,6 +54,6 @@ function substFallBack($expr)
$dibi->test("
UPDATE :account:user
SET name='John Doe', status=:active:
- WHERE id=", 7
+ WHERE id=", 7,
);
// -> UPDATE eshop_user SET name='John Doe', status=7 WHERE id= 7
diff --git a/readme.md b/readme.md
index e0a96cb2c..bd67aeeaa 100644
--- a/readme.md
+++ b/readme.md
@@ -34,7 +34,7 @@ Install Dibi via Composer:
composer require dibi/dibi
```
-The Dibi 4.2 requires PHP version 7.2 and supports PHP up to 8.1.
+The Dibi 5.0 requires PHP version 8.0 and supports PHP up to 8.1.
Usage
diff --git a/src/Dibi/Bridges/Nette/DibiExtension22.php b/src/Dibi/Bridges/Nette/DibiExtension22.php
index 789fbe382..4523ab859 100644
--- a/src/Dibi/Bridges/Nette/DibiExtension22.php
+++ b/src/Dibi/Bridges/Nette/DibiExtension22.php
@@ -19,11 +19,9 @@
*/
class DibiExtension22 extends Nette\DI\CompilerExtension
{
- /** @var bool|null */
- private $debugMode;
+ private ?bool $debugMode;
- /** @var bool|null */
- private $cliMode;
+ private ?bool $cliMode;
public function __construct(?bool $debugMode = null, ?bool $cliMode = null)
@@ -66,7 +64,7 @@ public function loadConfiguration()
if (class_exists(Tracy\Debugger::class)) {
$connection->addSetup(
[new Nette\DI\Statement('Tracy\Debugger::getBlueScreen'), 'addPanel'],
- [[Dibi\Bridges\Tracy\Panel::class, 'renderException']]
+ [[Dibi\Bridges\Tracy\Panel::class, 'renderException']],
);
}
diff --git a/src/Dibi/Bridges/Tracy/Panel.php b/src/Dibi/Bridges/Tracy/Panel.php
index 9cee762e2..9e6d5d700 100644
--- a/src/Dibi/Bridges/Tracy/Panel.php
+++ b/src/Dibi/Bridges/Tracy/Panel.php
@@ -22,20 +22,17 @@ class Panel implements Tracy\IBarPanel
{
use Dibi\Strict;
- /** @var int maximum SQL length */
- public static $maxLength = 1000;
+ /** maximum SQL length */
+ public static int $maxLength = 1000;
- /** @var bool|string explain queries? */
- public $explain;
+ public bool|string $explain;
- /** @var int */
- public $filter;
+ public int $filter;
- /** @var array */
- private $events = [];
+ private array $events = [];
- public function __construct($explain = true, ?int $filter = null)
+ public function __construct(bool $explain = true, ?int $filter = null)
{
$this->filter = $filter ?: Event::QUERY;
$this->explain = $explain;
@@ -174,7 +171,7 @@ public function getPanel(): ?string
private function getConnectionName(Dibi\Connection $connection): string
{
$driver = $connection->getConfig('driver');
- return (is_object($driver) ? get_class($driver) : $driver)
+ return (is_object($driver) ? $driver::class : $driver)
. ($connection->getConfig('name') ? '/' . $connection->getConfig('name') : '')
. ($connection->getConfig('host') ? "\u{202f}@\u{202f}" . $connection->getConfig('host') : '');
}
diff --git a/src/Dibi/Connection.php b/src/Dibi/Connection.php
index 83cb099d9..285421688 100644
--- a/src/Dibi/Connection.php
+++ b/src/Dibi/Connection.php
@@ -22,25 +22,22 @@ class Connection implements IConnection
{
use Strict;
- /** @var array of function (Event $event); Occurs after query is executed */
- public $onEvent = [];
+ /** function (Event $event); Occurs after query is executed */
+ public array $onEvent = [];
- /** @var array Current connection configuration */
- private $config;
+ /** Current connection configuration */
+ private array $config;
/** @var string[] resultset formats */
- private $formats;
+ private array $formats;
- /** @var Driver|null */
- private $driver;
+ private ?Driver $driver = null;
- /** @var Translator|null */
- private $translator;
+ private ?Translator $translator = null;
- /** @var HashMap Substitutes for identifiers */
- private $substitutes;
+ private HashMap $substitutes;
- private $transactionDepth = 0;
+ private int $transactionDepth = 0;
/**
@@ -75,7 +72,7 @@ public function __construct(array $config, ?string $name = null)
Helpers::alias($config, 'host', 'hostname');
Helpers::alias($config, 'result|formatDate', 'resultDate');
Helpers::alias($config, 'result|formatDateTime', 'resultDateTime');
- $config['driver'] = $config['driver'] ?? 'mysqli';
+ $config['driver'] ??= 'mysqli';
$config['name'] = $name;
$this->config = $config;
@@ -93,7 +90,7 @@ public function __construct(array $config, ?string $name = null)
$this->onEvent[] = [new Loggers\FileLogger($config['profiler']['file'], $filter, $errorsOnly), 'logEvent'];
}
- $this->substitutes = new HashMap(function (string $expr) { return ":$expr:"; });
+ $this->substitutes = new HashMap(fn(string $expr) => ":$expr:");
if (!empty($config['substitutes'])) {
foreach ($config['substitutes'] as $key => $value) {
$this->substitutes->$key = $value;
@@ -190,9 +187,8 @@ final public function isConnected(): bool
/**
* Returns configuration variable. If no $key is passed, returns the entire array.
* @see self::__construct
- * @return mixed
*/
- final public function getConfig(?string $key = null, $default = null)
+ final public function getConfig(?string $key = null, $default = null): mixed
{
return $key === null
? $this->config
@@ -215,10 +211,9 @@ final public function getDriver(): Driver
/**
* Generates (translates) and executes SQL query.
- * @param mixed ...$args
* @throws Exception
*/
- final public function query(...$args): Result
+ final public function query(mixed ...$args): Result
{
return $this->nativeQuery($this->translate(...$args));
}
@@ -226,10 +221,9 @@ final public function query(...$args): Result
/**
* Generates SQL query.
- * @param mixed ...$args
* @throws Exception
*/
- final public function translate(...$args): string
+ final public function translate(mixed ...$args): string
{
if (!$this->driver) {
$this->connect();
@@ -241,9 +235,8 @@ final public function translate(...$args): string
/**
* Generates and prints SQL query.
- * @param mixed ...$args
*/
- final public function test(...$args): bool
+ final public function test(mixed ...$args): bool
{
try {
Helpers::dump($this->translate(...$args));
@@ -253,7 +246,7 @@ final public function test(...$args): bool
if ($e->getSql()) {
Helpers::dump($e->getSql());
} else {
- echo get_class($e) . ': ' . $e->getMessage() . (PHP_SAPI === 'cli' ? "\n" : '
');
+ echo $e::class . ': ' . $e->getMessage() . (PHP_SAPI === 'cli' ? "\n" : '
');
}
return false;
@@ -263,10 +256,9 @@ final public function test(...$args): bool
/**
* Generates (translates) and returns SQL query as DataSource.
- * @param mixed ...$args
* @throws Exception
*/
- final public function dataSource(...$args): DataSource
+ final public function dataSource(mixed ...$args): DataSource
{
return new DataSource($this->translate(...$args), $this);
}
@@ -429,10 +421,7 @@ public function rollback(?string $savepoint = null): void
}
- /**
- * @return mixed
- */
- public function transaction(callable $callback)
+ public function transaction(callable $callback): mixed
{
if ($this->transactionDepth === 0) {
$this->begin();
@@ -527,9 +516,9 @@ public function getSubstitutes(): HashMap
*/
public function substitute(string $value): string
{
- return strpos($value, ':') === false
- ? $value
- : preg_replace_callback('#:([^:\s]*):#', function (array $m) { return $this->substitutes->{$m[1]}; }, $value);
+ return str_contains($value, ':')
+ ? preg_replace_callback('#:([^:\s]*):#', fn(array $m) => $this->substitutes->{$m[1]}, $value)
+ : $value;
}
@@ -538,10 +527,9 @@ public function substitute(string $value): string
/**
* Executes SQL query and fetch result - shortcut for query() & fetch().
- * @param mixed ...$args
* @throws Exception
*/
- public function fetch(...$args): ?Row
+ public function fetch(mixed ...$args): ?Row
{
return $this->query($args)->fetch();
}
@@ -549,11 +537,10 @@ public function fetch(...$args): ?Row
/**
* Executes SQL query and fetch results - shortcut for query() & fetchAll().
- * @param mixed ...$args
* @return Row[]|array[]
* @throws Exception
*/
- public function fetchAll(...$args): array
+ public function fetchAll(mixed ...$args): array
{
return $this->query($args)->fetchAll();
}
@@ -561,11 +548,9 @@ public function fetchAll(...$args): array
/**
* Executes SQL query and fetch first column - shortcut for query() & fetchSingle().
- * @param mixed ...$args
- * @return mixed
* @throws Exception
*/
- public function fetchSingle(...$args)
+ public function fetchSingle(mixed ...$args): mixed
{
return $this->query($args)->fetchSingle();
}
@@ -573,10 +558,9 @@ public function fetchSingle(...$args)
/**
* Executes SQL query and fetch pairs - shortcut for query() & fetchPairs().
- * @param mixed ...$args
* @throws Exception
*/
- public function fetchPairs(...$args): array
+ public function fetchPairs(mixed ...$args): array
{
return $this->query($args)->fetchPairs();
}
diff --git a/src/Dibi/DataSource.php b/src/Dibi/DataSource.php
index 884af67e5..5e242fd55 100644
--- a/src/Dibi/DataSource.php
+++ b/src/Dibi/DataSource.php
@@ -17,35 +17,25 @@ class DataSource implements IDataSource
{
use Strict;
- /** @var Connection */
- private $connection;
+ private Connection $connection;
- /** @var string */
- private $sql;
+ private string $sql;
- /** @var Result|null */
- private $result;
+ private ?Result $result = null;
- /** @var int|null */
- private $count;
+ private ?int $count = null;
- /** @var int|null */
- private $totalCount;
+ private ?int $totalCount = null;
- /** @var array */
- private $cols = [];
+ private array $cols = [];
- /** @var array */
- private $sorting = [];
+ private array $sorting = [];
- /** @var array */
- private $conds = [];
+ private array $conds = [];
- /** @var int|null */
- private $offset;
+ private ?int $offset = null;
- /** @var int|null */
- private $limit;
+ private ?int $limit = null;
/**
@@ -65,7 +55,7 @@ public function __construct(string $sql, Connection $connection)
* @param string|array $col column name or array of column names
* @param string $as column alias
*/
- public function select($col, ?string $as = null): self
+ public function select(string|array $col, ?string $as = null): static
{
if (is_array($col)) {
$this->cols = $col;
@@ -81,7 +71,7 @@ public function select($col, ?string $as = null): self
/**
* Adds conditions to query.
*/
- public function where($cond): self
+ public function where($cond): static
{
$this->conds[] = is_array($cond)
? $cond // TODO: not consistent with select and orderBy
@@ -95,7 +85,7 @@ public function where($cond): self
* Selects columns to order by.
* @param string|array $row column name or array of column names
*/
- public function orderBy($row, string $direction = 'ASC'): self
+ public function orderBy(string|array $row, string $direction = 'ASC'): static
{
if (is_array($row)) {
$this->sorting = $row;
@@ -111,7 +101,7 @@ public function orderBy($row, string $direction = 'ASC'): self
/**
* Limits number of rows.
*/
- public function applyLimit(int $limit, ?int $offset = null): self
+ public function applyLimit(int $limit, ?int $offset = null): static
{
$this->limit = $limit;
$this->offset = $offset;
@@ -161,7 +151,7 @@ public function fetch(): ?Row
* Like fetch(), but returns only first field.
* @return mixed value on success, null if no next record
*/
- public function fetchSingle()
+ public function fetchSingle(): mixed
{
return $this->getResult()->fetchSingle();
}
@@ -229,24 +219,19 @@ public function toDataSource(): self
*/
public function __toString(): string
{
- try {
- return $this->connection->translate(
- "\nSELECT %n",
- (empty($this->cols) ? '*' : $this->cols),
- "\nFROM %SQL",
- $this->sql,
- "\n%ex",
- $this->conds ? ['WHERE %and', $this->conds] : null,
- "\n%ex",
- $this->sorting ? ['ORDER BY %by', $this->sorting] : null,
- "\n%ofs %lmt",
- $this->offset,
- $this->limit
- );
- } catch (\Throwable $e) {
- trigger_error($e->getMessage(), E_USER_ERROR);
- return '';
- }
+ return $this->connection->translate(
+ "\nSELECT %n",
+ (empty($this->cols) ? '*' : $this->cols),
+ "\nFROM %SQL",
+ $this->sql,
+ "\n%ex",
+ $this->conds ? ['WHERE %and', $this->conds] : null,
+ "\n%ex",
+ $this->sorting ? ['ORDER BY %by', $this->sorting] : null,
+ "\n%ofs %lmt",
+ $this->offset,
+ $this->limit,
+ );
}
@@ -261,7 +246,7 @@ public function count(): int
if ($this->count === null) {
$this->count = $this->conds || $this->offset || $this->limit
? Helpers::intVal($this->connection->nativeQuery(
- 'SELECT COUNT(*) FROM (' . $this->__toString() . ') t'
+ 'SELECT COUNT(*) FROM (' . $this->__toString() . ') t',
)->fetchSingle())
: $this->getTotalCount();
}
@@ -277,7 +262,7 @@ public function getTotalCount(): int
{
if ($this->totalCount === null) {
$this->totalCount = Helpers::intVal($this->connection->nativeQuery(
- 'SELECT COUNT(*) FROM ' . $this->sql
+ 'SELECT COUNT(*) FROM ' . $this->sql,
)->fetchSingle());
}
diff --git a/src/Dibi/DateTime.php b/src/Dibi/DateTime.php
index 01a83f98a..092419d25 100644
--- a/src/Dibi/DateTime.php
+++ b/src/Dibi/DateTime.php
@@ -17,10 +17,7 @@ class DateTime extends \DateTimeImmutable
{
use Strict;
- /**
- * @param string|int $time
- */
- public function __construct($time = 'now', ?\DateTimeZone $timezone = null)
+ public function __construct(string|int $time = 'now', ?\DateTimeZone $timezone = null)
{
$timezone = $timezone ?: new \DateTimeZone(date_default_timezone_get());
if (is_numeric($time)) {
diff --git a/src/Dibi/Drivers/DummyDriver.php b/src/Dibi/Drivers/DummyDriver.php
index ea14595c2..f29f23c09 100644
--- a/src/Dibi/Drivers/DummyDriver.php
+++ b/src/Dibi/Drivers/DummyDriver.php
@@ -57,7 +57,7 @@ public function rollback(?string $savepoint = null): void
}
- public function getResource()
+ public function getResource(): mixed
{
return null;
}
@@ -171,8 +171,9 @@ public function free(): void
}
- public function getResultResource()
+ public function getResultResource(): mixed
{
+ return null;
}
diff --git a/src/Dibi/Drivers/FirebirdDriver.php b/src/Dibi/Drivers/FirebirdDriver.php
index 9569c96df..9d9093bc2 100644
--- a/src/Dibi/Drivers/FirebirdDriver.php
+++ b/src/Dibi/Drivers/FirebirdDriver.php
@@ -33,11 +33,10 @@ class FirebirdDriver implements Dibi\Driver
/** @var resource */
private $connection;
- /** @var resource|null */
+ /** @var ?resource */
private $transaction;
- /** @var bool */
- private $inTransaction = false;
+ private bool $inTransaction = false;
/** @throws Dibi\NotSupportedException */
@@ -191,7 +190,7 @@ public function inTransaction(): bool
* Returns the connection resource.
* @return resource|null
*/
- public function getResource()
+ public function getResource(): mixed
{
return is_resource($this->connection) ? $this->connection : null;
}
diff --git a/src/Dibi/Drivers/FirebirdReflector.php b/src/Dibi/Drivers/FirebirdReflector.php
index 7c3283729..f00e075d5 100644
--- a/src/Dibi/Drivers/FirebirdReflector.php
+++ b/src/Dibi/Drivers/FirebirdReflector.php
@@ -19,8 +19,7 @@ class FirebirdReflector implements Dibi\Reflector
{
use Dibi\Strict;
- /** @var Dibi\Driver */
- private $driver;
+ private Dibi\Driver $driver;
public function __construct(Dibi\Driver $driver)
@@ -242,7 +241,7 @@ public function getTriggersMeta(?string $table = null): array
END AS TRIGGER_ENABLED
FROM RDB\$TRIGGERS
WHERE RDB\$SYSTEM_FLAG = 0"
- . ($table === null ? ';' : " AND RDB\$RELATION_NAME = UPPER('$table');")
+ . ($table === null ? ';' : " AND RDB\$RELATION_NAME = UPPER('$table');"),
);
$triggers = [];
while ($row = $res->fetch(true)) {
diff --git a/src/Dibi/Drivers/FirebirdResult.php b/src/Dibi/Drivers/FirebirdResult.php
index a597f7419..c2568f1d9 100644
--- a/src/Dibi/Drivers/FirebirdResult.php
+++ b/src/Dibi/Drivers/FirebirdResult.php
@@ -23,8 +23,7 @@ class FirebirdResult implements Dibi\ResultDriver
/** @var resource */
private $resultSet;
- /** @var bool */
- private $autoFree = true;
+ private bool $autoFree = true;
/**
@@ -103,7 +102,7 @@ public function free(): void
* Returns the result set resource.
* @return resource|null
*/
- public function getResultResource()
+ public function getResultResource(): mixed
{
$this->autoFree = false;
return is_resource($this->resultSet) ? $this->resultSet : null;
diff --git a/src/Dibi/Drivers/MySqlReflector.php b/src/Dibi/Drivers/MySqlReflector.php
index 336baaae2..70bc0918d 100644
--- a/src/Dibi/Drivers/MySqlReflector.php
+++ b/src/Dibi/Drivers/MySqlReflector.php
@@ -20,8 +20,7 @@ class MySqlReflector implements Dibi\Reflector
{
use Dibi\Strict;
- /** @var Dibi\Driver */
- private $driver;
+ private Dibi\Driver $driver;
public function __construct(Dibi\Driver $driver)
diff --git a/src/Dibi/Drivers/MySqliDriver.php b/src/Dibi/Drivers/MySqliDriver.php
index e2bb8f2f0..39befea14 100644
--- a/src/Dibi/Drivers/MySqliDriver.php
+++ b/src/Dibi/Drivers/MySqliDriver.php
@@ -40,11 +40,10 @@ class MySqliDriver implements Dibi\Driver
public const ERROR_DATA_TRUNCATED = 1265;
- /** @var \mysqli */
- private $connection;
+ private \mysqli $connection;
- /** @var bool Is buffered (seekable and countable)? */
- private $buffered;
+ /** Is buffered (seekable and countable)? */
+ private bool $buffered = false;
/** @throws Dibi\NotSupportedException */
@@ -96,7 +95,7 @@ public function __construct(array $config)
$config['database'] ?? '',
$config['port'] ?? 0,
$config['socket'],
- $config['flags'] ?? 0
+ $config['flags'] ?? 0,
);
if ($this->connection->connect_errno) {
@@ -159,10 +158,7 @@ public function query(string $sql): ?Dibi\ResultDriver
}
- /**
- * @param int|string $code
- */
- public static function createException(string $message, $code, string $sql): Dibi\DriverException
+ public static function createException(string $message, int|string $code, string $sql): Dibi\DriverException
{
if (in_array($code, [1216, 1217, 1451, 1452, 1701], true)) {
return new Dibi\ForeignKeyConstraintViolationException($message, $code, $sql);
diff --git a/src/Dibi/Drivers/MySqliResult.php b/src/Dibi/Drivers/MySqliResult.php
index fde578808..564fe1ae4 100644
--- a/src/Dibi/Drivers/MySqliResult.php
+++ b/src/Dibi/Drivers/MySqliResult.php
@@ -19,14 +19,12 @@ class MySqliResult implements Dibi\ResultDriver
{
use Dibi\Strict;
- /** @var \mysqli_result */
- private $resultSet;
+ private \mysqli_result $resultSet;
- /** @var bool */
- private $autoFree = true;
+ private bool $autoFree = true;
- /** @var bool Is buffered (seekable and countable)? */
- private $buffered;
+ /** Is buffered (seekable and countable)? */
+ private bool $buffered;
public function __construct(\mysqli_result $resultSet, bool $buffered)
diff --git a/src/Dibi/Drivers/NoDataResult.php b/src/Dibi/Drivers/NoDataResult.php
index 00a5f358c..932398c8e 100644
--- a/src/Dibi/Drivers/NoDataResult.php
+++ b/src/Dibi/Drivers/NoDataResult.php
@@ -19,8 +19,7 @@ class NoDataResult implements Dibi\ResultDriver
{
use Dibi\Strict;
- /** @var int */
- private $rows;
+ private int $rows;
public function __construct(int $rows)
@@ -61,7 +60,7 @@ public function getResultColumns(): array
}
- public function getResultResource()
+ public function getResultResource(): mixed
{
return null;
}
diff --git a/src/Dibi/Drivers/OdbcDriver.php b/src/Dibi/Drivers/OdbcDriver.php
index 82a3652f7..09f96ee8b 100644
--- a/src/Dibi/Drivers/OdbcDriver.php
+++ b/src/Dibi/Drivers/OdbcDriver.php
@@ -30,11 +30,9 @@ class OdbcDriver implements Dibi\Driver
/** @var resource */
private $connection;
- /** @var int|null Affected rows */
- private $affectedRows;
+ private ?int $affectedRows;
- /** @var bool */
- private $microseconds = true;
+ private bool $microseconds = true;
/** @throws Dibi\NotSupportedException */
@@ -125,7 +123,7 @@ public function getInsertId(?string $sequence): ?int
*/
public function begin(?string $savepoint = null): void
{
- if (!odbc_autocommit($this->connection, PHP_VERSION_ID < 80000 ? 0 : false)) {
+ if (!odbc_autocommit($this->connection, false)) {
throw new Dibi\DriverException(odbc_errormsg($this->connection) . ' ' . odbc_error($this->connection));
}
}
@@ -141,7 +139,7 @@ public function commit(?string $savepoint = null): void
throw new Dibi\DriverException(odbc_errormsg($this->connection) . ' ' . odbc_error($this->connection));
}
- odbc_autocommit($this->connection, PHP_VERSION_ID < 80000 ? 1 : true);
+ odbc_autocommit($this->connection, true);
}
@@ -155,7 +153,7 @@ public function rollback(?string $savepoint = null): void
throw new Dibi\DriverException(odbc_errormsg($this->connection) . ' ' . odbc_error($this->connection));
}
- odbc_autocommit($this->connection, PHP_VERSION_ID < 80000 ? 1 : true);
+ odbc_autocommit($this->connection, true);
}
@@ -172,7 +170,7 @@ public function inTransaction(): bool
* Returns the connection resource.
* @return resource|null
*/
- public function getResource()
+ public function getResource(): mixed
{
return is_resource($this->connection) ? $this->connection : null;
}
diff --git a/src/Dibi/Drivers/OdbcReflector.php b/src/Dibi/Drivers/OdbcReflector.php
index d59dccb02..82d20b68a 100644
--- a/src/Dibi/Drivers/OdbcReflector.php
+++ b/src/Dibi/Drivers/OdbcReflector.php
@@ -19,8 +19,7 @@ class OdbcReflector implements Dibi\Reflector
{
use Dibi\Strict;
- /** @var Dibi\Driver */
- private $driver;
+ private Dibi\Driver $driver;
public function __construct(Dibi\Driver $driver)
diff --git a/src/Dibi/Drivers/OdbcResult.php b/src/Dibi/Drivers/OdbcResult.php
index 576574054..7aa646dfb 100644
--- a/src/Dibi/Drivers/OdbcResult.php
+++ b/src/Dibi/Drivers/OdbcResult.php
@@ -22,11 +22,9 @@ class OdbcResult implements Dibi\ResultDriver
/** @var resource */
private $resultSet;
- /** @var bool */
- private $autoFree = true;
+ private bool $autoFree = true;
- /** @var int Cursor */
- private $row = 0;
+ private int $row = 0;
/**
@@ -127,7 +125,7 @@ public function getResultColumns(): array
* Returns the result set resource.
* @return resource|null
*/
- public function getResultResource()
+ public function getResultResource(): mixed
{
$this->autoFree = false;
return is_resource($this->resultSet) ? $this->resultSet : null;
diff --git a/src/Dibi/Drivers/OracleDriver.php b/src/Dibi/Drivers/OracleDriver.php
index 81177efb1..4acfcac05 100644
--- a/src/Dibi/Drivers/OracleDriver.php
+++ b/src/Dibi/Drivers/OracleDriver.php
@@ -32,14 +32,12 @@ class OracleDriver implements Dibi\Driver
/** @var resource */
private $connection;
- /** @var bool */
- private $autocommit = true;
+ private bool $autocommit = true;
- /** @var bool use native datetime format */
- private $nativeDate;
+ /** use native datetime format */
+ private bool $nativeDate;
- /** @var int|null Number of affected rows */
- private $affectedRows;
+ private ?int $affectedRows;
/** @throws Dibi\NotSupportedException */
@@ -188,7 +186,7 @@ public function rollback(?string $savepoint = null): void
* Returns the connection resource.
* @return resource|null
*/
- public function getResource()
+ public function getResource(): mixed
{
return is_resource($this->connection) ? $this->connection : null;
}
diff --git a/src/Dibi/Drivers/OracleReflector.php b/src/Dibi/Drivers/OracleReflector.php
index 90609ec24..a86f65bfd 100644
--- a/src/Dibi/Drivers/OracleReflector.php
+++ b/src/Dibi/Drivers/OracleReflector.php
@@ -19,8 +19,7 @@ class OracleReflector implements Dibi\Reflector
{
use Dibi\Strict;
- /** @var Dibi\Driver */
- private $driver;
+ private Dibi\Driver $driver;
public function __construct(Dibi\Driver $driver)
diff --git a/src/Dibi/Drivers/OracleResult.php b/src/Dibi/Drivers/OracleResult.php
index 78a3028b8..cb99794ee 100644
--- a/src/Dibi/Drivers/OracleResult.php
+++ b/src/Dibi/Drivers/OracleResult.php
@@ -22,8 +22,7 @@ class OracleResult implements Dibi\ResultDriver
/** @var resource */
private $resultSet;
- /** @var bool */
- private $autoFree = true;
+ private bool $autoFree = true;
/**
@@ -109,7 +108,7 @@ public function getResultColumns(): array
* Returns the result set resource.
* @return resource|null
*/
- public function getResultResource()
+ public function getResultResource(): mixed
{
$this->autoFree = false;
return is_resource($this->resultSet) ? $this->resultSet : null;
diff --git a/src/Dibi/Drivers/PdoDriver.php b/src/Dibi/Drivers/PdoDriver.php
index 784c1e38e..aa34428d7 100644
--- a/src/Dibi/Drivers/PdoDriver.php
+++ b/src/Dibi/Drivers/PdoDriver.php
@@ -12,6 +12,7 @@
use Dibi;
use Dibi\Helpers;
use PDO;
+use PDOException;
/**
@@ -29,17 +30,13 @@ class PdoDriver implements Dibi\Driver
{
use Dibi\Strict;
- /** @var PDO|null Connection resource */
- private $connection;
+ private ?PDO $connection;
- /** @var int|null Affected rows */
- private $affectedRows;
+ private ?int $affectedRows;
- /** @var string */
- private $driverName;
+ private string $driverName;
- /** @var string */
- private $serverVersion = '';
+ private string $serverVersion = '';
/** @throws Dibi\NotSupportedException */
@@ -57,8 +54,8 @@ public function __construct(array $config)
$this->connection = $config['resource'];
unset($config['resource'], $config['pdo']);
- if ($this->connection->getAttribute(PDO::ATTR_ERRMODE) !== PDO::ERRMODE_SILENT) {
- throw new Dibi\DriverException('PDO connection in exception or warning error mode is not supported.');
+ if ($this->connection->getAttribute(PDO::ATTR_ERRMODE) === PDO::ERRMODE_WARNING) {
+ throw new Dibi\DriverException('PDO connection in warning error mode is not supported.');
}
} else {
try {
@@ -93,15 +90,18 @@ public function disconnect(): void
*/
public function query(string $sql): ?Dibi\ResultDriver
{
- $res = $this->connection->query($sql);
- if ($res) {
- $this->affectedRows = $res->rowCount();
- return $res->columnCount() ? $this->createResultDriver($res) : null;
+ try {
+ $res = $this->connection->query($sql);
+ if ($res) {
+ $this->affectedRows = $res->rowCount();
+ return $res->columnCount() ? $this->createResultDriver($res) : null;
+ }
+ [$sqlState, $code, $message] = $this->connection->errorInfo();
+ } catch (PDOException $e) {
+ [$sqlState, $code, $message] = $e->errorInfo;
}
-
$this->affectedRows = null;
- [$sqlState, $code, $message] = $this->connection->errorInfo();
$message = "SQLSTATE[$sqlState]: $message";
switch ($this->driverName) {
case 'mysql':
diff --git a/src/Dibi/Drivers/PdoResult.php b/src/Dibi/Drivers/PdoResult.php
index 73bad23cf..c6496146a 100644
--- a/src/Dibi/Drivers/PdoResult.php
+++ b/src/Dibi/Drivers/PdoResult.php
@@ -21,11 +21,9 @@ class PdoResult implements Dibi\ResultDriver
{
use Dibi\Strict;
- /** @var \PDOStatement|null */
- private $resultSet;
+ private ?\PDOStatement $resultSet;
- /** @var string */
- private $driverName;
+ private string $driverName;
public function __construct(\PDOStatement $resultSet, string $driverName)
diff --git a/src/Dibi/Drivers/PostgreDriver.php b/src/Dibi/Drivers/PostgreDriver.php
index 5c34ae14e..227243b19 100644
--- a/src/Dibi/Drivers/PostgreDriver.php
+++ b/src/Dibi/Drivers/PostgreDriver.php
@@ -33,8 +33,7 @@ class PostgreDriver implements Dibi\Driver
/** @var resource|PgSql\Connection */
private $connection;
- /** @var int|null Affected rows */
- private $affectedRows;
+ private ?int $affectedRows;
/** @throws Dibi\NotSupportedException */
@@ -140,7 +139,7 @@ public static function createException(string $message, $code = null, ?string $s
$message = substr($message, strlen($m[0]));
}
- if ($code === '0A000' && strpos($message, 'truncate') !== false) {
+ if ($code === '0A000' && str_contains($message, 'truncate')) {
return new Dibi\ForeignKeyConstraintViolationException($message, $code, $sql);
} elseif ($code === '23502') {
@@ -228,7 +227,7 @@ public function inTransaction(): bool
* Returns the connection resource.
* @return resource|null
*/
- public function getResource()
+ public function getResource(): mixed
{
return is_resource($this->connection) || $this->connection instanceof PgSql\Connection
? $this->connection
diff --git a/src/Dibi/Drivers/PostgreReflector.php b/src/Dibi/Drivers/PostgreReflector.php
index d7bcb15b5..a682dfe21 100644
--- a/src/Dibi/Drivers/PostgreReflector.php
+++ b/src/Dibi/Drivers/PostgreReflector.php
@@ -19,11 +19,9 @@ class PostgreReflector implements Dibi\Reflector
{
use Dibi\Strict;
- /** @var Dibi\Driver */
- private $driver;
+ private Dibi\Driver $driver;
- /** @var string */
- private $version;
+ private string $version;
public function __construct(Dibi\Driver $driver, string $version)
@@ -128,7 +126,7 @@ public function getColumns(string $table): array
'size' => $size > 0 ? $size : null,
'nullable' => $row['is_nullable'] === 'YES' || $row['is_nullable'] === 't' || $row['is_nullable'] === true,
'default' => $row['column_default'],
- 'autoincrement' => (int) $row['ordinal_position'] === $primary && substr($row['column_default'] ?? '', 0, 7) === 'nextval',
+ 'autoincrement' => (int) $row['ordinal_position'] === $primary && str_starts_with($row['column_default'] ?? '', 'nextval'),
'vendor' => $row,
];
}
diff --git a/src/Dibi/Drivers/PostgreResult.php b/src/Dibi/Drivers/PostgreResult.php
index cc0358efa..8284e8874 100644
--- a/src/Dibi/Drivers/PostgreResult.php
+++ b/src/Dibi/Drivers/PostgreResult.php
@@ -24,8 +24,7 @@ class PostgreResult implements Dibi\ResultDriver
/** @var resource|PgSql\Result */
private $resultSet;
- /** @var bool */
- private $autoFree = true;
+ private bool $autoFree = true;
/**
@@ -112,7 +111,7 @@ public function getResultColumns(): array
* Returns the result set resource.
* @return resource|PgSql\Result|null
*/
- public function getResultResource()
+ public function getResultResource(): mixed
{
$this->autoFree = false;
return is_resource($this->resultSet) || $this->resultSet instanceof PgSql\Result
diff --git a/src/Dibi/Drivers/SqliteDriver.php b/src/Dibi/Drivers/SqliteDriver.php
index 3a339e31a..ebe546a33 100644
--- a/src/Dibi/Drivers/SqliteDriver.php
+++ b/src/Dibi/Drivers/SqliteDriver.php
@@ -27,14 +27,11 @@ class SqliteDriver implements Dibi\Driver
{
use Dibi\Strict;
- /** @var SQLite3 */
- private $connection;
+ private SQLite3 $connection;
- /** @var string Date format */
- private $fmtDate;
+ private string $fmtDate;
- /** @var string Datetime format */
- private $fmtDateTime;
+ private string $fmtDateTime;
/** @throws Dibi\NotSupportedException */
@@ -102,19 +99,19 @@ public static function createException(string $message, $code, string $sql): Dib
if ($code !== 19) {
return new Dibi\DriverException($message, $code, $sql);
- } elseif (strpos($message, 'must be unique') !== false
- || strpos($message, 'is not unique') !== false
- || strpos($message, 'UNIQUE constraint failed') !== false
+ } elseif (str_contains($message, 'must be unique')
+ || str_contains($message, 'is not unique')
+ || str_contains($message, 'UNIQUE constraint failed')
) {
return new Dibi\UniqueConstraintViolationException($message, $code, $sql);
- } elseif (strpos($message, 'may not be null') !== false
- || strpos($message, 'NOT NULL constraint failed') !== false
+ } elseif (str_contains($message, 'may not be null')
+ || str_contains($message, 'NOT NULL constraint failed')
) {
return new Dibi\NotNullConstraintViolationException($message, $code, $sql);
- } elseif (strpos($message, 'foreign key constraint failed') !== false
- || strpos($message, 'FOREIGN KEY constraint failed') !== false
+ } elseif (str_contains($message, 'foreign key constraint failed')
+ || str_contains($message, 'FOREIGN KEY constraint failed')
) {
return new Dibi\ForeignKeyConstraintViolationException($message, $code, $sql);
@@ -291,7 +288,7 @@ public function registerAggregateFunction(
string $name,
callable $rowCallback,
callable $agrCallback,
- int $numArgs = -1
+ int $numArgs = -1,
): void {
$this->connection->createAggregate($name, $rowCallback, $agrCallback, $numArgs);
}
diff --git a/src/Dibi/Drivers/SqliteReflector.php b/src/Dibi/Drivers/SqliteReflector.php
index da2a36f4d..a8be616be 100644
--- a/src/Dibi/Drivers/SqliteReflector.php
+++ b/src/Dibi/Drivers/SqliteReflector.php
@@ -19,8 +19,7 @@ class SqliteReflector implements Dibi\Reflector
{
use Dibi\Strict;
- /** @var Dibi\Driver */
- private $driver;
+ private Dibi\Driver $driver;
public function __construct(Dibi\Driver $driver)
diff --git a/src/Dibi/Drivers/SqliteResult.php b/src/Dibi/Drivers/SqliteResult.php
index 686d8b00b..5b60e267b 100644
--- a/src/Dibi/Drivers/SqliteResult.php
+++ b/src/Dibi/Drivers/SqliteResult.php
@@ -20,11 +20,9 @@ class SqliteResult implements Dibi\ResultDriver
{
use Dibi\Strict;
- /** @var \SQLite3Result */
- private $resultSet;
+ private \SQLite3Result $resultSet;
- /** @var bool */
- private $autoFree = true;
+ private bool $autoFree = true;
public function __construct(\SQLite3Result $resultSet)
diff --git a/src/Dibi/Drivers/SqlsrvDriver.php b/src/Dibi/Drivers/SqlsrvDriver.php
index 5cdcfd442..9f0ce2ac3 100644
--- a/src/Dibi/Drivers/SqlsrvDriver.php
+++ b/src/Dibi/Drivers/SqlsrvDriver.php
@@ -32,11 +32,9 @@ class SqlsrvDriver implements Dibi\Driver
/** @var resource */
private $connection;
- /** @var int|null Affected rows */
- private $affectedRows;
+ private ?int $affectedRows;
- /** @var string */
- private $version = '';
+ private string $version = '';
/** @throws Dibi\NotSupportedException */
@@ -60,7 +58,7 @@ public function __construct(array $config)
$options = $config['options'];
// Default values
- $options['CharacterSet'] = $options['CharacterSet'] ?? 'UTF-8';
+ $options['CharacterSet'] ??= 'UTF-8';
$options['PWD'] = (string) $options['PWD'];
$options['UID'] = (string) $options['UID'];
$options['Database'] = (string) $options['Database'];
@@ -170,7 +168,7 @@ public function rollback(?string $savepoint = null): void
* Returns the connection resource.
* @return resource|null
*/
- public function getResource()
+ public function getResource(): mixed
{
return is_resource($this->connection) ? $this->connection : null;
}
diff --git a/src/Dibi/Drivers/SqlsrvReflector.php b/src/Dibi/Drivers/SqlsrvReflector.php
index b7b78f46e..dc60cc2fb 100644
--- a/src/Dibi/Drivers/SqlsrvReflector.php
+++ b/src/Dibi/Drivers/SqlsrvReflector.php
@@ -19,8 +19,7 @@ class SqlsrvReflector implements Dibi\Reflector
{
use Dibi\Strict;
- /** @var Dibi\Driver */
- private $driver;
+ private Dibi\Driver $driver;
public function __construct(Dibi\Driver $driver)
diff --git a/src/Dibi/Drivers/SqlsrvResult.php b/src/Dibi/Drivers/SqlsrvResult.php
index ef6ffcf8f..4e031c176 100644
--- a/src/Dibi/Drivers/SqlsrvResult.php
+++ b/src/Dibi/Drivers/SqlsrvResult.php
@@ -22,8 +22,7 @@ class SqlsrvResult implements Dibi\ResultDriver
/** @var resource */
private $resultSet;
- /** @var bool */
- private $autoFree = true;
+ private bool $autoFree = true;
/**
@@ -105,7 +104,7 @@ public function getResultColumns(): array
* Returns the result set resource.
* @return resource|null
*/
- public function getResultResource()
+ public function getResultResource(): mixed
{
$this->autoFree = false;
return is_resource($this->resultSet) ? $this->resultSet : null;
diff --git a/src/Dibi/Event.php b/src/Dibi/Event.php
index 5b883d7a7..7d6ac5977 100644
--- a/src/Dibi/Event.php
+++ b/src/Dibi/Event.php
@@ -31,26 +31,19 @@ class Event
TRANSACTION = 448, // BEGIN | COMMIT | ROLLBACK
ALL = 1023;
- /** @var Connection */
- public $connection;
+ public Connection $connection;
- /** @var int */
- public $type;
+ public int $type;
- /** @var string */
- public $sql;
+ public string $sql;
- /** @var Result|DriverException|null */
- public $result;
+ public Result|DriverException|null $result;
- /** @var float */
- public $time;
+ public float $time;
- /** @var int|null */
- public $count;
+ public ?int $count = null;
- /** @var array|null */
- public $source;
+ public ?array $source = null;
public function __construct(Connection $connection, int $type, ?string $sql = null)
@@ -70,7 +63,7 @@ public function __construct(Connection $connection, int $type, ?string $sql = nu
$dibiDir = dirname((new \ReflectionClass('dibi'))->getFileName()) . DIRECTORY_SEPARATOR;
foreach (debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS) as $row) {
- if (isset($row['file']) && is_file($row['file']) && strpos($row['file'], $dibiDir) !== 0) {
+ if (isset($row['file']) && is_file($row['file']) && !str_starts_with($row['file'], $dibiDir)) {
$this->source = [$row['file'], (int) $row['line']];
break;
}
@@ -82,10 +75,7 @@ public function __construct(Connection $connection, int $type, ?string $sql = nu
}
- /**
- * @param Result|DriverException|null $result
- */
- public function done($result = null): self
+ public function done(Result|DriverException|null $result = null): static
{
$this->result = $result;
try {
diff --git a/src/Dibi/Expression.php b/src/Dibi/Expression.php
index 969345f5b..e9671355f 100644
--- a/src/Dibi/Expression.php
+++ b/src/Dibi/Expression.php
@@ -17,8 +17,7 @@ class Expression
{
use Strict;
- /** @var array */
- private $values;
+ private array $values;
public function __construct(...$values)
diff --git a/src/Dibi/Fluent.php b/src/Dibi/Fluent.php
index 72b501d4f..d880f4dbd 100644
--- a/src/Dibi/Fluent.php
+++ b/src/Dibi/Fluent.php
@@ -47,8 +47,7 @@ class Fluent implements IDataSource
public const REMOVE = false;
- /** @var array */
- public static $masks = [
+ public static array $masks = [
'SELECT' => ['SELECT', 'DISTINCT', 'FROM', 'WHERE', 'GROUP BY',
'HAVING', 'ORDER BY', 'LIMIT', 'OFFSET', ],
'UPDATE' => ['UPDATE', 'SET', 'WHERE', 'ORDER BY', 'LIMIT'],
@@ -56,8 +55,8 @@ class Fluent implements IDataSource
'DELETE' => ['DELETE', 'FROM', 'USING', 'WHERE', 'ORDER BY', 'LIMIT'],
];
- /** @var array default modifiers for arrays */
- public static $modifiers = [
+ /** default modifiers for arrays */
+ public static array $modifiers = [
'SELECT' => '%n',
'FROM' => '%n',
'IN' => '%in',
@@ -69,8 +68,8 @@ class Fluent implements IDataSource
'GROUP BY' => '%by',
];
- /** @var array clauses separators */
- public static $separators = [
+ /** clauses separators */
+ public static array $separators = [
'SELECT' => ',',
'FROM' => ',',
'WHERE' => 'AND',
@@ -84,41 +83,35 @@ class Fluent implements IDataSource
'INTO' => false,
];
- /** @var array clauses */
- public static $clauseSwitches = [
+ /** clauses */
+ public static array $clauseSwitches = [
'JOIN' => 'FROM',
'INNER JOIN' => 'FROM',
'LEFT JOIN' => 'FROM',
'RIGHT JOIN' => 'FROM',
];
- /** @var Connection */
- private $connection;
+ private Connection $connection;
- /** @var array */
- private $setups = [];
+ private array $setups = [];
- /** @var string|null */
- private $command;
+ private ?string $command = null;
- /** @var array */
- private $clauses = [];
+ private array $clauses = [];
- /** @var array */
- private $flags = [];
+ private array $flags = [];
- /** @var array|null */
private $cursor;
- /** @var HashMap normalized clauses */
- private static $normalizer;
+ /** normalized clauses */
+ private static HashMap $normalizer;
public function __construct(Connection $connection)
{
$this->connection = $connection;
- if (self::$normalizer === null) {
+ if (!isset(self::$normalizer)) {
self::$normalizer = new HashMap([self::class, '_formatClause']);
}
}
@@ -127,7 +120,7 @@ public function __construct(Connection $connection)
/**
* Appends new argument to the clause.
*/
- public function __call(string $clause, array $args): self
+ public function __call(string $clause, array $args): static
{
$clause = self::$normalizer->$clause;
@@ -214,7 +207,7 @@ public function __call(string $clause, array $args): self
/**
* Switch to a clause.
*/
- public function clause(string $clause): self
+ public function clause(string $clause): static
{
$this->cursor = &$this->clauses[self::$normalizer->$clause];
if ($this->cursor === null) {
@@ -228,7 +221,7 @@ public function clause(string $clause): self
/**
* Removes a clause.
*/
- public function removeClause(string $clause): self
+ public function removeClause(string $clause): static
{
$this->clauses[self::$normalizer->$clause] = null;
return $this;
@@ -238,7 +231,7 @@ public function removeClause(string $clause): self
/**
* Change a SQL flag.
*/
- public function setFlag(string $flag, bool $value = true): self
+ public function setFlag(string $flag, bool $value = true): static
{
$flag = strtoupper($flag);
if ($value) {
@@ -278,7 +271,7 @@ final public function getConnection(): Connection
/**
* Adds Result setup.
*/
- public function setupResult(string $method): self
+ public function setupResult(string $method): static
{
$this->setups[] = func_get_args();
return $this;
@@ -290,10 +283,10 @@ public function setupResult(string $method): self
/**
* Generates and executes SQL query.
- * @return Result|int|null result set or number of affected rows
+ * Returns result set or number of affected rows
* @throws Exception
*/
- public function execute(?string $return = null)
+ public function execute(?string $return = null): Result|int|null
{
$res = $this->query($this->_export());
switch ($return) {
@@ -309,9 +302,8 @@ public function execute(?string $return = null)
/**
* Generates, executes SQL query and fetches the single row.
- * @return Row|array|null
*/
- public function fetch()
+ public function fetch(): Row|array|null
{
return $this->command === 'SELECT' && !$this->clauses['LIMIT']
? $this->query($this->_export(null, ['%lmt', 1]))->fetch()
@@ -321,9 +313,9 @@ public function fetch()
/**
* Like fetch(), but returns only first field.
- * @return mixed value on success, null if no next record
+ * Returns value on success, null if no next record
*/
- public function fetchSingle()
+ public function fetchSingle(): mixed
{
return $this->command === 'SELECT' && !$this->clauses['LIMIT']
? $this->query($this->_export(null, ['%lmt', 1]))->fetchSingle()
@@ -411,12 +403,7 @@ public function toDataSource(): DataSource
*/
final public function __toString(): string
{
- try {
- return $this->connection->translate($this->_export());
- } catch (\Throwable $e) {
- trigger_error($e->getMessage(), E_USER_ERROR);
- return '';
- }
+ return $this->connection->translate($this->_export());
}
diff --git a/src/Dibi/Helpers.php b/src/Dibi/Helpers.php
index 0c1cddfdb..03370c823 100644
--- a/src/Dibi/Helpers.php
+++ b/src/Dibi/Helpers.php
@@ -14,19 +14,17 @@ class Helpers
{
use Strict;
- /** @var HashMap */
- private static $types;
+ private static HashMap $types;
/**
* Prints out a syntax highlighted version of the SQL command or Result.
- * @param string|Result $sql
*/
- public static function dump($sql = null, bool $return = false): ?string
+ public static function dump(string|Result|null $sql = null, bool $return = false): ?string
{
ob_start();
if ($sql instanceof Result && PHP_SAPI === 'cli') {
- $hasColors = (substr((string) getenv('TERM'), 0, 5) === 'xterm');
+ $hasColors = (str_starts_with((string) getenv('TERM'), 'xterm'));
$maxLen = 0;
foreach ($sql as $i => $row) {
if ($i === 0) {
@@ -91,7 +89,7 @@ public static function dump($sql = null, bool $return = false): ?string
// syntax highlight
$highlighter = "#(/\\*.+?\\*/)|(\\*\\*.+?\\*\\*)|(?<=[\\s,(])($keywords1)(?=[\\s,)])|(?<=[\\s,(=])($keywords2)(?=[\\s,)=])#is";
if (PHP_SAPI === 'cli') {
- if (substr((string) getenv('TERM'), 0, 5) === 'xterm') {
+ if (str_starts_with((string) getenv('TERM'), 'xterm')) {
$sql = preg_replace_callback($highlighter, function (array $m) {
if (!empty($m[1])) { // comment
return "\033[1;30m" . $m[1] . "\033[0m";
@@ -211,7 +209,7 @@ public static function detectType(string $type): ?string
/** @internal */
public static function getTypeCache(): HashMap
{
- if (self::$types === null) {
+ if (!isset(self::$types)) {
self::$types = new HashMap([self::class, 'detectType']);
}
@@ -238,7 +236,7 @@ public static function alias(array &$config, string $key, string $alias): void
/**
* Import SQL dump from file.
- * @return int count of sql commands
+ * Returns count of sql commands
*/
public static function loadFromFile(Connection $connection, string $file, ?callable $onProgress = null): int
{
@@ -259,7 +257,7 @@ public static function loadFromFile(Connection $connection, string $file, ?calla
if (strtoupper(substr($s, 0, 10)) === 'DELIMITER ') {
$delimiter = trim(substr($s, 10));
- } elseif (substr($ts = rtrim($s), -strlen($delimiter)) === $delimiter) {
+ } elseif (str_ends_with($ts = rtrim($s), $delimiter)) {
$sql .= substr($ts, 0, -strlen($delimiter));
$driver->query($sql);
$sql = '';
@@ -286,14 +284,14 @@ public static function loadFromFile(Connection $connection, string $file, ?calla
/** @internal */
- public static function false2Null($val)
+ public static function false2Null(mixed $val): mixed
{
return $val === false ? null : $val;
}
/** @internal */
- public static function intVal($value): int
+ public static function intVal(mixed $value): int
{
if (is_int($value)) {
return $value;
diff --git a/src/Dibi/Literal.php b/src/Dibi/Literal.php
index e81c4632b..5ea4d0a4a 100644
--- a/src/Dibi/Literal.php
+++ b/src/Dibi/Literal.php
@@ -17,8 +17,7 @@ class Literal
{
use Strict;
- /** @var string */
- private $value;
+ private string $value;
public function __construct($value)
diff --git a/src/Dibi/Loggers/FileLogger.php b/src/Dibi/Loggers/FileLogger.php
index 70d22d94e..d873ec0aa 100644
--- a/src/Dibi/Loggers/FileLogger.php
+++ b/src/Dibi/Loggers/FileLogger.php
@@ -19,14 +19,12 @@ class FileLogger
{
use Dibi\Strict;
- /** @var string Name of the file where SQL errors should be logged */
- public $file;
+ /** Name of the file where SQL errors should be logged */
+ public string $file;
- /** @var int */
- public $filter;
+ public int $filter;
- /** @var bool */
- private $errorsOnly;
+ private bool $errorsOnly;
public function __construct(string $file, ?int $filter = null, bool $errorsOnly = false)
@@ -58,7 +56,7 @@ public function logEvent(Dibi\Event $event): void
$this->writeToFile(
$event,
"ERROR: $message"
- . "\n-- SQL: " . $event->sql
+ . "\n-- SQL: " . $event->sql,
);
} else {
$this->writeToFile(
@@ -66,7 +64,7 @@ public function logEvent(Dibi\Event $event): void
'OK: ' . $event->sql
. ($event->count ? ";\n-- rows: " . $event->count : '')
. "\n-- takes: " . sprintf('%0.3f ms', $event->time * 1000)
- . "\n-- source: " . implode(':', $event->source)
+ . "\n-- source: " . implode(':', $event->source),
);
}
}
@@ -76,7 +74,7 @@ private function writeToFile(Dibi\Event $event, string $message): void
{
$driver = $event->connection->getConfig('driver');
$message .=
- "\n-- driver: " . (is_object($driver) ? get_class($driver) : $driver) . '/' . $event->connection->getConfig('name')
+ "\n-- driver: " . (is_object($driver) ? $driver::class : $driver) . '/' . $event->connection->getConfig('name')
. "\n-- " . date('Y-m-d H:i:s')
. "\n\n";
file_put_contents($this->file, $message, FILE_APPEND | LOCK_EX);
diff --git a/src/Dibi/Reflection/Column.php b/src/Dibi/Reflection/Column.php
index 174faeb1c..579fe27fd 100644
--- a/src/Dibi/Reflection/Column.php
+++ b/src/Dibi/Reflection/Column.php
@@ -29,11 +29,11 @@ class Column
{
use Dibi\Strict;
- /** @var Dibi\Reflector|null when created by Result */
- private $reflector;
+ /** when created by Result */
+ private ?Dibi\Reflector $reflector;
/** @var array (name, nativetype, [table], [fullname], [size], [nullable], [default], [autoincrement], [vendor]) */
- private $info;
+ private array $info;
public function __construct(?Dibi\Reflector $reflector, array $info)
@@ -109,15 +109,13 @@ public function isAutoIncrement(): bool
}
- /** @return mixed */
- public function getDefault()
+ public function getDefault(): mixed
{
return $this->info['default'] ?? null;
}
- /** @return mixed */
- public function getVendorInfo(string $key)
+ public function getVendorInfo(string $key): mixed
{
return $this->info['vendor'][$key] ?? null;
}
diff --git a/src/Dibi/Reflection/Database.php b/src/Dibi/Reflection/Database.php
index b46ad18fd..31ad73236 100644
--- a/src/Dibi/Reflection/Database.php
+++ b/src/Dibi/Reflection/Database.php
@@ -23,14 +23,12 @@ class Database
{
use Dibi\Strict;
- /** @var Dibi\Reflector */
- private $reflector;
+ private Dibi\Reflector $reflector;
- /** @var string|null */
- private $name;
+ private ?string $name;
- /** @var Table[]|null */
- private $tables;
+ /** @var Table[] */
+ private array $tables;
public function __construct(Dibi\Reflector $reflector, ?string $name = null)
@@ -89,7 +87,7 @@ public function hasTable(string $name): bool
protected function init(): void
{
- if ($this->tables === null) {
+ if (!isset($this->tables)) {
$this->tables = [];
foreach ($this->reflector->getTables() as $info) {
$this->tables[strtolower($info['name'])] = new Table($this->reflector, $info);
diff --git a/src/Dibi/Reflection/ForeignKey.php b/src/Dibi/Reflection/ForeignKey.php
index 040d33252..c4c77777c 100644
--- a/src/Dibi/Reflection/ForeignKey.php
+++ b/src/Dibi/Reflection/ForeignKey.php
@@ -22,11 +22,10 @@ class ForeignKey
{
use Dibi\Strict;
- /** @var string */
- private $name;
+ private string $name;
/** @var array of [local, foreign, onDelete, onUpdate] */
- private $references;
+ private array $references;
public function __construct(string $name, array $references)
diff --git a/src/Dibi/Reflection/Index.php b/src/Dibi/Reflection/Index.php
index 27287baee..40c5fe525 100644
--- a/src/Dibi/Reflection/Index.php
+++ b/src/Dibi/Reflection/Index.php
@@ -25,7 +25,7 @@ class Index
use Dibi\Strict;
/** @var array (name, columns, [unique], [primary]) */
- private $info;
+ private array $info;
public function __construct(array $info)
diff --git a/src/Dibi/Reflection/Result.php b/src/Dibi/Reflection/Result.php
index a843de50a..12df5a302 100644
--- a/src/Dibi/Reflection/Result.php
+++ b/src/Dibi/Reflection/Result.php
@@ -22,14 +22,13 @@ class Result
{
use Dibi\Strict;
- /** @var Dibi\ResultDriver */
- private $driver;
+ private Dibi\ResultDriver $driver;
/** @var Column[]|null */
- private $columns;
+ private ?array $columns;
/** @var Column[]|null */
- private $names;
+ private ?array $names;
public function __construct(Dibi\ResultDriver $driver)
@@ -81,7 +80,7 @@ public function hasColumn(string $name): bool
protected function initColumns(): void
{
- if ($this->columns === null) {
+ if (!isset($this->columns)) {
$this->columns = [];
$reflector = $this->driver instanceof Dibi\Reflector
? $this->driver
diff --git a/src/Dibi/Reflection/Table.php b/src/Dibi/Reflection/Table.php
index a0e28f8ea..ed664c0c6 100644
--- a/src/Dibi/Reflection/Table.php
+++ b/src/Dibi/Reflection/Table.php
@@ -27,26 +27,22 @@ class Table
{
use Dibi\Strict;
- /** @var Dibi\Reflector */
- private $reflector;
+ private Dibi\Reflector $reflector;
- /** @var string */
- private $name;
+ private string $name;
- /** @var bool */
- private $view;
+ private bool $view;
- /** @var Column[]|null */
- private $columns;
+ /** @var Column[] */
+ private array $columns;
- /** @var ForeignKey[]|null */
- private $foreignKeys;
+ /** @var ForeignKey[] */
+ private array $foreignKeys;
- /** @var Index[]|null */
- private $indexes;
+ /** @var Index[] */
+ private array $indexes;
- /** @var Index|null */
- private $primaryKey;
+ private ?Index $primaryKey;
public function __construct(Dibi\Reflector $reflector, array $info)
@@ -135,7 +131,7 @@ public function getPrimaryKey(): Index
protected function initColumns(): void
{
- if ($this->columns === null) {
+ if (!isset($this->columns)) {
$this->columns = [];
foreach ($this->reflector->getColumns($this->name) as $info) {
$this->columns[strtolower($info['name'])] = new Column($this->reflector, $info);
@@ -146,7 +142,7 @@ protected function initColumns(): void
protected function initIndexes(): void
{
- if ($this->indexes === null) {
+ if (!isset($this->indexes)) {
$this->initColumns();
$this->indexes = [];
foreach ($this->reflector->getIndexes($this->name) as $info) {
diff --git a/src/Dibi/Result.php b/src/Dibi/Result.php
index 3257986f0..15342fcb6 100644
--- a/src/Dibi/Result.php
+++ b/src/Dibi/Result.php
@@ -19,26 +19,23 @@ class Result implements IDataSource
{
use Strict;
- /** @var ResultDriver|null */
- private $driver;
+ private ?ResultDriver $driver;
- /** @var array Translate table */
- private $types = [];
+ /** Translate table */
+ private array $types = [];
- /** @var Reflection\Result|null */
- private $meta;
+ private ?Reflection\Result $meta;
- /** @var bool Already fetched? Used for allowance for first seek(0) */
- private $fetched = false;
+ /** Already fetched? Used for allowance for first seek(0) */
+ private bool $fetched = false;
- /** @var string|null returned object class */
- private $rowClass = Row::class;
+ /** returned object class */
+ private ?string $rowClass = Row::class;
/** @var callable|null returned object factory */
private $rowFactory;
- /** @var array format */
- private $formats = [];
+ private array $formats = [];
public function __construct(ResultDriver $driver, bool $normalize = true)
@@ -133,7 +130,7 @@ final public function getColumnCount(): int
/**
* Set fetched object class. This class should extend the Row class.
*/
- public function setRowClass(?string $class): self
+ public function setRowClass(?string $class): static
{
$this->rowClass = $class;
return $this;
@@ -152,7 +149,7 @@ public function getRowClass(): ?string
/**
* Set a factory to create fetched object instances. These should extend the Row class.
*/
- public function setRowFactory(callable $callback): self
+ public function setRowFactory(callable $callback): static
{
$this->rowFactory = $callback;
return $this;
@@ -162,9 +159,8 @@ public function setRowFactory(callable $callback): self
/**
* Fetches the row at current position, process optional type conversion.
* and moves the internal cursor to the next position
- * @return Row|array|null
*/
- final public function fetch()
+ final public function fetch(): Row|array|null
{
$row = $this->getResultDriver()->fetch(true);
if ($row === null) {
@@ -185,9 +181,9 @@ final public function fetch()
/**
* Like fetch(), but returns only first field.
- * @return mixed value on success, null if no next record
+ * Returns value on success, null if no next record
*/
- final public function fetchSingle()
+ final public function fetchSingle(): mixed
{
$row = $this->getResultDriver()->fetch(true);
if ($row === null) {
@@ -206,7 +202,7 @@ final public function fetchSingle()
*/
final public function fetchAll(?int $offset = null, ?int $limit = null): array
{
- $limit = $limit ?? -1;
+ $limit ??= -1;
$this->seek($offset ?: 0);
$row = $this->fetch();
if (!$row) {
@@ -238,7 +234,7 @@ final public function fetchAll(?int $offset = null, ?int $limit = null): array
*/
final public function fetchAssoc(string $assoc): array
{
- if (strpos($assoc, ',') !== false) {
+ if (str_contains($assoc, ',')) {
return $this->oldFetchAssoc($assoc);
}
@@ -495,7 +491,7 @@ private function normalize(array &$row): void
$row[$key] = ((bool) $value) && $value !== 'f' && $value !== 'F';
} elseif ($type === Type::DATETIME || $type === Type::DATE || $type === Type::TIME) {
- if ($value && substr((string) $value, 0, 7) !== '0000-00') { // '', null, false, '0000-00-00', ...
+ if ($value && !str_starts_with((string) $value, '0000-00')) { // '', null, false, '0000-00-00', ...
$value = new DateTime($value);
$row[$key] = $format ? $value->format($format) : $value;
} else {
@@ -529,7 +525,7 @@ private function normalize(array &$row): void
* Define column type.
* @param string|null $type use constant Type::*
*/
- final public function setType(string $column, ?string $type): self
+ final public function setType(string $column, ?string $type): static
{
$this->types[$column] = $type;
return $this;
@@ -557,7 +553,7 @@ final public function getTypes(): array
/**
* Sets type format.
*/
- final public function setFormat(string $type, ?string $format): self
+ final public function setFormat(string $type, ?string $format): static
{
$this->formats[$type] = $format;
return $this;
@@ -567,7 +563,7 @@ final public function setFormat(string $type, ?string $format): self
/**
* Sets type formats.
*/
- final public function setFormats(array $formats): self
+ final public function setFormats(array $formats): static
{
$this->formats = $formats;
return $this;
@@ -591,7 +587,7 @@ final public function getFormat(string $type): ?string
*/
public function getInfo(): Reflection\Result
{
- if ($this->meta === null) {
+ if (!isset($this->meta)) {
$this->meta = new Reflection\Result($this->getResultDriver());
}
diff --git a/src/Dibi/ResultIterator.php b/src/Dibi/ResultIterator.php
index 92b42018e..2f3f5c763 100644
--- a/src/Dibi/ResultIterator.php
+++ b/src/Dibi/ResultIterator.php
@@ -17,14 +17,11 @@ class ResultIterator implements \Iterator, \Countable
{
use Strict;
- /** @var Result */
- private $result;
+ private Result $result;
- /** @var mixed */
- private $row;
+ private mixed $row;
- /** @var int */
- private $pointer = 0;
+ private int $pointer = 0;
public function __construct(Result $result)
@@ -44,23 +41,19 @@ public function rewind(): void
}
- #[\ReturnTypeWillChange]
/**
* Returns the key of the current element.
- * @return mixed
*/
- public function key()
+ public function key(): mixed
{
return $this->pointer;
}
- #[\ReturnTypeWillChange]
/**
* Returns the current element.
- * @return mixed
*/
- public function current()
+ public function current(): mixed
{
return $this->row;
}
diff --git a/src/Dibi/Row.php b/src/Dibi/Row.php
index c5a7f25bf..4f5ef55d7 100644
--- a/src/Dibi/Row.php
+++ b/src/Dibi/Row.php
@@ -31,13 +31,12 @@ public function toArray(): array
/**
* Converts value to DateTime object.
- * @return DateTime|string|null
*/
- public function asDateTime(string $key, ?string $format = null)
+ public function asDateTime(string $key, ?string $format = null): DateTime|string|null
{
$time = $this[$key];
if (!$time instanceof DateTime) {
- if (!$time || substr((string) $time, 0, 7) === '0000-00') { // '', null, false, '0000-00-00', ...
+ if (!$time || str_starts_with((string) $time, '0000-00')) { // '', null, false, '0000-00-00', ...
return null;
}
@@ -82,8 +81,7 @@ final public function offsetSet($nm, $val): void
}
- #[\ReturnTypeWillChange]
- final public function offsetGet($nm)
+ final public function offsetGet($nm): mixed
{
return $this->$nm;
}
diff --git a/src/Dibi/Strict.php b/src/Dibi/Strict.php
index 17804f505..5688784b2 100644
--- a/src/Dibi/Strict.php
+++ b/src/Dibi/Strict.php
@@ -20,7 +20,7 @@
trait Strict
{
/** @var array [method => [type => callback]] */
- private static $extMethods;
+ private static array $extMethods;
/**
@@ -31,7 +31,7 @@ public function __call(string $name, array $args)
{
$class = method_exists($this, $name) ? 'parent' : static::class;
$items = (new ReflectionClass($this))->getMethods(ReflectionMethod::IS_PUBLIC);
- $items = array_map(function ($item) { return $item->getName(); }, $items);
+ $items = array_map(fn($item) => $item->getName(), $items);
$hint = ($t = Helpers::getSuggestion($items, $name))
? ", did you mean $t()?"
: '.';
@@ -46,8 +46,8 @@ public function __call(string $name, array $args)
public static function __callStatic(string $name, array $args)
{
$rc = new ReflectionClass(static::class);
- $items = array_filter($rc->getMethods(\ReflectionMethod::IS_STATIC), function ($m) { return $m->isPublic(); });
- $items = array_map(function ($item) { return $item->getName(); }, $items);
+ $items = array_filter($rc->getMethods(\ReflectionMethod::IS_STATIC), fn($m) => $m->isPublic());
+ $items = array_map(fn($item) => $item->getName(), $items);
$hint = ($t = Helpers::getSuggestion($items, $name))
? ", did you mean $t()?"
: '.';
@@ -69,8 +69,8 @@ public function &__get(string $name)
}
$rc = new ReflectionClass($this);
- $items = array_filter($rc->getProperties(ReflectionProperty::IS_PUBLIC), function ($p) { return !$p->isStatic(); });
- $items = array_map(function ($item) { return $item->getName(); }, $items);
+ $items = array_filter($rc->getProperties(ReflectionProperty::IS_PUBLIC), fn($p) => !$p->isStatic());
+ $items = array_map(fn($item) => $item->getName(), $items);
$hint = ($t = Helpers::getSuggestion($items, $name))
? ", did you mean $$t?"
: '.';
@@ -85,8 +85,8 @@ public function &__get(string $name)
public function __set(string $name, $value)
{
$rc = new ReflectionClass($this);
- $items = array_filter($rc->getProperties(ReflectionProperty::IS_PUBLIC), function ($p) { return !$p->isStatic(); });
- $items = array_map(function ($item) { return $item->getName(); }, $items);
+ $items = array_filter($rc->getProperties(ReflectionProperty::IS_PUBLIC), fn($p) => !$p->isStatic());
+ $items = array_map(fn($item) => $item->getName(), $items);
$hint = ($t = Helpers::getSuggestion($items, $name))
? ", did you mean $$t?"
: '.';
diff --git a/src/Dibi/Translator.php b/src/Dibi/Translator.php
index 2188e8968..205801030 100644
--- a/src/Dibi/Translator.php
+++ b/src/Dibi/Translator.php
@@ -17,38 +17,28 @@ final class Translator
{
use Strict;
- /** @var Connection */
- private $connection;
+ private Connection $connection;
- /** @var Driver */
- private $driver;
+ private Driver $driver;
- /** @var int */
- private $cursor = 0;
+ private int $cursor = 0;
- /** @var array */
- private $args;
+ private array $args;
/** @var string[] */
- private $errors;
+ private array $errors;
- /** @var bool */
- private $comment = false;
+ private bool $comment = false;
- /** @var int */
- private $ifLevel = 0;
+ private int $ifLevel = 0;
- /** @var int */
- private $ifLevelStart = 0;
+ private int $ifLevelStart = 0;
- /** @var int|null */
- private $limit;
+ private ?int $limit = null;
- /** @var int|null */
- private $offset;
+ private ?int $offset = null;
- /** @var HashMap */
- private $identifiers;
+ private HashMap $identifiers;
public function __construct(Connection $connection)
@@ -96,22 +86,21 @@ public function translate(array $args): string
// note: this can change $this->args & $this->cursor & ...
. preg_replace_callback(
<<<'XX'
- /
- (?=[`['":%?]) ## speed-up
- (?:
- `(.+?)`| ## 1) `identifier`
- \[(.+?)\]| ## 2) [identifier]
- (')((?:''|[^'])*)'| ## 3,4) string
- (")((?:""|[^"])*)"| ## 5,6) "string"
- ('|")| ## 7) lone quote
- :(\S*?:)([a-zA-Z0-9._]?)| ## 8,9) :substitution:
- %([a-zA-Z~][a-zA-Z0-9~]{0,5})| ## 10) modifier
- (\?) ## 11) placeholder
- )/xs
-XX
-,
+ /
+ (?=[`['":%?]) ## speed-up
+ (?:
+ `(.+?)`| ## 1) `identifier`
+ \[(.+?)\]| ## 2) [identifier]
+ (')((?:''|[^'])*)'| ## 3,4) string
+ (")((?:""|[^"])*)"| ## 5,6) "string"
+ ('|")| ## 7) lone quote
+ :(\S*?:)([a-zA-Z0-9._]?)| ## 8,9) :substitution:
+ %([a-zA-Z~][a-zA-Z0-9~]{0,5})| ## 10) modifier
+ (\?) ## 11) placeholder
+ )/xs
+ XX,
[$this, 'cb'],
- substr($arg, $toSkip)
+ substr($arg, $toSkip),
);
if (preg_last_error()) {
throw new PcreException;
@@ -173,9 +162,8 @@ public function translate(array $args): string
/**
* Apply modifier to single value.
- * @param mixed $value
*/
- public function formatValue($value, ?string $modifier): string
+ public function formatValue(mixed $value, ?string $modifier): string
{
if ($this->comment) {
return '...';
@@ -210,7 +198,7 @@ public function formatValue($value, ?string $modifier): string
$v = $this->formatValue($v, $pair[1]);
if ($pair[1] === 'l' || $pair[1] === 'in') {
$op = 'IN ';
- } elseif (strpos($pair[1], 'like') !== false) {
+ } elseif (str_contains($pair[1], 'like')) {
$op = 'LIKE ';
} elseif ($v === 'NULL') {
$op = 'IS ';
@@ -280,7 +268,7 @@ public function formatValue($value, ?string $modifier): string
$proto = array_keys($v);
}
} else {
- return $this->errors[] = '**Unexpected type ' . (is_object($v) ? get_class($v) : gettype($v)) . '**';
+ return $this->errors[] = '**Unexpected type ' . (is_object($v) ? $v::class : gettype($v)) . '**';
}
$pair = explode('%', $k, 2); // split into identifier & modifier
@@ -344,7 +332,7 @@ public function formatValue($value, ?string $modifier): string
) {
// continue
} else {
- $type = is_object($value) ? get_class($value) : gettype($value);
+ $type = is_object($value) ? $value::class : gettype($value);
return $this->errors[] = "**Invalid combination of type $type and modifier %$modifier**";
}
}
@@ -432,20 +420,20 @@ public function formatValue($value, ?string $modifier): string
$value = substr($value, 0, $toSkip)
. preg_replace_callback(
<<<'XX'
- /
- (?=[`['":])
- (?:
- `(.+?)`|
- \[(.+?)\]|
- (')((?:''|[^'])*)'|
- (")((?:""|[^"])*)"|
- ('|")|
- :(\S*?:)([a-zA-Z0-9._]?)
- )/sx
-XX
+ /
+ (?=[`['":])
+ (?:
+ `(.+?)`|
+ \[(.+?)\]|
+ (')((?:''|[^'])*)'|
+ (")((?:""|[^"])*)"|
+ ('|")|
+ :(\S*?:)([a-zA-Z0-9._]?)
+ )/sx
+ XX
,
[$this, 'cb'],
- substr($value, $toSkip)
+ substr($value, $toSkip),
);
if (preg_last_error()) {
throw new PcreException;
@@ -482,6 +470,11 @@ public function formatValue($value, ?string $modifier): string
}
}
+ // object-to-scalar procession
+ if ($value instanceof \BackedEnum && is_scalar($value->value)) {
+ $value = $value->value;
+ }
+
// without modifier procession
if (is_string($value)) {
return $this->driver->escapeText($value);
@@ -511,7 +504,7 @@ public function formatValue($value, ?string $modifier): string
return $this->connection->translate(...$value->getValues());
} else {
- $type = is_object($value) ? get_class($value) : gettype($value);
+ $type = is_object($value) ? $value::class : gettype($value);
return $this->errors[] = "**Unexpected $type**";
}
}
diff --git a/src/Dibi/dibi.php b/src/Dibi/dibi.php
index 65dd50703..d335ce9da 100644
--- a/src/Dibi/dibi.php
+++ b/src/Dibi/dibi.php
@@ -45,30 +45,30 @@ class dibi
/** version */
public const
- VERSION = '4.2.5';
+ VERSION = '5.0-dev';
/** sorting order */
public const
ASC = 'ASC',
DESC = 'DESC';
- /** @var string|null Last SQL command @see dibi::query() */
- public static $sql;
+ /** Last SQL command @see dibi::query() */
+ public static ?string $sql = null;
- /** @var float|null Elapsed time for last query */
- public static $elapsedTime;
+ /** Elapsed time for last query */
+ public static ?float $elapsedTime = null;
- /** @var float Elapsed time for all queries */
- public static $totalTime;
+ /** Elapsed time for all queries */
+ public static float $totalTime = 0;
- /** @var int Number or queries */
- public static $numOfQueries = 0;
+ /** Number or queries */
+ public static int $numOfQueries = 0;
/** @var Dibi\Connection[] Connection registry storage for Dibi\Connection objects */
- private static $registry = [];
+ private static array $registry = [];
- /** @var Dibi\Connection Current connection */
- private static $connection;
+ /** Current connection */
+ private static Dibi\Connection $connection;
/**
@@ -88,7 +88,7 @@ final public function __construct()
* @param array $config connection parameters
* @throws Dibi\Exception
*/
- public static function connect($config = [], string $name = '0'): Dibi\Connection
+ public static function connect(array $config = [], string $name = '0'): Dibi\Connection
{
return self::$connection = self::$registry[$name] = new Dibi\Connection($config, $name);
}
@@ -151,10 +151,9 @@ public static function __callStatic(string $name, array $args)
/**
* Prints out a syntax highlighted version of the SQL command or Result.
- * @param string|Dibi\Result $sql
* @param bool $return return output instead of printing it?
*/
- public static function dump($sql = null, bool $return = false): ?string
+ public static function dump(string|Dibi\Result|null $sql = null, bool $return = false): ?string
{
return Dibi\Helpers::dump($sql, $return);
}
@@ -165,7 +164,7 @@ public static function dump($sql = null, bool $return = false): ?string
*/
public static function stripMicroseconds(DateTimeInterface $dt): DateTimeInterface
{
- $class = get_class($dt);
+ $class = $dt::class;
return new $class($dt->format('Y-m-d H:i:s'), $dt->getTimezone());
}
}
diff --git a/src/Dibi/exceptions.php b/src/Dibi/exceptions.php
index 4d7057906..8711cb650 100644
--- a/src/Dibi/exceptions.php
+++ b/src/Dibi/exceptions.php
@@ -15,15 +15,15 @@
*/
class Exception extends \Exception
{
- /** @var string|null */
- private $sql;
+ private ?string $sql;
- /**
- * @param int|string $code
- */
- public function __construct(string $message = '', $code = 0, ?string $sql = null, ?\Throwable $previous = null)
- {
+ public function __construct(
+ string $message = '',
+ int|string $code = 0,
+ ?string $sql = null,
+ ?\Throwable $previous = null,
+ ) {
parent::__construct($message, 0, $previous);
$this->code = $code;
$this->sql = $sql;
@@ -86,8 +86,7 @@ class NotSupportedException extends Exception
*/
class ProcedureException extends Exception
{
- /** @var string */
- protected $severity;
+ protected string $severity;
/**
diff --git a/src/Dibi/interfaces.php b/src/Dibi/interfaces.php
index 51cc1436a..3cf336854 100644
--- a/src/Dibi/interfaces.php
+++ b/src/Dibi/interfaces.php
@@ -67,9 +67,8 @@ function rollback(?string $savepoint = null): void;
/**
* Returns the connection resource.
- * @return mixed
*/
- function getResource();
+ function getResource(): mixed;
/**
* Returns the connection reflector.
@@ -117,7 +116,6 @@ function getRowCount(): int;
/**
* Moves cursor position without fetching row.
- * @return bool true on success, false if unable to seek to specified record
* @throws Exception
*/
function seek(int $row): bool;
@@ -142,9 +140,8 @@ function getResultColumns(): array;
/**
* Returns the result set resource.
- * @return mixed
*/
- function getResultResource();
+ function getResultResource(): mixed;
/**
* Decodes data from result set.
diff --git a/tests/dibi/Connection.fetch.phpt b/tests/dibi/Connection.fetch.phpt
index 7b2a01e84..12c1751a5 100644
--- a/tests/dibi/Connection.fetch.phpt
+++ b/tests/dibi/Connection.fetch.phpt
@@ -33,13 +33,13 @@ Assert::equal([
$res = $conn->query('SELECT * FROM [products] ORDER BY product_id');
Assert::same(
[1 => 'Chair', 'Table', 'Computer'],
- $res->fetchPairs('product_id', 'title')
+ $res->fetchPairs('product_id', 'title'),
);
$res = $conn->query('SELECT * FROM [products] ORDER BY product_id');
Assert::same(
[1 => 'Chair', 'Table', 'Computer'],
- $res->fetchPairs()
+ $res->fetchPairs(),
);
diff --git a/tests/dibi/Connection.substitutions.phpt b/tests/dibi/Connection.substitutions.phpt
index 2c1a98f2f..a50fa5f82 100644
--- a/tests/dibi/Connection.substitutions.phpt
+++ b/tests/dibi/Connection.substitutions.phpt
@@ -14,27 +14,27 @@ $conn->getSubstitutes()->blog = 'wp_';
Assert::same(
reformat('UPDATE wp_items SET [val]=1'),
- $conn->translate('UPDATE :blog:items SET [val]=1')
+ $conn->translate('UPDATE :blog:items SET [val]=1'),
);
Assert::same(
reformat('UPDATE [wp_items] SET [val]=1'),
- $conn->translate('UPDATE [:blog:items] SET [val]=1')
+ $conn->translate('UPDATE [:blog:items] SET [val]=1'),
);
Assert::same(
reformat("UPDATE 'wp_' SET [val]=1"),
- $conn->translate('UPDATE :blog: SET [val]=1')
+ $conn->translate('UPDATE :blog: SET [val]=1'),
);
Assert::same(
reformat("UPDATE ':blg:' SET [val]=1"),
- $conn->translate('UPDATE :blg: SET [val]=1')
+ $conn->translate('UPDATE :blg: SET [val]=1'),
);
Assert::same(
reformat("UPDATE table SET [text]=':blog:a'"),
- $conn->translate("UPDATE table SET [text]=':blog:a'")
+ $conn->translate("UPDATE table SET [text]=':blog:a'"),
);
@@ -43,16 +43,14 @@ $conn->getSubstitutes()->{''} = 'my_';
Assert::same(
reformat('UPDATE my_table SET [val]=1'),
- $conn->translate('UPDATE ::table SET [val]=1')
+ $conn->translate('UPDATE ::table SET [val]=1'),
);
// create substitutions using fallback callback
-$conn->getSubstitutes()->setCallback(function ($expr) {
- return '_' . $expr . '_';
-});
+$conn->getSubstitutes()->setCallback(fn($expr) => '_' . $expr . '_');
Assert::same(
reformat('UPDATE _account_user SET [val]=1'),
- $conn->translate('UPDATE :account:user SET [val]=1')
+ $conn->translate('UPDATE :account:user SET [val]=1'),
);
diff --git a/tests/dibi/DataSource.phpt b/tests/dibi/DataSource.phpt
index c71907180..044815fdc 100644
--- a/tests/dibi/DataSource.phpt
+++ b/tests/dibi/DataSource.phpt
@@ -17,7 +17,7 @@ Assert::match(
reformat('
SELECT *
FROM (SELECT * FROM products) t'),
- (string) $ds
+ (string) $ds,
);
@@ -25,7 +25,7 @@ Assert::same(3, $ds->count());
Assert::same(3, $ds->getTotalCount());
Assert::same(
reformat('SELECT COUNT(*) FROM (SELECT * FROM products) t'),
- dibi::$sql
+ dibi::$sql,
);
@@ -39,7 +39,7 @@ FROM (SELECT * FROM products) t
WHERE (title like '%a%')
ORDER BY [title] DESC
"),
- (string) $ds
+ (string) $ds,
);
@@ -53,7 +53,7 @@ FROM (SELECT * FROM products) t
WHERE (title like '%a%') AND (product_id = 1)
ORDER BY [title] DESC, [product_id] ASC
"),
- (string) $ds
+ (string) $ds,
);
@@ -67,7 +67,7 @@ FROM (SELECT * FROM products) t
WHERE (title like '%a%') AND (product_id = 1) AND (product_id = 1)
ORDER BY [product_id] ASC
"),
- (string) $ds
+ (string) $ds,
);
@@ -95,7 +95,7 @@ FROM (SELECT * FROM products) t
WHERE (title like '%a%') AND (product_id = 1) AND (product_id = 1)
ORDER BY [product_id] ASC
"),
- dibi::$sql
+ dibi::$sql,
);
@@ -108,7 +108,7 @@ FROM (SELECT * FROM products) t
WHERE (title like '%a%') AND (product_id = 1) AND (product_id = 1)
ORDER BY [product_id] ASC
) t"),
- (string) $fluent
+ (string) $fluent,
);
@@ -117,7 +117,7 @@ Assert::match(
reformat('
SELECT *
FROM (SELECT [title] FROM [products]) t'),
- (string) $ds
+ (string) $ds,
);
Assert::equal(new Row([
@@ -129,7 +129,7 @@ Assert::same(1, $conn->dataSource('SELECT * FROM products ORDER BY product_id')-
Assert::same(
[1 => 'Chair', 'Table', 'Computer'],
- $conn->dataSource('SELECT * FROM products ORDER BY product_id')->fetchPairs()
+ $conn->dataSource('SELECT * FROM products ORDER BY product_id')->fetchPairs(),
);
Assert::equal([
@@ -154,7 +154,7 @@ Assert::match(
reformat('
SELECT *
FROM [products]'),
- (string) $ds
+ (string) $ds,
);
Assert::same(3, $ds->count());
diff --git a/tests/dibi/DateTime.phpt b/tests/dibi/DateTime.phpt
index 281be3c8e..523bef91c 100644
--- a/tests/dibi/DateTime.phpt
+++ b/tests/dibi/DateTime.phpt
@@ -10,10 +10,10 @@ require __DIR__ . '/bootstrap.php';
date_default_timezone_set('Europe/Prague');
-Assert::same('1978-01-23 11:40:00.000000', (string) new DateTime(254400000));
-Assert::same('1978-01-23 11:40:00.000000', (string) (new DateTime)->setTimestamp(254400000));
-Assert::same(254400000, (new DateTime(254400000))->getTimestamp());
+Assert::same('1978-01-23 11:40:00.000000', (string) new DateTime(254_400_000));
+Assert::same('1978-01-23 11:40:00.000000', (string) (new DateTime)->setTimestamp(254_400_000));
+Assert::same(254_400_000, (new DateTime(254_400_000))->getTimestamp());
-Assert::same(is_int(2544000000) ? 2544000000 : '2544000000', (new DateTime(2544000000))->getTimestamp()); // 64 bit
+Assert::same(is_int(2_544_000_000) ? 2_544_000_000 : '2544000000', (new DateTime(2_544_000_000))->getTimestamp()); // 64 bit
Assert::same('1978-05-05 00:00:00.000000', (string) new DateTime('1978-05-05'));
diff --git a/tests/dibi/Fluent.delete.phpt b/tests/dibi/Fluent.delete.phpt
index 174f3ab32..23fd79f0a 100644
--- a/tests/dibi/Fluent.delete.phpt
+++ b/tests/dibi/Fluent.delete.phpt
@@ -15,33 +15,33 @@ $fluent = $conn->delete('table')->as('bAlias')
Assert::same(
reformat('DELETE IGNORE FROM [table] AS [bAlias]'),
- (string) $fluent
+ (string) $fluent,
);
$fluent->removeClause('from')->from('anotherTable');
Assert::same(
reformat('DELETE IGNORE FROM [anotherTable]'),
- (string) $fluent
+ (string) $fluent,
);
$fluent->using('thirdTable');
Assert::same(
reformat('DELETE IGNORE FROM [anotherTable] USING [thirdTable]'),
- (string) $fluent
+ (string) $fluent,
);
$fluent->setFlag('IGNORE', false);
Assert::same(
reformat('DELETE FROM [anotherTable] USING [thirdTable]'),
- (string) $fluent
+ (string) $fluent,
);
$fluent->limit(10);
Assert::same(
reformat('DELETE FROM [anotherTable] USING [thirdTable] LIMIT 10'),
- (string) $fluent
+ (string) $fluent,
);
diff --git a/tests/dibi/Fluent.fetch.limit.mssql.phpt b/tests/dibi/Fluent.fetch.limit.mssql.phpt
index fc5b85870..7df79eb10 100644
--- a/tests/dibi/Fluent.fetch.limit.mssql.phpt
+++ b/tests/dibi/Fluent.fetch.limit.mssql.phpt
@@ -58,28 +58,28 @@ $fluent = $conn->select('*')
Assert::same(
reformat('SELECT TOP (1) * FROM (SELECT * FROM [customers] ORDER BY [customer_id]) t'),
- (string) $fluent
+ (string) $fluent,
);
$fluent->fetch();
Assert::same(
'SELECT TOP (1) * FROM (SELECT * FROM [customers] ORDER BY [customer_id]) t',
- dibi::$sql
+ dibi::$sql,
);
$fluent->fetchSingle();
Assert::same(
reformat('SELECT TOP (1) * FROM (SELECT * FROM [customers] ORDER BY [customer_id]) t'),
- dibi::$sql
+ dibi::$sql,
);
$fluent->fetchAll(0, 3);
Assert::same(
reformat('SELECT TOP (3) * FROM (SELECT * FROM [customers] ORDER BY [customer_id]) t'),
- dibi::$sql
+ dibi::$sql,
);
Assert::same(
reformat('SELECT TOP (1) * FROM (SELECT * FROM [customers] ORDER BY [customer_id]) t'),
- (string) $fluent
+ (string) $fluent,
);
@@ -87,16 +87,16 @@ $fluent->limit(0);
$fluent->fetch();
Assert::same(
reformat('SELECT TOP (0) * FROM (SELECT * FROM [customers] ORDER BY [customer_id]) t'),
- dibi::$sql
+ dibi::$sql,
);
$fluent->fetchSingle();
Assert::same(
reformat('SELECT TOP (0) * FROM (SELECT * FROM [customers] ORDER BY [customer_id]) t'),
- dibi::$sql
+ dibi::$sql,
);
Assert::same(
reformat('SELECT TOP (0) * FROM (SELECT * FROM [customers] ORDER BY [customer_id]) t'),
- (string) $fluent
+ (string) $fluent,
);
@@ -105,14 +105,14 @@ $fluent->removeClause('offset');
$fluent->fetch();
Assert::same(
reformat('SELECT TOP (1) * FROM (SELECT * FROM [customers] ORDER BY [customer_id]) t'),
- dibi::$sql
+ dibi::$sql,
);
$fluent->fetchSingle();
Assert::same(
reformat('SELECT TOP (1) * FROM (SELECT * FROM [customers] ORDER BY [customer_id]) t'),
- dibi::$sql
+ dibi::$sql,
);
Assert::same(
reformat('SELECT * FROM [customers] ORDER BY [customer_id]'),
- (string) $fluent
+ (string) $fluent,
);
diff --git a/tests/dibi/Fluent.fetch.limit.phpt b/tests/dibi/Fluent.fetch.limit.phpt
index f8f4f5d52..dd533e1ec 100644
--- a/tests/dibi/Fluent.fetch.limit.phpt
+++ b/tests/dibi/Fluent.fetch.limit.phpt
@@ -23,28 +23,28 @@ $fluent = $conn->select('*')
Assert::same(
reformat('SELECT * FROM [customers] ORDER BY [customer_id] LIMIT 1 OFFSET 3'),
- (string) $fluent
+ (string) $fluent,
);
$fluent->fetch();
Assert::same(
reformat('SELECT * FROM [customers] ORDER BY [customer_id] LIMIT 1 OFFSET 3'),
- dibi::$sql
+ dibi::$sql,
);
$fluent->fetchSingle();
Assert::same(
reformat('SELECT * FROM [customers] ORDER BY [customer_id] LIMIT 1 OFFSET 3'),
- dibi::$sql
+ dibi::$sql,
);
$fluent->fetchAll(2, 3);
Assert::same(
reformat('SELECT * FROM [customers] ORDER BY [customer_id] LIMIT 3 OFFSET 2'),
- dibi::$sql
+ dibi::$sql,
);
Assert::same(
reformat('SELECT * FROM [customers] ORDER BY [customer_id] LIMIT 1 OFFSET 3'),
- (string) $fluent
+ (string) $fluent,
);
@@ -52,16 +52,16 @@ $fluent->limit(0);
$fluent->fetch();
Assert::same(
reformat('SELECT * FROM [customers] ORDER BY [customer_id] LIMIT 0 OFFSET 3'),
- dibi::$sql
+ dibi::$sql,
);
$fluent->fetchSingle();
Assert::same(
reformat('SELECT * FROM [customers] ORDER BY [customer_id] LIMIT 0 OFFSET 3'),
- dibi::$sql
+ dibi::$sql,
);
Assert::same(
reformat('SELECT * FROM [customers] ORDER BY [customer_id] LIMIT 0 OFFSET 3'),
- (string) $fluent
+ (string) $fluent,
);
@@ -69,16 +69,16 @@ $fluent->removeClause('limit');
$fluent->fetch();
Assert::same(
reformat('SELECT * FROM [customers] ORDER BY [customer_id] LIMIT 1 OFFSET 3'),
- dibi::$sql
+ dibi::$sql,
);
$fluent->fetchSingle();
Assert::same(
reformat('SELECT * FROM [customers] ORDER BY [customer_id] LIMIT 1 OFFSET 3'),
- dibi::$sql
+ dibi::$sql,
);
Assert::same(
reformat('SELECT * FROM [customers] ORDER BY [customer_id] LIMIT 18446744073709551615 OFFSET 3'),
- (string) $fluent
+ (string) $fluent,
);
@@ -86,14 +86,14 @@ $fluent->removeClause('offset');
$fluent->fetch();
Assert::same(
reformat('SELECT * FROM [customers] ORDER BY [customer_id] LIMIT 1'),
- dibi::$sql
+ dibi::$sql,
);
$fluent->fetchSingle();
Assert::same(
reformat('SELECT * FROM [customers] ORDER BY [customer_id] LIMIT 1'),
- dibi::$sql
+ dibi::$sql,
);
Assert::same(
reformat('SELECT * FROM [customers] ORDER BY [customer_id]'),
- (string) $fluent
+ (string) $fluent,
);
diff --git a/tests/dibi/Fluent.insert.phpt b/tests/dibi/Fluent.insert.phpt
index d43b65b02..a68aa7e85 100644
--- a/tests/dibi/Fluent.insert.phpt
+++ b/tests/dibi/Fluent.insert.phpt
@@ -21,40 +21,40 @@ $fluent = $conn->insert('table', $arr)
Assert::same(
reformat('INSERT IGNORE DELAYED INTO [table] ([title], [price], [brand]) VALUES (\'Super Product\', 12, NULL)'),
- (string) $fluent
+ (string) $fluent,
);
$fluent->setFlag('IGNORE', false);
Assert::same(
reformat('INSERT DELAYED INTO [table] ([title], [price], [brand]) VALUES (\'Super Product\', 12, NULL)'),
- (string) $fluent
+ (string) $fluent,
);
$fluent->setFlag('HIGH_priority');
Assert::same(
reformat('INSERT DELAYED HIGH_PRIORITY INTO [table] ([title], [price], [brand]) VALUES (\'Super Product\', 12, NULL)'),
- (string) $fluent
+ (string) $fluent,
);
$fluent->into('anotherTable');
Assert::same(
reformat('INSERT DELAYED HIGH_PRIORITY INTO [anotherTable] VALUES (\'Super Product\', 12, NULL)'),
- (string) $fluent
+ (string) $fluent,
);
$fluent->values('%l', $arr);
Assert::same(
reformat('INSERT DELAYED HIGH_PRIORITY INTO [anotherTable] VALUES (\'Super Product\', 12, NULL) , (\'Super Product\', 12, NULL)'),
- (string) $fluent
+ (string) $fluent,
);
$fluent->values($arr);
Assert::same(
reformat('INSERT DELAYED HIGH_PRIORITY INTO [anotherTable] VALUES (\'Super Product\', 12, NULL) , (\'Super Product\', 12, NULL) , (\'Super Product\', 12, NULL)'),
- (string) $fluent
+ (string) $fluent,
);
diff --git a/tests/dibi/Fluent.select.phpt b/tests/dibi/Fluent.select.phpt
index 17a1f914c..6c7972290 100644
--- a/tests/dibi/Fluent.select.phpt
+++ b/tests/dibi/Fluent.select.phpt
@@ -25,7 +25,7 @@ $fluent = $conn->select('*')
Assert::same(
reformat('SELECT * , [a] , [b] AS [bAlias] , [c], [d], [e] , [d]'),
- (string) $fluent
+ (string) $fluent,
);
$fluent->from('table')->as('table.Alias')
@@ -34,21 +34,21 @@ $fluent->from('table')->as('table.Alias')
Assert::same(
reformat('SELECT * , [a] , [b] AS [bAlias] , [c], [d], [e] , [d] FROM [table] AS [table.Alias] INNER JOIN [table1] ON table.col = table1.col INNER JOIN [table2] ON table.col = table2.col'),
- (string) $fluent
+ (string) $fluent,
);
$fluent->from('anotherTable');
Assert::same(
reformat('SELECT * , [a] , [b] AS [bAlias] , [c], [d], [e] , [d] FROM [table] AS [table.Alias] INNER JOIN [table1] ON table.col = table1.col INNER JOIN [table2] ON table.col = table2.col , [anotherTable]'),
- (string) $fluent
+ (string) $fluent,
);
$fluent->removeClause('from')->from('anotherTable');
Assert::same(
reformat('SELECT * , [a] , [b] AS [bAlias] , [c], [d], [e] , [d] FROM [anotherTable]'),
- (string) $fluent
+ (string) $fluent,
);
$fluent->as('anotherAlias')
@@ -58,7 +58,7 @@ $fluent->as('anotherAlias')
Assert::same(
reformat('SELECT * , [a] , [b] AS [bAlias] , [c], [d], [e] , [d] FROM [anotherTable] AS [anotherAlias] INNER JOIN [table3] ON table.col = table3.col'),
- (string) $fluent
+ (string) $fluent,
);
$fluent->where('col > %i', $max)
@@ -71,14 +71,14 @@ $fluent->where('col > %i', $max)
Assert::same(
reformat('SELECT * , [a] , [b] AS [bAlias] , [c], [d], [e] , [d] FROM [anotherTable] AS [anotherAlias] INNER JOIN [table3] ON table.col = table3.col WHERE col > 10 OR col < 5 AND active = 1 AND [col] IN (1, 2, 3) ORDER BY [val] ASC , [val2] DESC , [val3] DESC'),
- (string) $fluent
+ (string) $fluent,
);
$fluent->orderBy(Dibi\Fluent::REMOVE);
Assert::same(
reformat('SELECT * , [a] , [b] AS [bAlias] , [c], [d], [e] , [d] FROM [anotherTable] AS [anotherAlias] INNER JOIN [table3] ON table.col = table3.col WHERE col > 10 OR col < 5 AND active = 1 AND [col] IN (1, 2, 3)'),
- (string) $fluent
+ (string) $fluent,
);
@@ -86,7 +86,7 @@ $fluent = $conn->select('*')
->select(
$conn->select('count(*)')
->from('precteni')->as('P')
- ->where('P.id_clanku', '=', 'C.id_clanku')
+ ->where('P.id_clanku', '=', 'C.id_clanku'),
)
->from('clanky')->as('C')
->where('id_clanku=%i', 123)
@@ -99,7 +99,7 @@ Assert::same(
'sqlsrv' => 'SELECT * , (SELECT count(*) FROM [precteni] AS [P] WHERE P.id_clanku = C.id_clanku) FROM [clanky] AS [C] WHERE id_clanku=123 OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY',
'SELECT * , (SELECT count(*) FROM [precteni] AS [P] WHERE P.id_clanku = C.id_clanku) FROM [clanky] AS [C] WHERE id_clanku=123 LIMIT 1',
]),
- (string) $fluent
+ (string) $fluent,
);
@@ -112,7 +112,7 @@ $fluent = $conn->select('*')
Assert::same(
reformat('SELECT * , [x] AS [xAlias] FROM [products] INNER JOIN [orders] USING (product_id) INNER JOIN [customers] USING ([customer_id]) INNER JOIN [items] USING ([customer_id], [order_id])'),
- (string) $fluent
+ (string) $fluent,
);
@@ -124,7 +124,7 @@ $fluent = $conn->command()->select()
Assert::same(
reformat('SELECT * FROM [products] INNER JOIN [orders] USING (product_id)'),
- (string) $fluent
+ (string) $fluent,
);
@@ -138,7 +138,7 @@ Assert::same(
'sqlsrv' => "SELECT * FROM [me] AS [t] WHERE col > 10 AND ([x] = N'a') AND (b) AND (c)",
"SELECT * FROM [me] AS [t] WHERE col > 10 AND ([x] = 'a') AND (b) AND (c)",
]),
- (string) $fluent
+ (string) $fluent,
);
@@ -147,9 +147,9 @@ if ($config['system'] === 'mysql') {
->limit(' 1; DROP TABLE users')
->offset(' 1; DROP TABLE users');
- Assert::error(function () use ($fluent) {
+ Assert::exception(function () use ($fluent) {
(string) $fluent;
- }, E_USER_ERROR, "Expected number, ' 1; DROP TABLE users' given.");
+ }, Dibi\Exception::class, "Expected number, ' 1; DROP TABLE users' given.");
}
@@ -158,5 +158,5 @@ $fluent = $conn->select('*')->from('abc')
Assert::same(
reformat('SELECT * FROM [abc] WHERE x IN ((SELECT [id] FROM [xyz]))'),
- (string) $fluent
+ (string) $fluent,
);
diff --git a/tests/dibi/Fluent.update.phpt b/tests/dibi/Fluent.update.phpt
index af560dd1c..822078574 100644
--- a/tests/dibi/Fluent.update.phpt
+++ b/tests/dibi/Fluent.update.phpt
@@ -21,14 +21,14 @@ $fluent = $conn->update('table', $arr)
Assert::same(
reformat('UPDATE IGNORE DELAYED [table] SET [title]=\'Super Product\', [price]=12, [brand]=NULL'),
- (string) $fluent
+ (string) $fluent,
);
$fluent->set(['another' => 123]);
Assert::same(
reformat('UPDATE IGNORE DELAYED [table] SET [title]=\'Super Product\', [price]=12, [brand]=NULL , [another]=123'),
- (string) $fluent
+ (string) $fluent,
);
@@ -40,5 +40,5 @@ $arr = [
$fluent = $conn->update(['table1', 'table2'], $arr);
Assert::same(
reformat('UPDATE [table1], [table2] SET [table1].[title]=\'Super Product\', [table2].[price]=12, [table2].[brand]=NULL'),
- (string) $fluent
+ (string) $fluent,
);
diff --git a/tests/dibi/HashMap.phpt b/tests/dibi/HashMap.phpt
index f14cfc1ec..582ce63e4 100644
--- a/tests/dibi/HashMap.phpt
+++ b/tests/dibi/HashMap.phpt
@@ -6,9 +6,7 @@ use Tester\Assert;
require __DIR__ . '/bootstrap.php';
-$hash = new Dibi\HashMap(function ($v) {
- return "b-$v-e";
-});
+$hash = new Dibi\HashMap(fn($v) => "b-$v-e");
Assert::same('b-X-e', $hash->{'X'});
Assert::same('b--e', $hash->{''});
diff --git a/tests/dibi/PdoDriver.providedConnection.phpt b/tests/dibi/PdoDriver.providedConnection.phpt
index dfec0a747..ff87ec62b 100644
--- a/tests/dibi/PdoDriver.providedConnection.phpt
+++ b/tests/dibi/PdoDriver.providedConnection.phpt
@@ -18,16 +18,14 @@ function buildPdoDriver(?int $errorMode)
}
-// PDO error mode: exception
-Assert::exception(function () {
- buildPdoDriver(PDO::ERRMODE_EXCEPTION);
-}, Dibi\DriverException::class, 'PDO connection in exception or warning error mode is not supported.');
+// PDO error mode: exception is accepted
+buildPdoDriver(PDO::ERRMODE_EXCEPTION);
// PDO error mode: warning
Assert::exception(function () {
buildPdoDriver(PDO::ERRMODE_WARNING);
-}, Dibi\DriverException::class, 'PDO connection in exception or warning error mode is not supported.');
+}, Dibi\DriverException::class, 'PDO connection in warning error mode is not supported.');
test('PDO error mode: explicitly set silent', function () {
diff --git a/tests/dibi/Result.meta.phpt b/tests/dibi/Result.meta.phpt
index d3310f603..9aa66ce3d 100644
--- a/tests/dibi/Result.meta.phpt
+++ b/tests/dibi/Result.meta.phpt
@@ -28,14 +28,14 @@ Assert::same(4, $res->getColumnCount());
Assert::same(
['product_id', 'order_id', 'name', 'xXx'],
- $info->getColumnNames()
+ $info->getColumnNames(),
);
if (!in_array($config['driver'], ['sqlite', 'sqlite3', 'pdo', 'sqlsrv'], true)) {
Assert::same(
['products.product_id', 'orders.order_id', 'customers.name', 'xXx'],
- $info->getColumnNames(true)
+ $info->getColumnNames(true),
);
}
diff --git a/tests/dibi/Sqlsrv.insert.phpt b/tests/dibi/Sqlsrv.insert.phpt
index e0334c9e2..30947a5f5 100644
--- a/tests/dibi/Sqlsrv.insert.phpt
+++ b/tests/dibi/Sqlsrv.insert.phpt
@@ -25,7 +25,7 @@ $conn->query(
'CREATE TRIGGER %n ON %n AFTER INSERT AS INSERT INTO %n DEFAULT VALUES',
'UpdAAB',
'aab',
- 'aaa'
+ 'aaa',
);
$conn->query('INSERT INTO %n DEFAULT VALUES', 'aab');
diff --git a/tests/dibi/Sqlsrv.limits.phpt b/tests/dibi/Sqlsrv.limits.phpt
index adc132426..09587747a 100644
--- a/tests/dibi/Sqlsrv.limits.phpt
+++ b/tests/dibi/Sqlsrv.limits.phpt
@@ -21,19 +21,19 @@ $tests = function ($conn) {
// Limit and offset
Assert::same(
'SELECT 1 OFFSET 10 ROWS FETCH NEXT 10 ROWS ONLY',
- $conn->translate('SELECT 1 %ofs %lmt', 10, 10)
+ $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)
+ $conn->translate('SELECT 1 %lmt', 10),
);
// Offset only
Assert::same(
'SELECT 1 OFFSET 10 ROWS',
- $conn->translate('SELECT 1 %ofs', 10)
+ $conn->translate('SELECT 1 %ofs', 10),
);
// Offset invalid
@@ -42,7 +42,7 @@ $tests = function ($conn) {
$conn->translate('SELECT 1 %ofs', -10);
},
Dibi\NotSupportedException::class,
- 'Negative offset or limit.'
+ 'Negative offset or limit.',
);
// Limit invalid
@@ -51,7 +51,7 @@ $tests = function ($conn) {
$conn->translate('SELECT 1 %lmt', -10);
},
Dibi\NotSupportedException::class,
- 'Negative offset or limit.'
+ 'Negative offset or limit.',
);
// Limit invalid, offset valid
@@ -60,7 +60,7 @@ $tests = function ($conn) {
$conn->translate('SELECT 1 %ofs %lmt', 10, -10);
},
Dibi\NotSupportedException::class,
- 'Negative offset or limit.'
+ 'Negative offset or limit.',
);
// Limit valid, offset invalid
@@ -69,22 +69,22 @@ $tests = function ($conn) {
$conn->translate('SELECT 1 %ofs %lmt', -10, 10);
},
Dibi\NotSupportedException::class,
- 'Negative offset or limit.'
+ 'Negative offset or limit.',
);
} else {
Assert::same(
'SELECT TOP (1) * FROM (SELECT 1) t',
- $conn->translate('SELECT 1 %lmt', 1)
+ $conn->translate('SELECT 1 %lmt', 1),
);
Assert::same(
'SELECT 1',
- $conn->translate('SELECT 1 %lmt', -10)
+ $conn->translate('SELECT 1 %lmt', -10),
);
Assert::exception(
$conn->translate('SELECT 1 %ofs %lmt', 10, 10),
- Dibi\NotSupportedException::class
+ Dibi\NotSupportedException::class,
);
}
};
diff --git a/tests/dibi/Translator.conditions.phpt b/tests/dibi/Translator.conditions.phpt
index 0f356ca17..90123944c 100644
--- a/tests/dibi/Translator.conditions.phpt
+++ b/tests/dibi/Translator.conditions.phpt
@@ -27,8 +27,8 @@ FROM [customers]
isset($name),
'WHERE [name] LIKE %s',
'xxx',
- '%end'
- )
+ '%end',
+ ),
);
@@ -42,8 +42,8 @@ FROM [customers] /* ... */'),
SELECT *
FROM %if',
true,
- '[customers] %else [products]'
- )
+ '[customers] %else [products]',
+ ),
);
@@ -62,7 +62,7 @@ FROM [people]
WHERE [id] > 0
%if', false, 'AND [foo]=%i', 1, '
%else %if', true, 'AND [bar]=%i', 1, '
-')
+'),
);
@@ -97,8 +97,8 @@ WHERE
%if',
false,
'AND [admin]=1 %end
- %else 1 LIMIT 10 %end'
- )
+ %else 1 LIMIT 10 %end',
+ ),
);
@@ -113,6 +113,6 @@ Assert::same(
3,
'%ofs',
5,
- '%end'
- )
+ '%end',
+ ),
);
diff --git a/tests/dibi/Translator.enums.phpt b/tests/dibi/Translator.enums.phpt
new file mode 100644
index 000000000..270a8f810
--- /dev/null
+++ b/tests/dibi/Translator.enums.phpt
@@ -0,0 +1,41 @@
+formatValue(EnumInt::One, null));
+
+Assert::equal(match ($config['driver']) {
+ 'sqlsrv' => "N'one'",
+ default => "'one'",
+}, $translator->formatValue(EnumString::One, null));
+
+Assert::equal('**Unexpected PureEnum**', $translator->formatValue(PureEnum::One, null));
diff --git a/tests/dibi/Translator.identifiers.phpt b/tests/dibi/Translator.identifiers.phpt
index d842bc083..d86344124 100644
--- a/tests/dibi/Translator.identifiers.phpt
+++ b/tests/dibi/Translator.identifiers.phpt
@@ -15,35 +15,35 @@ $conn = new Dibi\Connection($config);
Assert::same(
reformat('SELECT * FROM where WHERE select < 2'),
- $conn->translate('SELECT * FROM where WHERE select < 2')
+ $conn->translate('SELECT * FROM where WHERE select < 2'),
);
Assert::same(
reformat('SELECT * FROM [where] WHERE where.select < 2'),
- $conn->translate('SELECT * FROM [where] WHERE where.select < 2')
+ $conn->translate('SELECT * FROM [where] WHERE where.select < 2'),
);
Assert::same(
reformat('SELECT * FROM [where] WHERE [where].[select] < 2'),
- $conn->translate('SELECT * FROM [where] WHERE [where.select] < 2')
+ $conn->translate('SELECT * FROM [where] WHERE [where.select] < 2'),
);
Assert::same(
reformat('SELECT * FROM [where] as [temp] WHERE [temp].[select] < 2'),
- $conn->translate('SELECT * FROM [where] as [temp] WHERE [temp.select] < 2')
+ $conn->translate('SELECT * FROM [where] as [temp] WHERE [temp.select] < 2'),
);
Assert::same(
reformat('SELECT * FROM [where] WHERE [quot\'n\' space] > 2'),
- $conn->translate("SELECT * FROM [where] WHERE [quot'n' space] > 2")
+ $conn->translate("SELECT * FROM [where] WHERE [quot'n' space] > 2"),
);
Assert::same(
reformat('SELECT * FROM [where] WHERE [where].[quot\'n\' space] > 2'),
- $conn->translate("SELECT * FROM [where] WHERE [where.quot'n' space] > 2")
+ $conn->translate("SELECT * FROM [where] WHERE [where.quot'n' space] > 2"),
);
diff --git a/tests/dibi/Translator.phpt b/tests/dibi/Translator.phpt
index 389b7f836..f435c0e1d 100644
--- a/tests/dibi/Translator.phpt
+++ b/tests/dibi/Translator.phpt
@@ -23,7 +23,7 @@ Assert::same(
$conn->translate('REPLACE INTO [products]', [
'title' => 'Drticka',
'price' => 318,
- ])
+ ]),
);
@@ -38,7 +38,7 @@ Assert::same(
'sqlsrv' => "INSERT INTO [products] ([title], [price], [brand]) VALUES (N'Super Product', 12, NULL) , (N'Super Product', 12, NULL) , (N'Super Product', 12, NULL)",
"INSERT INTO [products] ([title], [price], [brand]) VALUES ('Super Product', 12, NULL) , ('Super Product', 12, NULL) , ('Super Product', 12, NULL)",
]),
- $conn->translate('INSERT INTO [products]', $array, $array, $array)
+ $conn->translate('INSERT INTO [products]', $array, $array, $array),
);
@@ -53,7 +53,7 @@ Assert::same(
'sqlsrv' => "INSERT INTO [products] ([pole], [bit]) VALUES (N'hodnota1', 1) , (N'hodnota2', 1) , (N'hodnota3', 1)",
"INSERT INTO [products] ([pole], [bit]) VALUES ('hodnota1', 1) , ('hodnota2', 1) , ('hodnota3', 1)",
]),
- $conn->translate('INSERT INTO [products] %ex', $array)
+ $conn->translate('INSERT INTO [products] %ex', $array),
);
@@ -66,7 +66,7 @@ Assert::same(
$conn->translate('UPDATE [colors] SET', [
'color' => 'blue',
'order' => 12,
- ], 'WHERE [id]=%i', 123)
+ ], 'WHERE [id]=%i', 123),
);
@@ -74,20 +74,20 @@ Assert::same(
$array = [1, 2, 3];
Assert::same(
reformat('SELECT * FROM [people] WHERE [id] IN ( 1, 2, 3 )'),
- $conn->translate('SELECT * FROM [people] WHERE [id] IN (', $array, ')')
+ $conn->translate('SELECT * FROM [people] WHERE [id] IN (', $array, ')'),
);
// long numbers
Assert::same(
reformat('SELECT -123456789123456789123456789'),
- $conn->translate('SELECT %i', '-123456789123456789123456789')
+ $conn->translate('SELECT %i', '-123456789123456789123456789'),
);
// long float numbers
Assert::same(
reformat('SELECT -.12345678912345678912345678e10'),
- $conn->translate('SELECT %f', '-.12345678912345678912345678e10')
+ $conn->translate('SELECT %f', '-.12345678912345678912345678e10'),
);
// invalid input
@@ -101,7 +101,7 @@ Assert::same(
'sqlsrv' => "SELECT * FROM [table] WHERE id=10 AND name=N'ahoj'",
"SELECT * FROM [table] WHERE id=10 AND name='ahoj'",
]),
- $conn->translate('SELECT * FROM [table] WHERE id=%i AND name=%s', 10, 'ahoj')
+ $conn->translate('SELECT * FROM [table] WHERE id=%i AND name=%s', 10, 'ahoj'),
);
Assert::same(
@@ -109,7 +109,7 @@ Assert::same(
'sqlsrv' => "TEST ([cond] > 2) OR ([cond2] = N'3') OR (cond3 < RAND())",
"TEST ([cond] > 2) OR ([cond2] = '3') OR (cond3 < RAND())",
]),
- $conn->translate('TEST %or', ['[cond] > 2', '[cond2] = "3"', 'cond3 < RAND()'])
+ $conn->translate('TEST %or', ['[cond] > 2', '[cond2] = "3"', 'cond3 < RAND()']),
);
Assert::same(
@@ -117,7 +117,7 @@ Assert::same(
'sqlsrv' => "TEST ([cond] > 2) AND ([cond2] = N'3') AND (cond3 < RAND())",
"TEST ([cond] > 2) AND ([cond2] = '3') AND (cond3 < RAND())",
]),
- $conn->translate('TEST %and', ['[cond] > 2', '[cond2] = "3"', 'cond3 < RAND()'])
+ $conn->translate('TEST %and', ['[cond] > 2', '[cond2] = "3"', 'cond3 < RAND()']),
);
@@ -126,7 +126,7 @@ $where[] = '[age] > 20';
$where[] = '[email] IS NOT NULL';
Assert::same(
reformat('SELECT * FROM [table] WHERE ([age] > 20) AND ([email] IS NOT NULL)'),
- $conn->translate('SELECT * FROM [table] WHERE %and', $where)
+ $conn->translate('SELECT * FROM [table] WHERE %and', $where),
);
@@ -139,14 +139,14 @@ Assert::same(
'sqlsrv' => "SELECT * FROM [table] WHERE ([age] IS NULL) AND ([email] = N'ahoj') AND ([id] IN (10, 20, 30))",
"SELECT * FROM [table] WHERE ([age] IS NULL) AND ([email] = 'ahoj') AND ([id] IN (10, 20, 30))",
]),
- $conn->translate('SELECT * FROM [table] WHERE %and', $where)
+ $conn->translate('SELECT * FROM [table] WHERE %and', $where),
);
$where = [];
Assert::same(
reformat('SELECT * FROM [table] WHERE 1=1'),
- $conn->translate('SELECT * FROM [table] WHERE %and', $where)
+ $conn->translate('SELECT * FROM [table] WHERE %and', $where),
);
@@ -161,7 +161,7 @@ $order = [
];
Assert::same(
reformat('SELECT * FROM [people] ORDER BY [field1] ASC, [field2] DESC, [field3] ASC, [field4] DESC, [field5] ASC, [field6] DESC'),
- $conn->translate('SELECT * FROM [people] ORDER BY %by', $order)
+ $conn->translate('SELECT * FROM [people] ORDER BY %by', $order),
);
@@ -172,7 +172,7 @@ Assert::same(
'sqlsrv' => 'SELECT * FROM [products] OFFSET 0 ROWS FETCH NEXT 2 ROWS ONLY',
'SELECT * FROM [products] LIMIT 2',
]),
- $conn->translate('SELECT * FROM [products] %lmt', 2)
+ $conn->translate('SELECT * FROM [products] %lmt', 2),
);
if ($config['system'] === 'odbc') {
@@ -186,7 +186,7 @@ if ($config['system'] === 'odbc') {
'sqlsrv' => 'SELECT * FROM [products] OFFSET 1 ROWS FETCH NEXT 2 ROWS ONLY',
'SELECT * FROM [products] LIMIT 2 OFFSET 1',
]),
- $conn->translate('SELECT * FROM [products] %lmt %ofs', 2, 1)
+ $conn->translate('SELECT * FROM [products] %lmt %ofs', 2, 1),
);
// with offset = 50
@@ -197,7 +197,7 @@ if ($config['system'] === 'odbc') {
'sqlsrv' => 'SELECT * FROM [products] OFFSET 50 ROWS',
'SELECT * FROM [products] LIMIT -1 OFFSET 50',
]),
- $conn->translate('SELECT * FROM [products] %ofs', 50)
+ $conn->translate('SELECT * FROM [products] %ofs', 50),
);
}
@@ -223,7 +223,7 @@ Assert::same(
'b8%d' => null,
'b9%t' => null,
'c1%t' => new DateTime('1212-09-26 16:51:34.0124'),
- ])
+ ]),
);
Assert::exception(function () use ($conn) {
@@ -247,13 +247,13 @@ if ($config['system'] === 'postgre') {
$conn->query('SET standard_conforming_strings = off');
Assert::same(
"SELECT * FROM products WHERE (title LIKE 'C%' AND title LIKE '%r') OR title LIKE '%a\n\\\\%\\\\_\\\\\\\\''\"%'",
- $conn->translate($args[0], $args[1], $args[2], $args[3])
+ $conn->translate($args[0], $args[1], $args[2], $args[3]),
);
$conn->query('SET standard_conforming_strings = on');
Assert::same(
"SELECT * FROM products WHERE (title LIKE 'C%' AND title LIKE '%r') OR title LIKE '%a\n\\%\\_\\\\''\"%'",
- $conn->translate($args[0], $args[1], $args[2], $args[3])
+ $conn->translate($args[0], $args[1], $args[2], $args[3]),
);
} elseif ($config['driver'] !== 'sqlite') { // sqlite2
Assert::same(
@@ -263,7 +263,7 @@ if ($config['system'] === 'postgre') {
'sqlsrv' => "SELECT * FROM products WHERE (title LIKE 'C%' AND title LIKE '%r') OR title LIKE '%a\n[%][_]\\''\"%'",
"SELECT * FROM products WHERE (title LIKE 'C%' AND title LIKE '%r') OR title LIKE '%a\\n\\%\\_\\\\\\\\\\'\"%'",
]),
- $conn->translate($args[0], $args[1], $args[2], $args[3])
+ $conn->translate($args[0], $args[1], $args[2], $args[3]),
);
}
@@ -274,38 +274,43 @@ $e = Assert::exception(function () use ($conn) {
Assert::same('SELECT **Alone quote**', $e->getSql());
Assert::match(
- reformat([
- 'mysql' => "SELECT DISTINCT HIGH_PRIORITY SQL_BUFFER_RESULT
-CONCAT(last_name, ', ', first_name) AS full_name
-GROUP BY `user`
-HAVING MAX(salary) > %i 123
-INTO OUTFILE '/tmp/result\\'.txt'
-FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\\\"'
-LINES TERMINATED BY '\\\\n'
-",
- 'sqlsrv' => "SELECT DISTINCT HIGH_PRIORITY SQL_BUFFER_RESULT
-CONCAT(last_name, N', ', first_name) AS full_name
-GROUP BY [user]
-HAVING MAX(salary) > %i 123
-INTO OUTFILE N'/tmp/result''.txt'
-FIELDS TERMINATED BY N',' OPTIONALLY ENCLOSED BY N'\"'
-LINES TERMINATED BY N'\\n'", "SELECT DISTINCT HIGH_PRIORITY SQL_BUFFER_RESULT
-CONCAT(last_name, ', ', first_name) AS full_name
-GROUP BY [user]
-HAVING MAX(salary) > %i 123
-INTO OUTFILE '/tmp/result''.txt'
-FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"'
-LINES TERMINATED BY '\\n'
-",
+ pattern: reformat([
+ 'mysql' => <<<'XX'
+ SELECT DISTINCT HIGH_PRIORITY SQL_BUFFER_RESULT
+ CONCAT(last_name, ', ', first_name) AS full_name
+ GROUP BY `user`
+ HAVING MAX(salary) > %i 123
+ INTO OUTFILE '/tmp/result\'.txt'
+ FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"'
+ LINES TERMINATED BY '\\n'
+ XX,
+ 'sqlsrv' => <<<'XX'
+ SELECT DISTINCT HIGH_PRIORITY SQL_BUFFER_RESULT
+ CONCAT(last_name, N', ', first_name) AS full_name
+ GROUP BY [user]
+ HAVING MAX(salary) > %i 123
+ INTO OUTFILE N'/tmp/result''.txt'
+ FIELDS TERMINATED BY N',' OPTIONALLY ENCLOSED BY N'"'
+ LINES TERMINATED BY N'\n'
+ XX,
+ <<<'XX'
+ SELECT DISTINCT HIGH_PRIORITY SQL_BUFFER_RESULT
+ CONCAT(last_name, ', ', first_name) AS full_name
+ GROUP BY [user]
+ HAVING MAX(salary) > %i 123
+ INTO OUTFILE '/tmp/result''.txt'
+ FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
+ LINES TERMINATED BY '\n'
+ XX,
]),
- $conn->translate('%sql', 'SELECT DISTINCT HIGH_PRIORITY SQL_BUFFER_RESULT
+ actual: $conn->translate('%sql', 'SELECT DISTINCT HIGH_PRIORITY SQL_BUFFER_RESULT
CONCAT(last_name, ", ", first_name) AS full_name
GROUP BY [user]
HAVING MAX(salary) > %i', 123, "
INTO OUTFILE '/tmp/result''.txt'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"'
LINES TERMINATED BY '\\n'
-")
+"),
);
@@ -330,114 +335,124 @@ $array5 = ['RAND()', '[col1] > [col2]'];
Assert::match(
- reformat([
- 'mysql' => "SELECT *
-FROM `db`.`table`
-WHERE (`test`.`a` LIKE '1995-03-01'
- OR `b1` IN ( 1, 2, 3 )
- OR `b2` IN ('1', '2', '3' )
- OR `b3` IN ( )
- OR `b4` IN ( 'one', 'two', 'three' )
- OR `b5` IN (`col1` AS `one`, `col2` AS `two`, `col3` AS `thr.ee` )
- OR `b6` IN ('one', 'two', 'thr.ee')
- OR `b7` IN (NULL)
- OR `b8` IN (RAND() `col1` > `col2` )
- OR `b9` IN (RAND(), [col1] > [col2] )
- OR `b10` IN ( )
- AND `c` = 'embedded \\' string'
- OR `d`=10
- OR `e`=NULL
- OR `true`= 1
- OR `false`= 0
- OR `str_null`=NULL
- OR `str_not_null`='hello'
-LIMIT 10",
- 'sqlsrv' => "SELECT *
-FROM [db].[table]
-WHERE ([test].[a] LIKE '1995-03-01'
- OR [b1] IN ( 1, 2, 3 )
- OR [b2] IN (N'1', N'2', N'3' )
- OR [b3] IN ( )
- OR [b4] IN ( N'one', N'two', N'three' )
- OR [b5] IN ([col1] AS [one], [col2] AS [two], [col3] AS [thr.ee] )
- OR [b6] IN (N'one', N'two', N'thr.ee')
- OR [b7] IN (NULL)
- OR [b8] IN (RAND() [col1] > [col2] )
- OR [b9] IN (RAND(), [col1] > [col2] )
- OR [b10] IN ( )
- AND [c] = N'embedded '' string'
- OR [d]=10
- OR [e]=NULL
- OR [true]= 1
- OR [false]= 0
- OR [str_null]=NULL
- OR [str_not_null]=N'hello'
-LIMIT 10",
- 'postgre' => 'SELECT *
-FROM "db"."table"
-WHERE ("test"."a" LIKE \'1995-03-01\'
- OR "b1" IN ( 1, 2, 3 )
- OR "b2" IN (\'1\', \'2\', \'3\' )
- OR "b3" IN ( )
- OR "b4" IN ( \'one\', \'two\', \'three\' )
- OR "b5" IN ("col1" AS "one", "col2" AS "two", "col3" AS "thr.ee" )
- OR "b6" IN (\'one\', \'two\', \'thr.ee\')
- OR "b7" IN (NULL)
- OR "b8" IN (RAND() "col1" > "col2" )
- OR "b9" IN (RAND(), [col1] > [col2] )
- OR "b10" IN ( )
- AND "c" = \'embedded \'\' string\'
- OR "d"=10
- OR "e"=NULL
- OR "true"= TRUE
- OR "false"= FALSE
- OR "str_null"=NULL
- OR "str_not_null"=\'hello\'
-LIMIT 10',
- 'odbc' => "SELECT *
-FROM [db].[table]
-WHERE ([test].[a] LIKE #03/01/1995#
- OR [b1] IN ( 1, 2, 3 )
- OR [b2] IN ('1', '2', '3' )
- OR [b3] IN ( )
- OR [b4] IN ( 'one', 'two', 'three' )
- OR [b5] IN ([col1] AS [one], [col2] AS [two], [col3] AS [thr.ee] )
- OR [b6] IN ('one', 'two', 'thr.ee')
- OR [b7] IN (NULL)
- OR [b8] IN (RAND() [col1] > [col2] )
- OR [b9] IN (RAND(), [col1] > [col2] )
- OR [b10] IN ( )
- AND [c] = 'embedded '' string'
- OR [d]=10
- OR [e]=NULL
- OR [true]= 1
- OR [false]= 0
- OR [str_null]=NULL
- OR [str_not_null]='hello'
-LIMIT 10",
- "SELECT *
-FROM [db].[table]
-WHERE ([test].[a] LIKE '1995-03-01'
- OR [b1] IN ( 1, 2, 3 )
- OR [b2] IN ('1', '2', '3' )
- OR [b3] IN ( )
- OR [b4] IN ( 'one', 'two', 'three' )
- OR [b5] IN ([col1] AS [one], [col2] AS [two], [col3] AS [thr.ee] )
- OR [b6] IN ('one', 'two', 'thr.ee')
- OR [b7] IN (NULL)
- OR [b8] IN (RAND() [col1] > [col2] )
- OR [b9] IN (RAND(), [col1] > [col2] )
- OR [b10] IN ( )
- AND [c] = 'embedded '' string'
- OR [d]=10
- OR [e]=NULL
- OR [true]= 1
- OR [false]= 0
- OR [str_null]=NULL
- OR [str_not_null]='hello'
-LIMIT 10",
+ pattern: reformat([
+ 'mysql' => <<<'XX'
+ SELECT *
+ FROM `db`.`table`
+ WHERE (`test`.`a` LIKE '1995-03-01'
+ OR `b1` IN ( 1, 2, 3 )
+ OR `b2` IN ('1', '2', '3' )
+ OR `b3` IN ( )
+ OR `b4` IN ( 'one', 'two', 'three' )
+ OR `b5` IN (`col1` AS `one`, `col2` AS `two`, `col3` AS `thr.ee` )
+ OR `b6` IN ('one', 'two', 'thr.ee')
+ OR `b7` IN (NULL)
+ OR `b8` IN (RAND() `col1` > `col2` )
+ OR `b9` IN (RAND(), [col1] > [col2] )
+ OR `b10` IN ( )
+ AND `c` = 'embedded \' string'
+ OR `d`=10
+ OR `e`=NULL
+ OR `true`= 1
+ OR `false`= 0
+ OR `str_null`=NULL
+ OR `str_not_null`='hello'
+ LIMIT 10
+ XX,
+ 'sqlsrv' => <<<'XX'
+ SELECT *
+ FROM [db].[table]
+ WHERE ([test].[a] LIKE '1995-03-01'
+ OR [b1] IN ( 1, 2, 3 )
+ OR [b2] IN (N'1', N'2', N'3' )
+ OR [b3] IN ( )
+ OR [b4] IN ( N'one', N'two', N'three' )
+ OR [b5] IN ([col1] AS [one], [col2] AS [two], [col3] AS [thr.ee] )
+ OR [b6] IN (N'one', N'two', N'thr.ee')
+ OR [b7] IN (NULL)
+ OR [b8] IN (RAND() [col1] > [col2] )
+ OR [b9] IN (RAND(), [col1] > [col2] )
+ OR [b10] IN ( )
+ AND [c] = N'embedded '' string'
+ OR [d]=10
+ OR [e]=NULL
+ OR [true]= 1
+ OR [false]= 0
+ OR [str_null]=NULL
+ OR [str_not_null]=N'hello'
+ LIMIT 10
+ XX,
+ 'postgre' => <<<'XX'
+ SELECT *
+ FROM "db"."table"
+ WHERE ("test"."a" LIKE '1995-03-01'
+ OR "b1" IN ( 1, 2, 3 )
+ OR "b2" IN ('1', '2', '3' )
+ OR "b3" IN ( )
+ OR "b4" IN ( 'one', 'two', 'three' )
+ OR "b5" IN ("col1" AS "one", "col2" AS "two", "col3" AS "thr.ee" )
+ OR "b6" IN ('one', 'two', 'thr.ee')
+ OR "b7" IN (NULL)
+ OR "b8" IN (RAND() "col1" > "col2" )
+ OR "b9" IN (RAND(), [col1] > [col2] )
+ OR "b10" IN ( )
+ AND "c" = 'embedded '' string'
+ OR "d"=10
+ OR "e"=NULL
+ OR "true"= TRUE
+ OR "false"= FALSE
+ OR "str_null"=NULL
+ OR "str_not_null"='hello'
+ LIMIT 10
+ XX,
+ 'odbc' => <<<'XX'
+ SELECT *
+ FROM [db].[table]
+ WHERE ([test].[a] LIKE #03/01/1995#
+ OR [b1] IN ( 1, 2, 3 )
+ OR [b2] IN ('1', '2', '3' )
+ OR [b3] IN ( )
+ OR [b4] IN ( 'one', 'two', 'three' )
+ OR [b5] IN ([col1] AS [one], [col2] AS [two], [col3] AS [thr.ee] )
+ OR [b6] IN ('one', 'two', 'thr.ee')
+ OR [b7] IN (NULL)
+ OR [b8] IN (RAND() [col1] > [col2] )
+ OR [b9] IN (RAND(), [col1] > [col2] )
+ OR [b10] IN ( )
+ AND [c] = 'embedded '' string'
+ OR [d]=10
+ OR [e]=NULL
+ OR [true]= 1
+ OR [false]= 0
+ OR [str_null]=NULL
+ OR [str_not_null]='hello'
+ LIMIT 10
+ XX,
+ <<<'XX'
+ SELECT *
+ FROM [db].[table]
+ WHERE ([test].[a] LIKE '1995-03-01'
+ OR [b1] IN ( 1, 2, 3 )
+ OR [b2] IN ('1', '2', '3' )
+ OR [b3] IN ( )
+ OR [b4] IN ( 'one', 'two', 'three' )
+ OR [b5] IN ([col1] AS [one], [col2] AS [two], [col3] AS [thr.ee] )
+ OR [b6] IN ('one', 'two', 'thr.ee')
+ OR [b7] IN (NULL)
+ OR [b8] IN (RAND() [col1] > [col2] )
+ OR [b9] IN (RAND(), [col1] > [col2] )
+ OR [b10] IN ( )
+ AND [c] = 'embedded '' string'
+ OR [d]=10
+ OR [e]=NULL
+ OR [true]= 1
+ OR [false]= 0
+ OR [str_null]=NULL
+ OR [str_not_null]='hello'
+ LIMIT 10
+ XX,
]),
- $conn->translate('SELECT *
+ actual: $conn->translate('SELECT *
FROM [db.table]
WHERE ([test.a] LIKE %d', '1995-03-01', '
OR [b1] IN (', $array1, ')
@@ -457,7 +472,7 @@ WHERE ([test.a] LIKE %d', '1995-03-01', '
OR [false]=', false, '
OR [str_null]=%sn', '', '
OR [str_not_null]=%sn', 'hello', '
-LIMIT 10')
+LIMIT 10'),
);
@@ -466,19 +481,19 @@ Assert::same(
'sqlsrv' => "TEST [cond] > 2 [cond2] = N'3' cond3 < RAND() 123",
"TEST [cond] > 2 [cond2] = '3' cond3 < RAND() 123",
]),
- $conn->translate('TEST %ex', ['[cond] > 2', '[cond2] = "3"', 'cond3 < RAND()'], 123)
+ $conn->translate('TEST %ex', ['[cond] > 2', '[cond2] = "3"', 'cond3 < RAND()'], 123),
);
Assert::same(
reformat('TEST ([cond] > 2) OR ([cond2] > 3) OR ([cond3] = 10 + 1)'),
- $conn->translate('TEST %or', ['`cond` > 2', ['[cond2] > %i', '3'], 'cond3%sql' => ['10 + 1']])
+ $conn->translate('TEST %or', ['`cond` > 2', ['[cond2] > %i', '3'], 'cond3%sql' => ['10 + 1']]),
);
Assert::same(
reformat('TEST ([cond] = 2) OR ([cond3] = RAND())'),
- $conn->translate('TEST %or', ['cond' => 2, 'cond3%sql' => 'RAND()'])
+ $conn->translate('TEST %or', ['cond' => 2, 'cond3%sql' => 'RAND()']),
);
@@ -487,7 +502,7 @@ Assert::same(
'sqlsrv' => "TEST ([cond1] 3) OR ([cond2] RAND()) OR ([cond3] LIKE N'string')",
"TEST ([cond1] 3) OR ([cond2] RAND()) OR ([cond3] LIKE 'string')",
]),
- $conn->translate('TEST %or', ['cond1%ex' => 3, 'cond2%ex' => 'RAND()', 'cond3%ex' => ['LIKE %s', 'string']])
+ $conn->translate('TEST %or', ['cond1%ex' => 3, 'cond2%ex' => 'RAND()', 'cond3%ex' => ['LIKE %s', 'string']]),
);
@@ -497,7 +512,7 @@ Assert::same(
'sqlsrv' => 'SELECT * FROM [test] WHERE [id] LIKE N\'%d%t\' OFFSET 0 ROWS FETCH NEXT 10 ROWS ONLY',
'SELECT * FROM [test] WHERE [id] LIKE \'%d%t\' LIMIT 10',
]),
- $conn->translate("SELECT * FROM [test] WHERE %n LIKE '%d%t' %lmt", 'id', 10)
+ $conn->translate("SELECT * FROM [test] WHERE %n LIKE '%d%t' %lmt", 'id', 10),
);
@@ -506,13 +521,13 @@ $where = [
];
Assert::same(
reformat('SELECT * FROM [tablename] WHERE ([tablename].[column] = 1)'),
- $conn->translate('SELECT * FROM [tablename] WHERE %and', $where)
+ $conn->translate('SELECT * FROM [tablename] WHERE %and', $where),
);
Assert::same(
reformat('SELECT FROM ...'),
- $conn->translate('SELECT FROM ... %lmt', null)
+ $conn->translate('SELECT FROM ... %lmt', null),
);
Assert::same(
@@ -520,7 +535,7 @@ Assert::same(
'sqlsrv' => "SELECT N'%i'",
"SELECT '%i'",
]),
- $conn->translate("SELECT '%i'")
+ $conn->translate("SELECT '%i'"),
);
Assert::same(
@@ -528,7 +543,7 @@ Assert::same(
'sqlsrv' => "SELECT N'%i'",
"SELECT '%i'",
]),
- $conn->translate('SELECT "%i"')
+ $conn->translate('SELECT "%i"'),
);
@@ -543,7 +558,7 @@ Assert::same(
], [
'product_id' => 1,
'title' => new Dibi\Expression('SHA1(%s)', 'Test product'),
- ])
+ ]),
);
Assert::same(
@@ -554,7 +569,7 @@ Assert::same(
$conn->translate('UPDATE [products]', [
'product_id' => 1,
'title' => new Dibi\Expression('SHA1(%s)', 'Test product'),
- ])
+ ]),
);
Assert::same(
@@ -565,7 +580,7 @@ Assert::same(
$conn->translate('UPDATE [products]', [
'product_id' => 1,
'title' => new Dibi\Expression('SHA1(%s)', 'Test product'),
- ])
+ ]),
);
Assert::same(
@@ -576,7 +591,7 @@ Assert::same(
$conn->translate('SELECT * FROM [products] WHERE', [
'product_id' => 1,
'title' => new Dibi\Expression('SHA1(%s)', 'Test product'),
- ])
+ ]),
);
@@ -588,7 +603,7 @@ Assert::same(
'top' => 2,
]),
new Dibi\Expression('number < %i', 100),
- ])
+ ]),
);
@@ -613,7 +628,7 @@ Assert::same(
'sqlsrv' => "INSERT INTO test ([id], [text], [num]) VALUES (1, N'ahoj', 1), (2, N'jak', -1), (3, N'se', 10), (4, SUM(5), 1)",
"INSERT INTO test ([id], [text], [num]) VALUES (1, 'ahoj', 1), (2, 'jak', -1), (3, 'se', 10), (4, SUM(5), 1)",
]),
- $conn->translate('INSERT INTO test %m', $array6)
+ $conn->translate('INSERT INTO test %m', $array6),
);
@@ -624,12 +639,12 @@ $by = [
Assert::same(
reformat('SELECT * FROM table ORDER BY funkce(nazev_pole) ASC, [jine_pole] DESC'),
- $conn->translate('SELECT * FROM table ORDER BY %by', $by)
+ $conn->translate('SELECT * FROM table ORDER BY %by', $by),
);
Assert::same(
reformat('INSERT INTO [test].*'),
- $conn->translate('INSERT INTO [test.*]')
+ $conn->translate('INSERT INTO [test.*]'),
);
Assert::exception(function () use ($conn) {
@@ -643,23 +658,23 @@ Assert::exception(function () use ($conn) {
Assert::same(
reformat('SELECT * FROM table'),
- $conn->translate('SELECT', new Dibi\Literal('* FROM table'))
+ $conn->translate('SELECT', new Dibi\Literal('* FROM table')),
);
Assert::same(
reformat('SELECT * FROM table'),
- $conn->translate('SELECT %SQL', new Dibi\Literal('* FROM table'))
+ $conn->translate('SELECT %SQL', new Dibi\Literal('* FROM table')),
);
Assert::same(
reformat('SELECT * FROM table'),
- $conn->translate(new Dibi\Literal('SELECT * FROM table'))
+ $conn->translate(new Dibi\Literal('SELECT * FROM table')),
);
Assert::same(
reformat('SELECT [a].[b] AS [c.d]'),
- $conn->translate('SELECT %n AS %N', 'a.b', 'c.d')
+ $conn->translate('SELECT %n AS %N', 'a.b', 'c.d'),
);
@@ -677,5 +692,5 @@ Assert::same(
'spec2%f' => 1000.00,
'spec3%i' => 10000,
'spec4' => 10000,
- ], 'WHERE [price]=%f', 123.5)
+ ], 'WHERE [price]=%f', 123.5),
);