Fix type issues

This commit is contained in:
Timothy Warren 2023-01-20 10:33:43 -05:00
parent d80f26859e
commit 973e92e99f
11 changed files with 81 additions and 33 deletions

View File

@ -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
{

View File

@ -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;

View File

@ -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
{

View File

@ -64,8 +64,6 @@ class Driver extends AbstractDriver {
/**
* Retrieve foreign keys for the table
*
* @return array<int, array{child_column: mixed, parent_table: mixed, parent_column: mixed, update: mixed, delete: mixed}>
*/
public function getFks(string $table): array
{

View File

@ -24,4 +24,14 @@ enum JoinType: string {
case OUTER = 'outer';
case LEFT = 'left';
case RIGHT = 'right';
}
public static function parse(string|self $val): self {
if ($val instanceof self)
{
return $val;
}
return self::from($val);
}
}

View File

@ -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);
}
}

View File

@ -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);
}
/**

View File

@ -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} ";
}

View File

@ -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)

View File

@ -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));
}

View File

@ -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')