From 973e92e99f67c7f2a04e47c4c312131063ce1b2f Mon Sep 17 00:00:00 2001 From: "Timothy J. Warren" Date: Fri, 20 Jan 2023 10:33:43 -0500 Subject: [PATCH] Fix type issues --- src/Drivers/AbstractDriver.php | 6 ++++++ src/Drivers/DriverInterface.php | 6 ++++++ src/Drivers/Mysql/SQL.php | 6 ++++++ src/Drivers/Sqlite/Driver.php | 2 -- src/JoinType.php | 12 ++++++++++- src/LikeType.php | 9 ++++++++ src/QueryBuilder.php | 38 ++++++++++++++++----------------- src/QueryBuilderBase.php | 9 ++++---- src/QueryBuilderInterface.php | 10 ++++----- tests/BaseDriverTest.php | 6 +++++- tests/BaseQueryBuilderTest.php | 10 +++++++++ 11 files changed, 81 insertions(+), 33 deletions(-) diff --git a/src/Drivers/AbstractDriver.php b/src/Drivers/AbstractDriver.php index d343dde..19758f8 100644 --- a/src/Drivers/AbstractDriver.php +++ b/src/Drivers/AbstractDriver.php @@ -339,6 +339,8 @@ abstract class AbstractDriver /** * Return list of functions for the current database + * + * @deprecated Will be removed in next version */ public function getFunctions(): ?array { @@ -347,6 +349,8 @@ abstract class AbstractDriver /** * Return list of stored procedures for the current database + * + * @deprecated Will be removed in next version */ public function getProcedures(): ?array { @@ -355,6 +359,8 @@ abstract class AbstractDriver /** * Return list of triggers for the current database + * + * @deprecated Will be removed in next version */ public function getTriggers(): ?array { diff --git a/src/Drivers/DriverInterface.php b/src/Drivers/DriverInterface.php index caa7b38..e3f0088 100644 --- a/src/Drivers/DriverInterface.php +++ b/src/Drivers/DriverInterface.php @@ -102,16 +102,22 @@ interface DriverInterface /* extends the interface of PDO */ { /** * Return list of functions for the current database + * + * @deprecated Will be removed in next version */ public function getFunctions(): ?array; /** * Return list of stored procedures for the current database + * + * @deprecated Will be removed in next version */ public function getProcedures(): ?array; /** * Return list of triggers for the current database + * + * @deprecated Will be removed in next version */ public function getTriggers(): ?array; diff --git a/src/Drivers/Mysql/SQL.php b/src/Drivers/Mysql/SQL.php index d883b8a..552a9cd 100644 --- a/src/Drivers/Mysql/SQL.php +++ b/src/Drivers/Mysql/SQL.php @@ -98,6 +98,8 @@ SQL; /** * Returns sql to list triggers + * + * @codeCoverageIgnore */ public function triggerList(): string { @@ -106,6 +108,8 @@ SQL; /** * Return sql to list functions + * + * @codeCoverageIgnore */ public function functionList(): string { @@ -114,6 +118,8 @@ SQL; /** * Return sql to list stored procedures + * + * @codeCoverageIgnore */ public function procedureList(): string { diff --git a/src/Drivers/Sqlite/Driver.php b/src/Drivers/Sqlite/Driver.php index 8a6ba1b..5b64ce9 100644 --- a/src/Drivers/Sqlite/Driver.php +++ b/src/Drivers/Sqlite/Driver.php @@ -64,8 +64,6 @@ class Driver extends AbstractDriver { /** * Retrieve foreign keys for the table - * - * @return array */ public function getFks(string $table): array { diff --git a/src/JoinType.php b/src/JoinType.php index 9cbd744..c173f58 100644 --- a/src/JoinType.php +++ b/src/JoinType.php @@ -24,4 +24,14 @@ enum JoinType: string { case OUTER = 'outer'; case LEFT = 'left'; case RIGHT = 'right'; -} \ No newline at end of file + + public static function parse(string|self $val): self { + if ($val instanceof self) + { + return $val; + } + + return self::from($val); + } +} + diff --git a/src/LikeType.php b/src/LikeType.php index c3950d1..e4e9424 100644 --- a/src/LikeType.php +++ b/src/LikeType.php @@ -22,4 +22,13 @@ enum LikeType: string { case BEFORE = 'before'; case AFTER = 'after'; case BOTH = 'both'; + + public static function parse(string|self $val): self { + if ($val instanceof self) + { + return $val; + } + + return self::from($val); + } } \ No newline at end of file diff --git a/src/QueryBuilder.php b/src/QueryBuilder.php index eb9e61c..e34ee3a 100644 --- a/src/QueryBuilder.php +++ b/src/QueryBuilder.php @@ -188,33 +188,33 @@ class QueryBuilder extends QueryBuilderBase implements QueryBuilderInterface { /** * Creates a Like clause in the sql statement */ - public function like(string $field, mixed $val, LikeType $pos=LikeType::BOTH): self + public function like(string $field, mixed $values, LikeType|string $pos=LikeType::BOTH): self { - return $this->_like($field, $val, $pos); + return $this->_like($field, $values, LikeType::parse($pos)); } /** * Generates an OR Like clause */ - public function orLike(string $field, mixed $val, LikeType $pos=LikeType::BOTH): self + public function orLike(string $field, mixed $values, LikeType|string $pos=LikeType::BOTH): self { - return $this->_like($field, $val, $pos, 'LIKE', 'OR'); + return $this->_like($field, $values, LikeType::parse($pos), 'LIKE', 'OR'); } /** * Generates a NOT LIKE clause */ - public function notLike(string $field, mixed $val, LikeType $pos=LikeType::BOTH): self + public function notLike(string $field, mixed $values, LikeType|string $pos=LikeType::BOTH): self { - return $this->_like($field, $val, $pos, 'NOT LIKE'); + return $this->_like($field, $values, LikeType::parse($pos), 'NOT LIKE'); } /** * Generates a OR NOT LIKE clause */ - public function orNotLike(string $field, mixed $val, LikeType $pos=LikeType::BOTH): self + public function orNotLike(string $field, mixed $values, LikeType|string $pos=LikeType::BOTH): self { - return $this->_like($field, $val, $pos, 'NOT LIKE', 'OR'); + return $this->_like($field, $values, LikeType::parse($pos), 'NOT LIKE', 'OR'); } // -------------------------------------------------------------------------- @@ -223,17 +223,17 @@ class QueryBuilder extends QueryBuilderBase implements QueryBuilderInterface { /** * Generates a 'Having' clause */ - public function having(mixed $key, mixed $val=[]): self + public function having(mixed $key, mixed $values=[]): self { - return $this->_having($key, $val); + return $this->_having($key, $values); } /** * Generates a 'Having' clause prefixed with 'OR' */ - public function orHaving(mixed $key, mixed $val=[]): self + public function orHaving(mixed $key, mixed $values=[]): self { - return $this->_having($key, $val, 'OR'); + return $this->_having($key, $values, 'OR'); } // -------------------------------------------------------------------------- @@ -244,17 +244,17 @@ class QueryBuilder extends QueryBuilderBase implements QueryBuilderInterface { * Note: this function works with key / value, or a * passed array with key / value pairs */ - public function where(mixed $key, mixed $val=[]): self + public function where(mixed $key, mixed $values=[]): self { - return $this->_whereString($key, $val); + return $this->_whereString($key, $values); } /** * Where clause prefixed with "OR" */ - public function orWhere(mixed $key, mixed $val=[]): self + public function orWhere(mixed $key, mixed $values=[]): self { - return $this->_whereString($key, $val, 'OR'); + return $this->_whereString($key, $values, 'OR'); } /** @@ -323,7 +323,7 @@ class QueryBuilder extends QueryBuilderBase implements QueryBuilderInterface { /** * Creates a join phrase in a compiled query */ - public function join(string $table, string $condition, JoinType $type=JoinType::INNER): self + public function join(string $table, string $condition, JoinType|string $type=JoinType::INNER): self { // Prefix and quote table name $tableArr = explode(' ', mb_trim($table)); @@ -335,7 +335,7 @@ class QueryBuilder extends QueryBuilderBase implements QueryBuilderInterface { $parsedCondition = $this->parser->compileJoin($condition); $condition = $table . ' ON ' . $parsedCondition; - $this->state->appendMap("\n" . strtoupper($type->value) . ' JOIN ', $condition, MapType::JOIN); + $this->state->appendMap("\n" . strtoupper(JoinType::parse($type)->value) . ' JOIN ', $condition, MapType::JOIN); return $this; } @@ -490,7 +490,7 @@ class QueryBuilder extends QueryBuilderBase implements QueryBuilderInterface { $this->limit($limit, $offset); } - return $this->_run('get', $table); + return $this->_run(QueryType::SELECT, $table); } /** diff --git a/src/QueryBuilderBase.php b/src/QueryBuilderBase.php index a2eb076..64bebf6 100644 --- a/src/QueryBuilderBase.php +++ b/src/QueryBuilderBase.php @@ -33,15 +33,12 @@ use Query\Drivers\DriverInterface; * @method getColumns(string $table): array | null * @method getDbs(): array | null * @method getFks(string $table): array | null - * @method getFunctions(): array | null * @method getIndexes(string $table): array | null * @method getLastQuery(): string - * @method getProcedures(): array | null * @method getSchemas(): array | null * @method getSequences(): array | null * @method getSystemTables(): array | null * @method getTables(): array - * @method getTriggers(): array | null * @method getTypes(): array | null * @method getUtil(): \Query\Drivers\AbstractUtil * @method getVersion(): string @@ -284,10 +281,12 @@ class QueryBuilderBase { if (empty($queryMap) || ( ! regexInArray($conjunctionList, "/^ ?\n?WHERE/i"))) { $conj = "\nWHERE "; - } elseif ($lastItem['type'] === 'group_start') + } + elseif ($lastItem['type'] === MapType::GROUP_START) { $conj = ''; - } else + } + else { $conj = " {$defaultConj} "; } diff --git a/src/QueryBuilderInterface.php b/src/QueryBuilderInterface.php index af200af..77a0b35 100644 --- a/src/QueryBuilderInterface.php +++ b/src/QueryBuilderInterface.php @@ -127,28 +127,28 @@ interface QueryBuilderInterface { * * @param mixed $values */ - public function like(string $field, mixed $values, LikeType $pos=LikeType::BOTH): self; + public function like(string $field, mixed $values, LikeType|string $pos=LikeType::BOTH): self; /** * Generates an OR Like clause * * @param mixed $values */ - public function orLike(string $field, mixed $values, LikeType $pos=LikeType::BOTH): self; + public function orLike(string $field, mixed $values, LikeType|string $pos=LikeType::BOTH): self; /** * Generates a NOT LIKE clause * * @param mixed $values */ - public function notLike(string $field, mixed $values, LikeType $pos=LikeType::BOTH): self; + public function notLike(string $field, mixed $values, LikeType|string $pos=LikeType::BOTH): self; /** * Generates a OR NOT LIKE clause * * @param mixed $values */ - public function orNotLike(string $field, mixed $values, LikeType $pos=LikeType::BOTH): self; + public function orNotLike(string $field, mixed $values, LikeType|string $pos=LikeType::BOTH): self; // -------------------------------------------------------------------------- // ! Having methods @@ -236,7 +236,7 @@ interface QueryBuilderInterface { /** * Creates a join phrase in a compiled query */ - public function join(string $table, string $condition, JoinType $type=JoinType::INNER): self; + public function join(string $table, string $condition, JoinType|string $type=JoinType::INNER): self; /** * Group the results by the selected field(s) diff --git a/tests/BaseDriverTest.php b/tests/BaseDriverTest.php index f20acff..ecf2412 100644 --- a/tests/BaseDriverTest.php +++ b/tests/BaseDriverTest.php @@ -101,7 +101,7 @@ abstract class BaseDriverTest extends TestCase { public function testGetTriggers(): void { - // @TODO standardize trigger output for different databases + $this->markTestSkipped('Deprecated'); $triggers = self::$db->getTriggers(); $this->assertTrue(\is_array($triggers)); @@ -122,12 +122,16 @@ abstract class BaseDriverTest extends TestCase { public function testGetProcedures(): void { + $this->markTestSkipped('Deprecated'); + $procedures = self::$db->getProcedures(); $this->assertTrue(\is_array($procedures)); } public function testGetFunctions(): void { + $this->markTestSkipped('Deprecated'); + $funcs = self::$db->getFunctions(); $this->assertTrue(\is_array($funcs)); } diff --git a/tests/BaseQueryBuilderTest.php b/tests/BaseQueryBuilderTest.php index 3760e83..d6886ab 100644 --- a/tests/BaseQueryBuilderTest.php +++ b/tests/BaseQueryBuilderTest.php @@ -201,6 +201,16 @@ abstract class BaseQueryBuilderTest extends TestCase { $this->assertIsA($query, 'PDOStatement'); } + public function testSelectTableGet(): void + { + $query = self::$db->select('id, key as k, val') + ->table('test ct') + ->where('id >', 1) + ->get(); + + $this->assertIsA($query, 'PDOStatement'); + } + public function testSelectFromLimitGet(): void { $query = self::$db->select('id, key as k, val')