Moved DbTools::detectType to DbType::detect.
This commit is contained in:
parent
010045b14a
commit
f137dfaab5
8 changed files with 57 additions and 58 deletions
2
VERSION
2
VERSION
|
@ -1 +1 @@
|
|||
0.2410.191502
|
||||
0.2410.191515
|
||||
|
|
|
@ -24,7 +24,7 @@ interface DbStatement {
|
|||
*
|
||||
* @param int $ordinal Index of the target parameter.
|
||||
* @param mixed $value Value to assign to the parameter.
|
||||
* @param int $type Type of the value, if left to DbType::AUTO DbTools::detectType will be used on $value.
|
||||
* @param int $type Type of the value, if left to DbType::AUTO DbType::detect will be used on $value.
|
||||
* @throws InvalidArgumentException If $ordinal exceeds bounds.
|
||||
*/
|
||||
function addParameter(int $ordinal, mixed $value, int $type = DbType::AUTO): void;
|
||||
|
@ -36,7 +36,7 @@ interface DbStatement {
|
|||
* Overwriting lower ordinals than the current cursor should be fine, but your mileage may vary.
|
||||
*
|
||||
* @param mixed $value Value to assign to the parameter.
|
||||
* @param int $type Type of the value, if left to DbType::AUTO DbTools::detectType will be used on $value.
|
||||
* @param int $type Type of the value, if left to DbType::AUTO DbType::detect will be used on $value.
|
||||
* @throws RuntimeException If all parameters have already been specified.
|
||||
*/
|
||||
function nextParameter(mixed $value, int $type = DbType::AUTO): void;
|
||||
|
|
|
@ -11,24 +11,6 @@ use Countable;
|
|||
* Common database actions.
|
||||
*/
|
||||
final class DbTools {
|
||||
/**
|
||||
* Detects the DbType of the passed argument. Should be used for DbType::AUTO.
|
||||
*
|
||||
* @param mixed $value A value of unknown type.
|
||||
* @return int DbType of the value passed in the argument.
|
||||
*/
|
||||
public static function detectType(mixed $value): int {
|
||||
if(is_null($value))
|
||||
return DbType::NULL;
|
||||
if(is_float($value))
|
||||
return DbType::FLOAT;
|
||||
if(is_int($value))
|
||||
return DbType::INTEGER;
|
||||
if(is_resource($value))
|
||||
return DbType::BLOB;
|
||||
return DbType::STRING;
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs a partial query for prepared statements of lists.
|
||||
*
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<?php
|
||||
// DbType.php
|
||||
// Created: 2021-05-02
|
||||
// Updated: 2024-10-04
|
||||
// Updated: 2024-10-19
|
||||
|
||||
namespace Index\Db;
|
||||
|
||||
|
@ -10,7 +10,7 @@ namespace Index\Db;
|
|||
*/
|
||||
final class DbType {
|
||||
/**
|
||||
* Automatically detect the type. Should be used in combination with DbTools::detectType.
|
||||
* Automatically detect the type. Should be used in combination with DbType::detect.
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
|
@ -50,4 +50,22 @@ final class DbType {
|
|||
* @var int
|
||||
*/
|
||||
public const BLOB = 5;
|
||||
|
||||
/**
|
||||
* Detects the DbType of the passed argument. Should be used for DbType::AUTO.
|
||||
*
|
||||
* @param mixed $value A value of unknown type.
|
||||
* @return int DbType of the value passed in the argument.
|
||||
*/
|
||||
public static function detect(mixed $value): int {
|
||||
if(is_null($value))
|
||||
return self::NULL;
|
||||
if(is_float($value))
|
||||
return self::FLOAT;
|
||||
if(is_int($value))
|
||||
return self::INTEGER;
|
||||
if(is_resource($value))
|
||||
return self::BLOB;
|
||||
return self::STRING;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
<?php
|
||||
// MariaDbParameter.php
|
||||
// Created: 2021-05-02
|
||||
// Updated: 2024-10-04
|
||||
// Updated: 2024-10-19
|
||||
|
||||
namespace Index\Db\MariaDb;
|
||||
|
||||
use Index\Db\{DbTools,DbType};
|
||||
use Index\Db\DbType;
|
||||
|
||||
/**
|
||||
* Represents a bound parameter.
|
||||
|
@ -25,7 +25,7 @@ class MariaDbParameter {
|
|||
private mixed $value
|
||||
) {
|
||||
if($type == DbType::AUTO)
|
||||
$type = DbTools::detectType($value);
|
||||
$type = DbType::detect($value);
|
||||
if($type === DbType::NULL)
|
||||
$value = null;
|
||||
}
|
||||
|
|
|
@ -9,7 +9,7 @@ use SQLite3Result;
|
|||
use SQLite3Stmt;
|
||||
use InvalidArgumentException;
|
||||
use RuntimeException;
|
||||
use Index\Db\{DbTools,DbType,DbStatement,DbResult};
|
||||
use Index\Db\{DbType,DbStatement,DbResult};
|
||||
|
||||
/**
|
||||
* Represents a prepared SQLite SQL statement.
|
||||
|
@ -47,7 +47,7 @@ class SqliteStatement implements DbStatement {
|
|||
|
||||
private function bindParameter(int $ordinal, mixed $value, int $type): void {
|
||||
if($type === DbType::AUTO)
|
||||
$type = DbTools::detectType($value);
|
||||
$type = DbType::detect($value);
|
||||
if($type === DbType::NULL)
|
||||
$value = null;
|
||||
|
||||
|
|
|
@ -1,30 +0,0 @@
|
|||
<?php
|
||||
// DbToolsTest.php
|
||||
// Created: 2021-04-28
|
||||
// Updated: 2024-10-16
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use PHPUnit\Framework\Attributes\CoversClass;
|
||||
use Index\Db\{DbTools,DbType};
|
||||
|
||||
#[CoversClass(DbTools::class)]
|
||||
#[CoversClass(DbType::class)]
|
||||
final class DbToolsTest extends TestCase {
|
||||
public function testDetectType(): void {
|
||||
$this->assertEquals(DbType::NULL, DbTools::detectType(null));
|
||||
$this->assertEquals(DbType::INTEGER, DbTools::detectType(12345));
|
||||
$this->assertEquals(DbType::FLOAT, DbTools::detectType(123.45));
|
||||
$this->assertEquals(DbType::STRING, DbTools::detectType('This is a string.'));
|
||||
|
||||
$blob = fopen('php://memory', 'r+b');
|
||||
if($blob === false)
|
||||
throw new RuntimeException('failed to fopen a memory stream');
|
||||
|
||||
fwrite($blob, 'This is a string inside a memory stream.');
|
||||
fseek($blob, 0);
|
||||
|
||||
$this->assertEquals(DbType::BLOB, DbTools::detectType($blob));
|
||||
}
|
||||
}
|
29
tests/DbTypeTest.php
Normal file
29
tests/DbTypeTest.php
Normal file
|
@ -0,0 +1,29 @@
|
|||
<?php
|
||||
// DbTypeTest.php
|
||||
// Created: 2021-04-28
|
||||
// Updated: 2024-10-19
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use PHPUnit\Framework\Attributes\CoversClass;
|
||||
use Index\Db\DbType;
|
||||
|
||||
#[CoversClass(DbType::class)]
|
||||
final class DbTypeTest extends TestCase {
|
||||
public function testDetectType(): void {
|
||||
$this->assertEquals(DbType::NULL, DbType::detect(null));
|
||||
$this->assertEquals(DbType::INTEGER, DbType::detect(12345));
|
||||
$this->assertEquals(DbType::FLOAT, DbType::detect(123.45));
|
||||
$this->assertEquals(DbType::STRING, DbType::detect('This is a string.'));
|
||||
|
||||
$blob = fopen('php://memory', 'r+b');
|
||||
if($blob === false)
|
||||
throw new RuntimeException('failed to fopen a memory stream');
|
||||
|
||||
fwrite($blob, 'This is a string inside a memory stream.');
|
||||
fseek($blob, 0);
|
||||
|
||||
$this->assertEquals(DbType::BLOB, DbType::detect($blob));
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue