Refactor fake Enums to 'real' ones

This commit is contained in:
Timothy Warren 2023-01-13 13:14:28 -05:00
parent 03f8fe30d0
commit b0ecaa87e4
22 changed files with 104 additions and 275 deletions

View File

@ -14,7 +14,10 @@ services:
php: php:
- nightly - nightly
- '7.4' # - '8.0'
- '8.1'
- '8.2'
# - '7.4'
# - '8.0' # - '8.0'

View File

@ -91,10 +91,10 @@ final class ConnectionManager {
/** /**
* Returns the connection specified by the name given * Returns the connection specified by the name given
* *
* @param string|array|object $name * @param string $name
* @throws Exception\NonExistentConnectionException * @throws Exception\NonExistentConnectionException
*/ */
public function getConnection($name = ''): QueryBuilderInterface public function getConnection(string $name = ''): QueryBuilderInterface
{ {
// If the parameter is a string, use it as an array index // If the parameter is a string, use it as an array index
if (is_scalar($name) && isset($this->connections[$name])) if (is_scalar($name) && isset($this->connections[$name]))
@ -115,9 +115,9 @@ final class ConnectionManager {
* Parse the passed parameters and return a connection * Parse the passed parameters and return a connection
* *
* @param array|object $params * @param array|object $params
* @throws Exception\BadDBDriverException * @return QueryBuilderInterface
*/ */
public function connect($params): QueryBuilderInterface public function connect(array|object $params): QueryBuilderInterface
{ {
[$dsn, $dbType, $params, $options] = $this->parseParams($params); [$dsn, $dbType, $params, $options] = $this->parseParams($params);
@ -157,9 +157,9 @@ final class ConnectionManager {
* *
* @param array|object $rawParams * @param array|object $rawParams
* @throws Exception\BadDBDriverException * @throws Exception\BadDBDriverException
* @return mixed[] * @return array
*/ */
public function parseParams($rawParams): array public function parseParams(array|object $rawParams): array
{ {
$params = (object) $rawParams; $params = (object) $rawParams;
$params->type = strtolower($params->type); $params->type = strtolower($params->type);

View File

@ -170,9 +170,6 @@ abstract class AbstractDriver
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
/** /**
* Simplifies prepared statements for database queries * Simplifies prepared statements for database queries
*
* @return PDOStatement | FALSE
* @throws InvalidArgumentException
*/ */
public function prepareQuery(string $sql, array $data): PDOStatement public function prepareQuery(string $sql, array $data): PDOStatement
{ {
@ -259,7 +256,7 @@ abstract class AbstractDriver
* *
* @param mixed $identifier * @param mixed $identifier
*/ */
public function quoteIdent($identifier): string|array public function quoteIdent(string|array $identifier): string|array
{ {
if (is_array($identifier)) if (is_array($identifier))
{ {
@ -299,8 +296,6 @@ abstract class AbstractDriver
/** /**
* Return schemas for databases that list them * Return schemas for databases that list them
*
* @return array
*/ */
public function getSchemas(): ?array public function getSchemas(): ?array
{ {
@ -310,8 +305,6 @@ abstract class AbstractDriver
/** /**
* Return list of tables for the current database * Return list of tables for the current database
*
* @return array
*/ */
public function getTables(): ?array public function getTables(): ?array
{ {
@ -322,8 +315,6 @@ abstract class AbstractDriver
/** /**
* Return list of dbs for the current connection, if possible * Return list of dbs for the current connection, if possible
*
* @return array
*/ */
public function getDbs(): ?array public function getDbs(): ?array
{ {
@ -332,8 +323,6 @@ abstract class AbstractDriver
/** /**
* Return list of views for the current database * Return list of views for the current database
*
* @return array
*/ */
public function getViews(): ?array public function getViews(): ?array
{ {
@ -344,8 +333,6 @@ abstract class AbstractDriver
/** /**
* Return list of sequences for the current database, if they exist * Return list of sequences for the current database, if they exist
*
* @return array
*/ */
public function getSequences(): ?array public function getSequences(): ?array
{ {
@ -354,8 +341,6 @@ abstract class AbstractDriver
/** /**
* Return list of functions for the current database * Return list of functions for the current database
*
* @return array
*/ */
public function getFunctions(): ?array public function getFunctions(): ?array
{ {
@ -364,8 +349,6 @@ abstract class AbstractDriver
/** /**
* Return list of stored procedures for the current database * Return list of stored procedures for the current database
*
* @return array
*/ */
public function getProcedures(): ?array public function getProcedures(): ?array
{ {
@ -374,8 +357,6 @@ abstract class AbstractDriver
/** /**
* Return list of triggers for the current database * Return list of triggers for the current database
*
* @return array
*/ */
public function getTriggers(): ?array public function getTriggers(): ?array
{ {
@ -385,8 +366,6 @@ abstract class AbstractDriver
/** /**
* Retrieves an array of non-user-created tables for * Retrieves an array of non-user-created tables for
* the connection/database * the connection/database
*
* @return array
*/ */
public function getSystemTables(): ?array public function getSystemTables(): ?array
{ {
@ -395,8 +374,6 @@ abstract class AbstractDriver
/** /**
* Retrieve column information for the current database table * Retrieve column information for the current database table
*
* @return array
*/ */
public function getColumns(string $table): ?array public function getColumns(string $table): ?array
{ {
@ -405,8 +382,6 @@ abstract class AbstractDriver
/** /**
* Retrieve foreign keys for the table * Retrieve foreign keys for the table
*
* @return array
*/ */
public function getFks(string $table): ?array public function getFks(string $table): ?array
{ {
@ -415,8 +390,6 @@ abstract class AbstractDriver
/** /**
* Retrieve indexes for the table * Retrieve indexes for the table
*
* @return array
*/ */
public function getIndexes(string $table): ?array public function getIndexes(string $table): ?array
{ {
@ -425,8 +398,6 @@ abstract class AbstractDriver
/** /**
* Retrieve list of data types for the database * Retrieve list of data types for the database
*
* @return array
*/ */
public function getTypes(): ?array public function getTypes(): ?array
{ {
@ -443,11 +414,8 @@ abstract class AbstractDriver
/** /**
* Method to simplify retrieving db results for meta-data queries * Method to simplify retrieving db results for meta-data queries
*
* @param string|array|null $query
* @param bool $filteredIndex
*/ */
public function driverQuery($query, $filteredIndex=TRUE): ?array public function driverQuery(string|array $query, bool $filteredIndex=TRUE): ?array
{ {
// Call the appropriate method, if it exists // Call the appropriate method, if it exists
if (is_string($query) && method_exists($this->driverSQL, $query)) if (is_string($query) && method_exists($this->driverSQL, $query))
@ -628,7 +596,7 @@ abstract class AbstractDriver
* @param mixed $str * @param mixed $str
* @return mixed * @return mixed
*/ */
public function _quote($str) public function _quote(mixed $str): mixed
{ {
// Check that the current value is a string, // Check that the current value is a string,
// and is not already quoted before quoting // and is not already quoted before quoting

View File

@ -22,8 +22,6 @@ abstract class AbstractSQL implements SQLInterface {
/** /**
* Limit clause * Limit clause
*
* @param int $offset
*/ */
public function limit(string $sql, int $limit, ?int $offset=NULL): string public function limit(string $sql, int $limit, ?int $offset=NULL): string
{ {

View File

@ -23,7 +23,7 @@ abstract class AbstractUtil {
/** /**
* Save a reference to the connection object for later use * Save a reference to the connection object for later use
*/ */
public function __construct(private DriverInterface $connection) public function __construct(private readonly DriverInterface $connection)
{ {
} }
@ -37,12 +37,8 @@ abstract class AbstractUtil {
/** /**
* Convenience public function to generate sql for creating a db table * Convenience public function to generate sql for creating a db table
*
* @param string $name
* @param array $fields
* @param bool $ifNotExists
*/ */
public function createTable($name, $fields, array $constraints=[], $ifNotExists=TRUE): string public function createTable(string $name, array $fields, array $constraints=[], bool $ifNotExists=TRUE): string
{ {
$existsStr = $ifNotExists ? ' IF NOT EXISTS ' : ' '; $existsStr = $ifNotExists ? ' IF NOT EXISTS ' : ' ';
@ -78,10 +74,8 @@ abstract class AbstractUtil {
/** /**
* Drop the selected table * Drop the selected table
*
* @param string $name
*/ */
public function deleteTable($name): string public function deleteTable(string $name): string
{ {
return 'DROP TABLE IF EXISTS '.$this->getDriver()->quoteTable($name); return 'DROP TABLE IF EXISTS '.$this->getDriver()->quoteTable($name);
} }

View File

@ -45,102 +45,73 @@ interface DriverInterface /* extends the interface of PDO */ {
/** /**
* Simplifies prepared statements for database queries * Simplifies prepared statements for database queries
*
* @return PDOStatement|null
* @throws InvalidArgumentException
*/ */
public function prepareQuery(string $sql, array $data): PDOStatement; public function prepareQuery(string $sql, array $data): PDOStatement;
/** /**
* Retrieve column information for the current database table * Retrieve column information for the current database table
*
* @return array
*/ */
public function getColumns(string $table): ?array; public function getColumns(string $table): ?array;
/** /**
* Retrieve list of data types for the database * Retrieve list of data types for the database
*
* @return array
*/ */
public function getTypes(): ?array; public function getTypes(): ?array;
/** /**
* Retrieve indexes for the table * Retrieve indexes for the table
*
* @return array
*/ */
public function getIndexes(string $table): ?array; public function getIndexes(string $table): ?array;
/** /**
* Retrieve foreign keys for the table * Retrieve foreign keys for the table
*
* @return array
*/ */
public function getFks(string $table): ?array; public function getFks(string $table): ?array;
/** /**
* Return list of tables for the current database * Return list of tables for the current database
*
* @return array
*/ */
public function getTables(): ?array; public function getTables(): ?array;
/** /**
* Retrieves an array of non-user-created tables for * Retrieves an array of non-user-created tables for
* the connection/database * the connection/database
*
* @return array
*/ */
public function getSystemTables(): ?array; public function getSystemTables(): ?array;
/** /**
* Return schemas for databases that list them. Returns * Return schemas for databases that list them. Returns
* database list if schemas are databases for the current driver. * database list if schemas are databases for the current driver.
*
* @return array
*/ */
public function getSchemas(): ?array; public function getSchemas(): ?array;
/** /**
* Return list of dbs for the current connection, if possible * Return list of dbs for the current connection, if possible
*
* @return array
*/ */
public function getDbs(): ?array; public function getDbs(): ?array;
/** /**
* Return list of views for the current database * Return list of views for the current database
*
* @return array
*/ */
public function getViews(): ?array; public function getViews(): ?array;
/** /**
* Return list of sequences for the current database, if they exist * Return list of sequences for the current database, if they exist
*
* @return array
*/ */
public function getSequences(): ?array; public function getSequences(): ?array;
/** /**
* Return list of functions for the current database * Return list of functions for the current database
*
* @return array
*/ */
public function getFunctions(): ?array; public function getFunctions(): ?array;
/** /**
* Return list of stored procedures for the current database * Return list of stored procedures for the current database
*
* @return array
*/ */
public function getProcedures(): ?array; public function getProcedures(): ?array;
/** /**
* Return list of triggers for the current database * Return list of triggers for the current database
*
* @return array
*/ */
public function getTriggers(): ?array; public function getTriggers(): ?array;
@ -161,12 +132,8 @@ interface DriverInterface /* extends the interface of PDO */ {
/** /**
* Method to simplify retrieving db results for meta-data queries * Method to simplify retrieving db results for meta-data queries
*
* @param string|array|null $query
* @param bool $filteredIndex
* @return array
*/ */
public function driverQuery($query, $filteredIndex=TRUE): ?array; public function driverQuery(string|array $query, bool $filteredIndex=TRUE): ?array;
/** /**
* Returns number of rows affected by an INSERT, UPDATE, DELETE type query * Returns number of rows affected by an INSERT, UPDATE, DELETE type query
@ -176,8 +143,6 @@ interface DriverInterface /* extends the interface of PDO */ {
/** /**
* Return the number of rows returned for a SELECT query * Return the number of rows returned for a SELECT query
* @see http://us3.php.net/manual/en/pdostatement.rowcount.php#87110 * @see http://us3.php.net/manual/en/pdostatement.rowcount.php#87110
*
* @return int
*/ */
public function numRows(): ?int; public function numRows(): ?int;

View File

@ -24,8 +24,6 @@ class SQL extends AbstractSQL {
/** /**
* Limit clause * Limit clause
*
* @param int|boolean $offset
*/ */
public function limit(string $sql, int $limit, ?int $offset=NULL): string public function limit(string $sql, int $limit, ?int $offset=NULL): string
{ {
@ -66,10 +64,8 @@ SQL;
/** /**
* Returns sql to list tables * Returns sql to list tables
*
* @param string $database
*/ */
public function tableList($database=''): string public function tableList(string $database=''): string
{ {
// @codeCoverageIgnoreStart // @codeCoverageIgnoreStart
if ( ! empty($database)) if ( ! empty($database))
@ -126,8 +122,6 @@ SQL;
/** /**
* Return sql to list sequences * Return sql to list sequences
*
* @return string
*/ */
public function sequenceList(): ?string public function sequenceList(): ?string
{ {

View File

@ -103,13 +103,6 @@ class Util extends AbstractUtil {
foreach($rows as $row) foreach($rows as $row)
{ {
$row = array_values($row); $row = array_values($row);
// Workaround for Quercus
// foreach($row as &$r)
// {
// $r = $driver->quote($r);
// }
// unset($r);
$row = array_map('trim', $row); $row = array_map('trim', $row);
$rowString = 'INSERT INTO `'.trim($t).'` (`'.implode('`,`', $columns).'`) VALUES ('.implode(',', $row).');'; $rowString = 'INSERT INTO `'.trim($t).'` (`'.implode('`,`', $columns).'`) VALUES ('.implode(',', $row).');';

View File

@ -39,8 +39,6 @@ class Driver extends AbstractDriver {
/** /**
* Get a list of schemas for the current connection * Get a list of schemas for the current connection
*
* @return array
*/ */
public function getSchemas(): ?array public function getSchemas(): ?array
{ {
@ -55,8 +53,6 @@ SQL;
/** /**
* Retrieve foreign keys for the table * Retrieve foreign keys for the table
*
* @return mixed[]|null
*/ */
public function getFks(string $table): array public function getFks(string $table): array
{ {

View File

@ -107,8 +107,6 @@ SQL;
/** /**
* Return sql to list functions * Return sql to list functions
*
* @return string
*/ */
public function functionList(): ?string public function functionList(): ?string
{ {

View File

@ -57,29 +57,21 @@ interface SQLInterface {
/** /**
* Returns sql to list triggers * Returns sql to list triggers
*
* @return string
*/ */
public function triggerList(): ?string; public function triggerList(): ?string;
/** /**
* Return sql to list functions * Return sql to list functions
*
* @return string
*/ */
public function functionList(): ?string; public function functionList(): ?string;
/** /**
* Return sql to list stored procedures * Return sql to list stored procedures
*
* @return string
*/ */
public function procedureList(): ?string; public function procedureList(): ?string;
/** /**
* Return sql to list sequences * Return sql to list sequences
*
* @return string
*/ */
public function sequenceList(): ?string; public function sequenceList(): ?string;

View File

@ -25,7 +25,6 @@ use Query\Drivers\AbstractDriver;
* SQLite specific class * SQLite specific class
*/ */
class Driver extends AbstractDriver { class Driver extends AbstractDriver {
/** /**
* SQLite has a truncate optimization, * SQLite has a truncate optimization,
* but no support for the actual keyword * but no support for the actual keyword
@ -55,8 +54,6 @@ class Driver extends AbstractDriver {
/** /**
* List tables for the current database * List tables for the current database
*
* @return mixed[]
*/ */
public function getTables(): array public function getTables(): array
{ {
@ -92,7 +89,7 @@ class Driver extends AbstractDriver {
* Create sql for batch insert * Create sql for batch insert
* *
* @codeCoverageIgnore * @codeCoverageIgnore
* @return mixed[][]|string[]|null[]|string[]|null[] * @return array[]|string[]|null[]
*/ */
public function insertBatch(string $table, array $data=[]): array public function insertBatch(string $table, array $data=[]): array
{ {

View File

@ -16,12 +16,12 @@
namespace Query; namespace Query;
/** /**
* 'Enum' of join types * Enum of join types
*/ */
class JoinType { enum JoinType: string {
public final const CROSS = 'cross'; case CROSS = 'cross';
public final const INNER = 'inner'; case INNER = 'inner';
public final const OUTER = 'outer'; case OUTER = 'outer';
public final const LEFT = 'left'; case LEFT = 'left';
public final const RIGHT = 'right'; case RIGHT = 'right';
} }

View File

@ -18,8 +18,8 @@ namespace Query;
/** /**
* 'Enum' of join types * 'Enum' of join types
*/ */
class LikeType { enum LikeType: string {
public final const BEFORE = 'before'; case BEFORE = 'before';
public final const AFTER = 'after'; case AFTER = 'after';
public final const BOTH = 'both'; case BOTH = 'both';
} }

View File

@ -18,11 +18,11 @@ namespace Query;
/** /**
* 'Enum' of query map types * 'Enum' of query map types
*/ */
class MapType { enum MapType: string {
public final const GROUP_END = 'group_end'; case GROUP_END = 'group_end';
public final const GROUP_START = 'group_start'; case GROUP_START = 'group_start';
public final const JOIN = 'join'; case JOIN = 'join';
public final const LIKE = 'like'; case LIKE = 'like';
public final const WHERE = 'where'; case WHERE = 'where';
public final const WHERE_IN = 'where_in'; case WHERE_IN = 'where_in';
} }

View File

@ -187,40 +187,32 @@ class QueryBuilder extends QueryBuilderBase implements QueryBuilderInterface {
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
/** /**
* Creates a Like clause in the sql statement * Creates a Like clause in the sql statement
*
* @param mixed $val
*/ */
public function like(string $field, $val, string $pos=LikeType::BOTH): self public function like(string $field, mixed $val, LikeType $pos=LikeType::BOTH): self
{ {
return $this->_like($field, $val, $pos); return $this->_like($field, $val, $pos);
} }
/** /**
* Generates an OR Like clause * Generates an OR Like clause
*
* @param mixed $val
*/ */
public function orLike(string $field, $val, string $pos=LikeType::BOTH): self public function orLike(string $field, mixed $val, LikeType $pos=LikeType::BOTH): self
{ {
return $this->_like($field, $val, $pos, 'LIKE', 'OR'); return $this->_like($field, $val, $pos, 'LIKE', 'OR');
} }
/** /**
* Generates a NOT LIKE clause * Generates a NOT LIKE clause
*
* @param mixed $val
*/ */
public function notLike(string $field, $val, string $pos=LikeType::BOTH): self public function notLike(string $field, mixed $val, LikeType $pos=LikeType::BOTH): self
{ {
return $this->_like($field, $val, $pos, 'NOT LIKE'); return $this->_like($field, $val, $pos, 'NOT LIKE');
} }
/** /**
* Generates a OR NOT LIKE clause * Generates a OR NOT LIKE clause
*
* @param mixed $val
*/ */
public function orNotLike(string $field, $val, string $pos=LikeType::BOTH): self public function orNotLike(string $field, mixed $val, LikeType $pos=LikeType::BOTH): self
{ {
return $this->_like($field, $val, $pos, 'NOT LIKE', 'OR'); return $this->_like($field, $val, $pos, 'NOT LIKE', 'OR');
} }
@ -230,22 +222,16 @@ class QueryBuilder extends QueryBuilderBase implements QueryBuilderInterface {
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
/** /**
* Generates a 'Having' clause * Generates a 'Having' clause
*
* @param mixed $key
* @param mixed $val
*/ */
public function having($key, $val=[]): self public function having(mixed $key, mixed $val=[]): self
{ {
return $this->_having($key, $val); return $this->_having($key, $val);
} }
/** /**
* Generates a 'Having' clause prefixed with 'OR' * Generates a 'Having' clause prefixed with 'OR'
*
* @param mixed $key
* @param mixed $val
*/ */
public function orHaving($key, $val=[]): self public function orHaving(mixed $key, mixed $val=[]): self
{ {
return $this->_having($key, $val, 'OR'); return $this->_having($key, $val, 'OR');
} }
@ -257,67 +243,48 @@ class QueryBuilder extends QueryBuilderBase implements QueryBuilderInterface {
* Specify condition(s) in the where clause of a query * Specify condition(s) in the where clause of a query
* Note: this function works with key / value, or a * Note: this function works with key / value, or a
* passed array with key / value pairs * passed array with key / value pairs
*
* @param mixed $key
* @param mixed $val
* @param mixed $escape
*/ */
public function where($key, $val=[], $escape=NULL): self public function where(mixed $key, mixed $val=[]): self
{ {
return $this->_whereString($key, $val); return $this->_whereString($key, $val);
} }
/** /**
* Where clause prefixed with "OR" * Where clause prefixed with "OR"
*
* @param string $key
* @param mixed $val
*/ */
public function orWhere($key, $val=[]): self public function orWhere(mixed $key, mixed $val=[]): self
{ {
return $this->_whereString($key, $val, 'OR'); return $this->_whereString($key, $val, 'OR');
} }
/** /**
* Where clause with 'IN' statement * Where clause with 'IN' statement
*
* @param mixed $field
* @param mixed $val
*/ */
public function whereIn($field, $val=[]): self public function whereIn(string $field, mixed $val=[]): self
{ {
return $this->_whereIn($field, $val); return $this->_whereIn($field, $val);
} }
/** /**
* Where in statement prefixed with "or" * Where in statement prefixed with "or"
*
* @param string $field
* @param mixed $val
*/ */
public function orWhereIn($field, $val=[]): self public function orWhereIn(string $field, mixed $val=[]): self
{ {
return $this->_whereIn($field, $val, 'IN', 'OR'); return $this->_whereIn($field, $val, 'IN', 'OR');
} }
/** /**
* WHERE NOT IN (FOO) clause * WHERE NOT IN (FOO) clause
*
* @param string $field
* @param mixed $val
*/ */
public function whereNotIn($field, $val=[]): self public function whereNotIn(string $field, mixed $val=[]): self
{ {
return $this->_whereIn($field, $val, 'NOT IN'); return $this->_whereIn($field, $val, 'NOT IN');
} }
/** /**
* OR WHERE NOT IN (FOO) clause * OR WHERE NOT IN (FOO) clause
*
* @param string $field
* @param mixed $val
*/ */
public function orWhereNotIn($field, $val=[]): self public function orWhereNotIn(string $field, mixed $val=[]): self
{ {
return $this->_whereIn($field, $val, 'NOT IN', 'OR'); return $this->_whereIn($field, $val, 'NOT IN', 'OR');
} }
@ -327,11 +294,8 @@ class QueryBuilder extends QueryBuilderBase implements QueryBuilderInterface {
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
/** /**
* Sets values for inserts / updates / deletes * Sets values for inserts / updates / deletes
*
* @param mixed $key
* @param mixed $val
*/ */
public function set($key, $val = NULL): self public function set(mixed $key, mixed $val = NULL): self
{ {
$pairs = is_scalar($key) ? [$key => $val] : $key; $pairs = is_scalar($key) ? [$key => $val] : $key;
@ -359,7 +323,7 @@ class QueryBuilder extends QueryBuilderBase implements QueryBuilderInterface {
/** /**
* Creates a join phrase in a compiled query * Creates a join phrase in a compiled query
*/ */
public function join(string $table, string $condition, string $type=''): self public function join(string $table, string $condition, JoinType $type=JoinType::INNER): self
{ {
// Prefix and quote table name // Prefix and quote table name
$tableArr = explode(' ', mb_trim($table)); $tableArr = explode(' ', mb_trim($table));
@ -371,17 +335,15 @@ class QueryBuilder extends QueryBuilderBase implements QueryBuilderInterface {
$parsedCondition = $this->parser->compileJoin($condition); $parsedCondition = $this->parser->compileJoin($condition);
$condition = $table . ' ON ' . $parsedCondition; $condition = $table . ' ON ' . $parsedCondition;
$this->state->appendMap("\n" . strtoupper($type) . ' JOIN ', $condition, MapType::JOIN); $this->state->appendMap("\n" . strtoupper($type->value) . ' JOIN ', $condition, MapType::JOIN);
return $this; return $this;
} }
/** /**
* Group the results by the selected field(s) * Group the results by the selected field(s)
*
* @param mixed $field
*/ */
public function groupBy($field): self public function groupBy(mixed $field): self
{ {
if ( ! is_scalar($field)) if ( ! is_scalar($field))
{ {
@ -575,10 +537,8 @@ class QueryBuilder extends QueryBuilderBase implements QueryBuilderInterface {
/** /**
* Creates an insert clause, and executes it * Creates an insert clause, and executes it
*
* @param mixed $data
*/ */
public function insert(string $table, $data=[]): PDOStatement public function insert(string $table, mixed $data=[]): PDOStatement
{ {
if ( ! empty($data)) if ( ! empty($data))
{ {
@ -590,9 +550,6 @@ class QueryBuilder extends QueryBuilderBase implements QueryBuilderInterface {
/** /**
* Creates and executes a batch insertion query * Creates and executes a batch insertion query
*
* @param array $data
* @return PDOStatement
*/ */
public function insertBatch(string $table, $data=[]): ?PDOStatement public function insertBatch(string $table, $data=[]): ?PDOStatement
{ {
@ -600,16 +557,14 @@ class QueryBuilder extends QueryBuilderBase implements QueryBuilderInterface {
[$sql, $data] = $this->driver->insertBatch($table, $data); [$sql, $data] = $this->driver->insertBatch($table, $data);
return $sql !== NULL return $sql !== NULL
? $this->_run('', $table, $sql, $data) ? $this->_run(QueryType::INSERT_BATCH, $table, $sql, $data)
: NULL; : NULL;
} }
/** /**
* Creates an update clause, and executes it * Creates an update clause, and executes it
*
* @param mixed $data
*/ */
public function update(string $table, $data=[]): PDOStatement public function update(string $table, mixed $data=[]): PDOStatement
{ {
if ( ! empty($data)) if ( ! empty($data))
{ {
@ -633,16 +588,14 @@ class QueryBuilder extends QueryBuilderBase implements QueryBuilderInterface {
// Get the generated values and sql string // Get the generated values and sql string
[$sql, $data, $affectedRows] = $this->driver->updateBatch($table, $data, $where); [$sql, $data, $affectedRows] = $this->driver->updateBatch($table, $data, $where);
$this->_run('', $table, $sql, $data); $this->_run(QueryType::UPDATE_BATCH, $table, $sql, $data);
return $affectedRows; return $affectedRows;
} }
/** /**
* Deletes data from a table * Deletes data from a table
*
* @param mixed $where
*/ */
public function delete(string $table, $where=''): PDOStatement public function delete(string $table, mixed $where=''): PDOStatement
{ {
// Set the where clause // Set the where clause
if ( ! empty($where)) if ( ! empty($where))

View File

@ -138,10 +138,8 @@ class QueryBuilderBase {
/** /**
* Method to simplify select_ methods * Method to simplify select_ methods
*
* @param string|bool $as
*/ */
protected function _select(string $field, $as = FALSE): string protected function _select(string $field, bool|string $as = FALSE): string
{ {
// Escape the identifiers // Escape the identifiers
$field = $this->driver->quoteIdent($field); $field = $this->driver->quoteIdent($field);
@ -160,7 +158,7 @@ class QueryBuilderBase {
/** /**
* Helper function for returning sql strings * Helper function for returning sql strings
*/ */
protected function _getCompile(string $type, string $table, bool $reset): string protected function _getCompile(QueryType $type, string $table, bool $reset): string
{ {
$sql = $this->_compile($type, $table); $sql = $this->_compile($type, $table);
@ -175,10 +173,8 @@ class QueryBuilderBase {
/** /**
* Simplify 'like' methods * Simplify 'like' methods
*
* @param mixed $val
*/ */
protected function _like(string $field, $val, string $pos, string $like = 'LIKE', string $conj = 'AND'): self protected function _like(string $field, mixed $val, LikeType $pos, string $like = 'LIKE', string $conj = 'AND'): self
{ {
$field = $this->driver->quoteIdent($field); $field = $this->driver->quoteIdent($field);
@ -209,11 +205,8 @@ class QueryBuilderBase {
/** /**
* Simplify building having clauses * Simplify building having clauses
*
* @param mixed $key
* @param mixed $values
*/ */
protected function _having($key, $values = [], string $conj = 'AND'): self protected function _having(mixed $key, mixed $values = [], string $conj = 'AND'): self
{ {
$where = $this->_where($key, $values); $where = $this->_where($key, $values);
@ -243,11 +236,8 @@ class QueryBuilderBase {
/** /**
* Do all the redundant stuff for where/having type methods * Do all the redundant stuff for where/having type methods
*
* @param mixed $key
* @param mixed $val
*/ */
protected function _where($key, $val = []): array protected function _where(mixed $key, mixed $val = []): array
{ {
$where = []; $where = [];
$pairs = []; $pairs = [];
@ -271,11 +261,8 @@ class QueryBuilderBase {
/** /**
* Simplify generating where string * Simplify generating where string
*
* @param mixed $key
* @param mixed $values
*/ */
protected function _whereString($key, $values = [], string $defaultConj = 'AND'): self protected function _whereString(mixed $key, mixed $values = [], string $defaultConj = 'AND'): self
{ {
// Create key/value placeholders // Create key/value placeholders
foreach ($this->_where($key, $values) as $f => $val) foreach ($this->_where($key, $values) as $f => $val)
@ -319,7 +306,7 @@ class QueryBuilderBase {
* @param string $in - The (not) in fragment * @param string $in - The (not) in fragment
* @param string $conj - The where in conjunction * @param string $conj - The where in conjunction
*/ */
protected function _whereIn($key, $val = [], string $in = 'IN', string $conj = 'AND'): self protected function _whereIn(mixed $key, mixed $val = [], string $in = 'IN', string $conj = 'AND'): self
{ {
$key = $this->driver->quoteIdent($key); $key = $this->driver->quoteIdent($key);
$params = array_fill(0, is_countable($val) ? count($val) : 0, '?'); $params = array_fill(0, is_countable($val) ? count($val) : 0, '?');
@ -338,7 +325,7 @@ class QueryBuilderBase {
* *
* @param array|null $vals * @param array|null $vals
*/ */
protected function _run(string $type, string $table, string $sql = NULL, array $vals = NULL, bool $reset = TRUE): PDOStatement protected function _run(QueryType $type, string $table, string $sql = NULL, array $vals = NULL, bool $reset = TRUE): PDOStatement
{ {
if ($sql === NULL) if ($sql === NULL)
{ {
@ -409,7 +396,7 @@ class QueryBuilderBase {
* *
* @codeCoverageIgnore * @codeCoverageIgnore
*/ */
protected function _compileType(string $type = QueryType::SELECT, string $table = ''): string protected function _compileType(QueryType $type = QueryType::SELECT, string $table = ''): string
{ {
$setArrayKeys = $this->state->getSetArrayKeys(); $setArrayKeys = $this->state->getSetArrayKeys();
switch ($type) switch ($type)
@ -453,7 +440,7 @@ class QueryBuilderBase {
/** /**
* String together the sql statements for sending to the db * String together the sql statements for sending to the db
*/ */
protected function _compile(string $type = '', string $table = ''): string protected function _compile(QueryType $type, string $table = ''): string
{ {
// Get the base clause for the query // Get the base clause for the query
$sql = $this->_compileType($type, $this->driver->quoteTable($table)); $sql = $this->_compileType($type, $this->driver->quoteTable($table));
@ -505,7 +492,7 @@ class QueryBuilderBase {
/** /**
* Generate returning clause of query * Generate returning clause of query
*/ */
protected function _compileReturning(string $sql, string $type): string protected function _compileReturning(string $sql, QueryType $type): string
{ {
if ($this->returning === FALSE) if ($this->returning === FALSE)
{ {

View File

@ -127,28 +127,28 @@ interface QueryBuilderInterface {
* *
* @param mixed $values * @param mixed $values
*/ */
public function like(string $field, $values, string $pos=LikeType::BOTH): self; public function like(string $field, mixed $values, LikeType $pos=LikeType::BOTH): self;
/** /**
* Generates an OR Like clause * Generates an OR Like clause
* *
* @param mixed $values * @param mixed $values
*/ */
public function orLike(string $field, $values, string $pos=LikeType::BOTH): self; public function orLike(string $field, mixed $values, LikeType $pos=LikeType::BOTH): self;
/** /**
* Generates a NOT LIKE clause * Generates a NOT LIKE clause
* *
* @param mixed $values * @param mixed $values
*/ */
public function notLike(string $field, $values, string $pos=LikeType::BOTH): self; public function notLike(string $field, mixed $values, LikeType $pos=LikeType::BOTH): self;
/** /**
* Generates a OR NOT LIKE clause * Generates a OR NOT LIKE clause
* *
* @param mixed $values * @param mixed $values
*/ */
public function orNotLike(string $field, $values, string $pos=LikeType::BOTH): self; public function orNotLike(string $field, mixed $values, LikeType $pos=LikeType::BOTH): self;
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
// ! Having methods // ! Having methods
@ -159,7 +159,7 @@ interface QueryBuilderInterface {
* @param mixed $key * @param mixed $key
* @param mixed $values * @param mixed $values
*/ */
public function having($key, $values=[]): self; public function having(mixed $key, mixed $values=[]): self;
/** /**
* Generates a 'Having' clause prefixed with 'OR' * Generates a 'Having' clause prefixed with 'OR'
@ -167,7 +167,7 @@ interface QueryBuilderInterface {
* @param mixed $key * @param mixed $key
* @param mixed $values * @param mixed $values
*/ */
public function orHaving($key, $values=[]): self; public function orHaving(mixed $key, mixed $values=[]): self;
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
// ! 'Where' methods // ! 'Where' methods
@ -179,9 +179,8 @@ interface QueryBuilderInterface {
* *
* @param mixed $key * @param mixed $key
* @param mixed $values * @param mixed $values
* @param bool $escape
*/ */
public function where($key, $values=[], $escape = NULL): self; public function where(mixed $key, mixed $values=[]): self;
/** /**
* Where clause prefixed with "OR" * Where clause prefixed with "OR"
@ -189,15 +188,15 @@ interface QueryBuilderInterface {
* @param string $key * @param string $key
* @param mixed $values * @param mixed $values
*/ */
public function orWhere($key, $values=[]): self; public function orWhere(mixed $key, mixed $values=[]): self;
/** /**
* Where clause with 'IN' statement * Where clause with 'IN' statement
* *
* @param mixed $field * @param string $field
* @param mixed $values * @param mixed $values
*/ */
public function whereIn($field, $values=[]): self; public function whereIn(string $field, mixed $values=[]): self;
/** /**
* Where in statement prefixed with "or" * Where in statement prefixed with "or"
@ -205,7 +204,7 @@ interface QueryBuilderInterface {
* @param string $field * @param string $field
* @param mixed $values * @param mixed $values
*/ */
public function orWhereIn($field, $values=[]): self; public function orWhereIn(string $field, mixed $values=[]): self;
/** /**
* WHERE NOT IN (FOO) clause * WHERE NOT IN (FOO) clause
@ -213,7 +212,7 @@ interface QueryBuilderInterface {
* @param string $field * @param string $field
* @param mixed $values * @param mixed $values
*/ */
public function whereNotIn($field, $values=[]): self; public function whereNotIn(string $field, mixed $values=[]): self;
/** /**
* OR WHERE NOT IN (FOO) clause * OR WHERE NOT IN (FOO) clause
@ -221,7 +220,7 @@ interface QueryBuilderInterface {
* @param string $field * @param string $field
* @param mixed $values * @param mixed $values
*/ */
public function orWhereNotIn($field, $values=[]): self; public function orWhereNotIn(string $field, mixed $values=[]): self;
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
// ! Other Query Modifier methods // ! Other Query Modifier methods
@ -232,19 +231,19 @@ interface QueryBuilderInterface {
* @param mixed $key * @param mixed $key
* @param mixed $values * @param mixed $values
*/ */
public function set($key, $values = NULL): self; public function set(mixed $key, mixed $values = NULL): self;
/** /**
* Creates a join phrase in a compiled query * Creates a join phrase in a compiled query
*/ */
public function join(string $table, string $condition, string $type=JoinType::INNER): self; public function join(string $table, string $condition, JoinType $type=JoinType::INNER): self;
/** /**
* Group the results by the selected field(s) * Group the results by the selected field(s)
* *
* @param mixed $field * @param mixed $field
*/ */
public function groupBy($field): self; public function groupBy(mixed $field): self;
/** /**
* Order the results by the selected field(s) * Order the results by the selected field(s)
@ -301,7 +300,7 @@ interface QueryBuilderInterface {
* *
* @param array $where * @param array $where
*/ */
public function getWhere(string $table, $where=[], ?int $limit=NULL, ?int $offset=NULL): PDOStatement; public function getWhere(string $table, array $where=[], ?int $limit=NULL, ?int $offset=NULL): PDOStatement;
/** /**
* Retrieve the number of rows in the selected table * Retrieve the number of rows in the selected table
@ -321,21 +320,21 @@ interface QueryBuilderInterface {
* *
* @param mixed $data * @param mixed $data
*/ */
public function insert(string $table, $data=[]): PDOStatement; public function insert(string $table, mixed $data=[]): PDOStatement;
/** /**
* Creates and executes a batch insertion query * Creates and executes a batch insertion query
* *
* @param array $data * @param array $data
*/ */
public function insertBatch(string $table, $data=[]): ?PDOStatement; public function insertBatch(string $table, mixed $data=[]): ?PDOStatement;
/** /**
* Creates an update clause, and executes it * Creates an update clause, and executes it
* *
* @param mixed $data * @param mixed $data
*/ */
public function update(string $table, $data=[]): PDOStatement; public function update(string $table, mixed $data=[]): PDOStatement;
/** /**
* Creates a batch update, and executes it. * Creates a batch update, and executes it.
@ -352,7 +351,7 @@ interface QueryBuilderInterface {
* *
* @param mixed $where * @param mixed $where
*/ */
public function delete(string $table, $where=''): PDOStatement; public function delete(string $table, mixed $where=''): PDOStatement;
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
// ! SQL Returning Methods // ! SQL Returning Methods

View File

@ -44,14 +44,14 @@ class QueryParser {
/** /**
* Constructor/entry point into parser * Constructor/entry point into parser
*/ */
public function __construct(private DriverInterface $db) public function __construct(private readonly DriverInterface $db)
{ {
} }
/** /**
* Parser method for setting the parse string * Parser method for setting the parse string
* *
* @return mixed[][] * @return array[]
*/ */
public function parseJoin(string $sql): array public function parseJoin(string $sql): array
{ {
@ -93,7 +93,7 @@ class QueryParser {
/** /**
* Returns a more useful match array * Returns a more useful match array
* *
* @return mixed[] * @return array
*/ */
protected function filterArray(array $array): array protected function filterArray(array $array): array
{ {

View File

@ -18,11 +18,11 @@ namespace Query;
/** /**
* 'Enum' of query types * 'Enum' of query types
*/ */
class QueryType { enum QueryType: string {
public final const SELECT = 'select'; case SELECT = 'select';
public final const INSERT = 'insert'; case INSERT = 'insert';
public final const INSERT_BATCH = 'insert_batch'; case INSERT_BATCH = 'insert_batch';
public final const UPDATE = 'update'; case UPDATE = 'update';
public final const UPDATE_BATCH = 'update_batch'; case UPDATE_BATCH = 'update_batch';
public final const DELETE = 'delete'; case DELETE = 'delete';
} }

View File

@ -169,10 +169,7 @@ class State {
return $this; return $this;
} }
/** public function setOrderArray(string $key, mixed $orderArray): self
* @param mixed $orderArray
*/
public function setOrderArray(string $key, $orderArray): self
{ {
$this->orderArray[$key] = $orderArray; $this->orderArray[$key] = $orderArray;
return $this; return $this;
@ -190,10 +187,7 @@ class State {
return $this; return $this;
} }
/** public function appendWhereValues(mixed $val): self
* @param mixed $val
*/
public function appendWhereValues($val): self
{ {
if (is_array($val)) if (is_array($val))
{ {
@ -212,7 +206,7 @@ class State {
/** /**
* Add an additional set of mapping pairs to a internal map * Add an additional set of mapping pairs to a internal map
*/ */
public function appendMap(string $conjunction = '', string $string = '', string $type = ''): self public function appendMap(string $conjunction = '', string $string = '', MapType $type = MapType::WHERE): self
{ {
$this->queryMap[] = [ $this->queryMap[] = [
'type' => $type, 'type' => $type,

View File

@ -31,10 +31,8 @@ namespace {
/** /**
* Filter out db rows into one array * Filter out db rows into one array
*
* @param mixed $index
*/ */
function dbFilter(array $array, $index): array function dbFilter(array $array, mixed $index): array
{ {
$newArray = []; $newArray = [];