diff --git a/RoboFile.php b/RoboFile.php index c8f6cc9..be6f8f0 100644 --- a/RoboFile.php +++ b/RoboFile.php @@ -40,7 +40,7 @@ class RoboFile extends \Robo\Tasks { */ protected $cleanDirs = [ 'coverage', - 'docs', + 'apiDocumentation', 'phpdoc', 'build/logs', 'build/phpdox', @@ -76,14 +76,6 @@ class RoboFile extends \Robo\Tasks { */ public function clean() { - $cleanFiles = [ - 'build/humbug.json', - 'build/humbug-log.txt', - ]; - array_map(function ($file) { - @unlink($file); - }, $cleanFiles); - // So the task doesn't complain, // make any 'missing' dirs to cleanup array_map(function ($dir) { @@ -102,10 +94,7 @@ class RoboFile extends \Robo\Tasks { */ public function coverage() { - $this->taskPhpUnit() - ->configFile('build/phpunit.xml') - ->printed(true) - ->run(); + $this->_run(['phpdbg -qrr -- vendor/bin/phpunit -c build']); } /** @@ -113,10 +102,7 @@ class RoboFile extends \Robo\Tasks { */ public function docs() { - $cmd_parts = [ - 'phpdoc' - ]; - $this->_run($cmd_parts, ' && '); + $this->_run(['vendor/bin/phpdox']); } /** @@ -134,29 +120,6 @@ class RoboFile extends \Robo\Tasks { } } - - /** - * Run mutation tests with humbug - * - * @param bool $stats - if true, generates stats rather than running mutation tests - */ - public function mutate($stats = FALSE) - { - $test_parts = [ - 'vendor/bin/humbug' - ]; - - $stat_parts = [ - 'vendor/bin/humbug', - '--skip-killed=yes', - '-v', - './build/humbug.json' - ]; - - $cmd_parts = ($stats) ? $stat_parts : $test_parts; - $this->_run($cmd_parts); - } - /** * Run the phpcs tool * @@ -226,9 +189,8 @@ class RoboFile extends \Robo\Tasks { public function test() { $this->lint(); - $this->taskPHPUnit() + $this->taskPhpUnit() ->configFile('phpunit.xml') - ->printed(true) ->run(); $this->_run(["php tests/index.php"]); } diff --git a/phpdoc.dist.xml b/build/phpdoc.dist.xml similarity index 100% rename from phpdoc.dist.xml rename to build/phpdoc.dist.xml diff --git a/composer.json b/composer.json index df85e02..55d3460 100644 --- a/composer.json +++ b/composer.json @@ -21,20 +21,19 @@ "role": "Developer" }], "require": { - "php": "^7.0" + "php": "^7.1" }, "require-dev": { "consolidation/robo": "^1.0.0", - "infection/infection": "^0.7.0", "monolog/monolog": "^1.21", "pdepend/pdepend": "^2.5", "phploc/phploc": "^4.0", - "phpmd/phpmd": "^2.4", "phpstan/phpstan": "^0.9.1", "phpunit/phpunit": "^6.5", - "sebastian/phpcpd": "^2.0", + "sebastian/phpcpd": "^3.0", "simpletest/simpletest": "^1.1", - "squizlabs/php_codesniffer": "^3.0.0" + "squizlabs/php_codesniffer": "^3.0.0", + "theseer/phpdox": "^0.11.0" }, "autoload": { "psr-4": { @@ -48,6 +47,8 @@ } }, "scripts": { + "build": "robo build", + "clean": "robo clean", "coverage": "phpdbg -qrr -- vendor/bin/phpunit -c build", "phpstan": "phpstan analyse -l 3 -c phpstan.neon src tests", "test": "phpunit -c build --no-coverage" diff --git a/build/phpdox.xml b/phpdox.xml similarity index 95% rename from build/phpdox.xml rename to phpdox.xml index edcdc07..dda8389 100644 --- a/build/phpdox.xml +++ b/phpdox.xml @@ -9,7 +9,7 @@ - + @@ -56,12 +56,12 @@ - + - + @@ -84,11 +84,9 @@ - - + diff --git a/src/BadDBDriverException.php b/src/BadDBDriverException.php index 2c059e5..9f784e9 100644 --- a/src/BadDBDriverException.php +++ b/src/BadDBDriverException.php @@ -18,9 +18,6 @@ use InvalidArgumentException; /** * Generic exception for bad drivers - * - * @package Query - * @subpackage Core */ class BadDBDriverException extends InvalidArgumentException { } \ No newline at end of file diff --git a/src/Drivers/AbstractDriver.php b/src/Drivers/AbstractDriver.php index 4ababcb..3cff181 100644 --- a/src/Drivers/AbstractDriver.php +++ b/src/Drivers/AbstractDriver.php @@ -544,7 +544,7 @@ abstract class AbstractDriver $sql = "INSERT INTO {$table} (" . implode(',', $this->quoteIdent($fields)) - . ") VALUES "; + . ') VALUES '; // Create the placeholder groups $params = array_fill(0, count($fields), '?'); diff --git a/src/Drivers/AbstractSQL.php b/src/Drivers/AbstractSQL.php index d795d66..c57bf25 100644 --- a/src/Drivers/AbstractSQL.php +++ b/src/Drivers/AbstractSQL.php @@ -15,10 +15,7 @@ namespace Query\Drivers; /** - * parent for database manipulation subclasses - * - * @package Query - * @subpackage Drivers + * Parent for database-specific syntax subclasses */ abstract class AbstractSQL implements SQLInterface { diff --git a/src/Drivers/Pgsql/Driver.php b/src/Drivers/Pgsql/Driver.php index e3bbe51..2ea398f 100644 --- a/src/Drivers/Pgsql/Driver.php +++ b/src/Drivers/Pgsql/Driver.php @@ -40,8 +40,6 @@ class Driver extends AbstractDriver { parent::__construct($dsn, $username, $password, $options); } - // -------------------------------------------------------------------------- - /** * Get a list of schemas for the current connection * @@ -58,8 +56,6 @@ SQL; return $this->driverQuery($sql); } - // -------------------------------------------------------------------------- - /** * Retrieve foreign keys for the table * diff --git a/src/Drivers/SQLInterface.php b/src/Drivers/SQLInterface.php index b323230..244de79 100644 --- a/src/Drivers/SQLInterface.php +++ b/src/Drivers/SQLInterface.php @@ -15,10 +15,7 @@ namespace Query\Drivers; /** - * parent for database manipulation subclasses - * - * @package Query - * @subpackage Drivers + * Interface for database-specific syntax subclasses */ interface SQLInterface { diff --git a/src/Drivers/Sqlite/Driver.php b/src/Drivers/Sqlite/Driver.php index 04092ee..de8d06a 100644 --- a/src/Drivers/Sqlite/Driver.php +++ b/src/Drivers/Sqlite/Driver.php @@ -121,12 +121,12 @@ class Driver extends AbstractDriver { { $cols[] = $this->_quote($datum) . ' AS ' . $this->quoteIdent($colname); } - $sql .= "SELECT " . implode(', ', $cols) . "\n"; + $sql .= 'SELECT ' . implode(', ', $cols) . "\n"; foreach($data as $union) { $vals = array_map([$this, 'quote'], $union); - $sql .= "UNION SELECT " . implode(',', $vals) . "\n"; + $sql .= 'UNION SELECT ' . implode(',', $vals) . "\n"; } return [$sql, NULL]; diff --git a/src/Drivers/Sqlite/Util.php b/src/Drivers/Sqlite/Util.php index 21d2a2e..e6d7a9e 100644 --- a/src/Drivers/Sqlite/Util.php +++ b/src/Drivers/Sqlite/Util.php @@ -20,8 +20,6 @@ use Query\Drivers\AbstractUtil; /** * SQLite-specific backup, import and creation methods * - * @package Query - * @subpackage Drivers * @method mixed query(string $sql) * @method string quote(string $str) */ diff --git a/src/QueryBuilder.php b/src/QueryBuilder.php index 38ed920..665d5ed 100644 --- a/src/QueryBuilder.php +++ b/src/QueryBuilder.php @@ -258,7 +258,7 @@ class QueryBuilder implements QueryBuilderInterface { * @param string $tblname * @return QueryBuilderInterface */ - public function from($tblname): QueryBuilderInterface + public function from(string $tblname): QueryBuilderInterface { // Split identifiers on spaces $identArray = explode(' ', \mb_trim($tblname)); @@ -286,7 +286,7 @@ class QueryBuilder implements QueryBuilderInterface { * @param string $pos * @return QueryBuilderInterface */ - public function like($field, $val, $pos='both'): QueryBuilderInterface + public function like(string $field, $val, string $pos='both'): QueryBuilderInterface { return $this->_like($field, $val, $pos); } @@ -299,7 +299,7 @@ class QueryBuilder implements QueryBuilderInterface { * @param string $pos * @return QueryBuilderInterface */ - public function orLike($field, $val, $pos='both'): QueryBuilderInterface + public function orLike(string $field, $val, string $pos='both'): QueryBuilderInterface { return $this->_like($field, $val, $pos, 'LIKE', 'OR'); } @@ -312,9 +312,9 @@ class QueryBuilder implements QueryBuilderInterface { * @param string $pos * @return QueryBuilderInterface */ - public function notLike($field, $val, $pos='both'): QueryBuilderInterface + public function notLike(string $field, $val, string $pos='both'): QueryBuilderInterface { - return $this->_like($field, $val, $pos, 'NOT LIKE', 'AND'); + return $this->_like($field, $val, $pos, 'NOT LIKE'); } /** @@ -325,7 +325,7 @@ class QueryBuilder implements QueryBuilderInterface { * @param string $pos * @return QueryBuilderInterface */ - public function orNotLike($field, $val, $pos='both'): QueryBuilderInterface + public function orNotLike(string $field, $val, string $pos='both'): QueryBuilderInterface { return $this->_like($field, $val, $pos, 'NOT LIKE', 'OR'); } @@ -343,7 +343,7 @@ class QueryBuilder implements QueryBuilderInterface { */ public function having($key, $val=[]): QueryBuilderInterface { - return $this->_having($key, $val, 'AND'); + return $this->_having($key, $val); } /** @@ -422,7 +422,7 @@ class QueryBuilder implements QueryBuilderInterface { */ public function whereNotIn($field, $val=[]): QueryBuilderInterface { - return $this->_whereIn($field, $val, 'NOT IN', 'AND'); + return $this->_whereIn($field, $val, 'NOT IN'); } /** @@ -488,7 +488,7 @@ class QueryBuilder implements QueryBuilderInterface { * @param string $type * @return QueryBuilderInterface */ - public function join($table, $condition, $type=''): QueryBuilderInterface + public function join(string $table, string $condition, string $type=''): QueryBuilderInterface { // Prefix and quote table name $table = explode(' ', mb_trim($table)); @@ -537,7 +537,7 @@ class QueryBuilder implements QueryBuilderInterface { * @param string $type * @return QueryBuilderInterface */ - public function orderBy($field, $type=''): QueryBuilderInterface + public function orderBy(string $field, string $type=''): QueryBuilderInterface { // When ordering by random, do an ascending order if the driver // doesn't support random ordering @@ -560,7 +560,7 @@ class QueryBuilder implements QueryBuilderInterface { } // Set the final string - $orderString = ( ! isset($rand)) + $orderString = ! isset($rand) ? "\nORDER BY ".implode(', ', $orderClauses) : "\nORDER BY".$rand; @@ -576,7 +576,7 @@ class QueryBuilder implements QueryBuilderInterface { * @param int|bool $offset * @return QueryBuilderInterface */ - public function limit($limit, $offset=FALSE): QueryBuilderInterface + public function limit(int $limit, $offset=FALSE): QueryBuilderInterface { $this->state->setLimit($limit); $this->state->setOffset($offset); @@ -668,7 +668,7 @@ class QueryBuilder implements QueryBuilderInterface { * @param int|bool $offset * @return PDOStatement */ - public function get($table='', $limit=FALSE, $offset=FALSE): PDOStatement + public function get(string $table='', $limit=FALSE, $offset=FALSE): ?PDOStatement { // Set the table if ( ! empty($table)) @@ -689,12 +689,12 @@ class QueryBuilder implements QueryBuilderInterface { * Convenience method for get() with a where clause * * @param string $table - * @param array $where + * @param mixed $where * @param int|bool $limit * @param int|bool $offset * @return PDOStatement */ - public function getWhere($table, $where=[], $limit=FALSE, $offset=FALSE): PDOStatement + public function getWhere(string $table, $where=[], $limit=FALSE, $offset=FALSE): ?PDOStatement { // Create the where clause $this->where($where); @@ -709,7 +709,7 @@ class QueryBuilder implements QueryBuilderInterface { * @param string $table * @return int */ - public function countAll($table): int + public function countAll(string $table): int { $sql = 'SELECT * FROM '.$this->driver->quoteTable($table); $res = $this->driver->query($sql); @@ -745,7 +745,7 @@ class QueryBuilder implements QueryBuilderInterface { * @param mixed $data * @return PDOStatement */ - public function insert($table, $data=[]): PDOStatement + public function insert(string $table, $data=[]): ?PDOStatement { if ( ! empty($data)) { @@ -762,10 +762,10 @@ class QueryBuilder implements QueryBuilderInterface { * @param array $data * @return PDOStatement */ - public function insertBatch($table, $data=[]): PDOStatement + public function insertBatch(string $table, $data=[]): ?PDOStatement { // Get the generated values and sql string - list($sql, $data) = $this->driver->insertBatch($table, $data); + [$sql, $data] = $this->driver->insertBatch($table, $data); return $sql !== NULL ? $this->_run('', $table, $sql, $data) @@ -779,7 +779,7 @@ class QueryBuilder implements QueryBuilderInterface { * @param mixed $data * @return PDOStatement */ - public function update($table, $data=[]): PDOStatement + public function update(string $table, $data=[]): PDOStatement { if ( ! empty($data)) { @@ -796,9 +796,9 @@ class QueryBuilder implements QueryBuilderInterface { * @param string $table * @param array|object $data * @param string $where - * @return int|null + * @return PDOStatement|null */ - public function updateBatch($table, $data, $where) + public function updateBatch(string $table, $data, $where): ?PDOStatement { // Get the generated values and sql string list($sql, $data) = $this->driver->updateBatch($table, $data, $where); @@ -815,7 +815,7 @@ class QueryBuilder implements QueryBuilderInterface { * @param array $data * @return \PDOStatement|null */ - public function replace($table, $data=[]) + public function replace(string $table, $data=[]): ?PDOStatement { if ( ! empty($data)) { @@ -832,7 +832,7 @@ class QueryBuilder implements QueryBuilderInterface { * @param mixed $where * @return PDOStatement */ - public function delete($table, $where=''): PDOStatement + public function delete(string $table, $where=''): ?PDOStatement { // Set the where clause if ( ! empty($where)) @@ -916,8 +916,6 @@ class QueryBuilder implements QueryBuilderInterface { $this->explain = FALSE; } - - /** * Method to simplify select_ methods * @@ -1144,7 +1142,7 @@ class QueryBuilder implements QueryBuilderInterface { * @param boolean $reset * @return PDOStatement */ - protected function _run(string $type, string $table, $sql=NULL, $vals=NULL, bool $reset=TRUE): PDOStatement + protected function _run(string $type, string $table, string $sql=NULL, array $vals=NULL, bool $reset=TRUE): PDOStatement { if ($sql === NULL) { @@ -1153,7 +1151,7 @@ class QueryBuilder implements QueryBuilderInterface { if ($vals === NULL) { - $vals = array_merge($this->state->getValues(), (array) $this->state->getWhereValues()); + $vals = array_merge($this->state->getValues(), $this->state->getWhereValues()); } $startTime = microtime(TRUE); @@ -1185,7 +1183,7 @@ class QueryBuilder implements QueryBuilderInterface { * @param int $totalTime * @return void */ - protected function _appendQuery($vals, string $sql, int $totalTime) + protected function _appendQuery(array $vals = NULL, string $sql, int $totalTime) { $evals = \is_array($vals) ? $vals : []; $esql = str_replace('?', "%s", $sql); diff --git a/src/QueryBuilderInterface.php b/src/QueryBuilderInterface.php index 657c120..4e0544a 100644 --- a/src/QueryBuilderInterface.php +++ b/src/QueryBuilderInterface.php @@ -18,9 +18,6 @@ use PDOStatement; /** * Interface defining the Query Builder class - * - * @package Query - * @subpackage QueryBuilder */ interface QueryBuilderInterface { @@ -36,8 +33,6 @@ interface QueryBuilderInterface { */ public function select(string $fields): QueryBuilderInterface; - // -------------------------------------------------------------------------- - /** * Selects the maximum value of a field from a query * @@ -47,8 +42,6 @@ interface QueryBuilderInterface { */ public function selectMax(string $field, $as=FALSE): QueryBuilderInterface; - // -------------------------------------------------------------------------- - /** * Selects the minimum value of a field from a query * @@ -58,8 +51,6 @@ interface QueryBuilderInterface { */ public function selectMin(string $field, $as=FALSE): QueryBuilderInterface; - // -------------------------------------------------------------------------- - /** * Selects the average value of a field from a query * @@ -69,8 +60,6 @@ interface QueryBuilderInterface { */ public function selectAvg(string $field, $as=FALSE): QueryBuilderInterface; - // -------------------------------------------------------------------------- - /** * Selects the sum of a field from a query * @@ -80,8 +69,6 @@ interface QueryBuilderInterface { */ public function selectSum(string $field, $as=FALSE): QueryBuilderInterface; - // --------------------------------------------------------------------------q - /** * Adds the 'distinct' keyword to a query * @@ -89,8 +76,6 @@ interface QueryBuilderInterface { */ public function distinct(): QueryBuilderInterface; - // -------------------------------------------------------------------------- - /** * Shows the query plan for the query * @@ -98,15 +83,13 @@ interface QueryBuilderInterface { */ public function explain(): QueryBuilderInterface; - // -------------------------------------------------------------------------- - /** * Specify the database table to select from * * @param string $tblname * @return QueryBuilderInterface */ - public function from($tblname): QueryBuilderInterface; + public function from(string $tblname): QueryBuilderInterface; // -------------------------------------------------------------------------- // ! 'Like' methods @@ -116,47 +99,41 @@ interface QueryBuilderInterface { * Creates a Like clause in the sql statement * * @param string $field - * @param mixed $val + * @param mixed $values * @param string $pos * @return QueryBuilderInterface */ - public function like($field, $val, $pos='both'): QueryBuilderInterface; - - // -------------------------------------------------------------------------- + public function like(string $field, $values, string $pos='both'): QueryBuilderInterface; /** * Generates an OR Like clause * * @param string $field - * @param mixed $val + * @param mixed $values * @param string $pos * @return QueryBuilderInterface */ - public function orLike($field, $val, $pos='both'): QueryBuilderInterface; - - // -------------------------------------------------------------------------- + public function orLike(string $field, $values, string $pos='both'): QueryBuilderInterface; /** * Generates a NOT LIKE clause * * @param string $field - * @param mixed $val + * @param mixed $values * @param string $pos * @return QueryBuilderInterface */ - public function notLike($field, $val, $pos='both'): QueryBuilderInterface; - - // -------------------------------------------------------------------------- + public function notLike(string $field, $values, string $pos='both'): QueryBuilderInterface; /** * Generates a OR NOT LIKE clause * * @param string $field - * @param mixed $val + * @param mixed $values * @param string $pos * @return QueryBuilderInterface */ - public function orNotLike($field, $val, $pos='both'): QueryBuilderInterface; + public function orNotLike(string $field, $values, string $pos='both'): QueryBuilderInterface; // -------------------------------------------------------------------------- // ! Having methods @@ -166,21 +143,19 @@ interface QueryBuilderInterface { * Generates a 'Having' clause * * @param mixed $key - * @param mixed $val + * @param mixed $values * @return QueryBuilderInterface */ - public function having($key, $val=[]): QueryBuilderInterface; - - // -------------------------------------------------------------------------- + public function having($key, $values=[]): QueryBuilderInterface; /** * Generates a 'Having' clause prefixed with 'OR' * * @param mixed $key - * @param mixed $val + * @param mixed $values * @return QueryBuilderInterface */ - public function orHaving($key, $val=[]): QueryBuilderInterface; + public function orHaving($key, $values=[]): QueryBuilderInterface; // -------------------------------------------------------------------------- // ! 'Where' methods @@ -192,66 +167,56 @@ interface QueryBuilderInterface { * passed array with key / value pairs * * @param mixed $key - * @param mixed $val + * @param mixed $values * @param bool $escape * @return QueryBuilderInterface */ - public function where($key, $val=[], $escape = NULL): QueryBuilderInterface; - - // -------------------------------------------------------------------------- + public function where($key, $values=[], $escape = NULL): QueryBuilderInterface; /** * Where clause prefixed with "OR" * * @param string $key - * @param mixed $val + * @param mixed $values * @return QueryBuilderInterface */ - public function orWhere($key, $val=[]): QueryBuilderInterface; - - // -------------------------------------------------------------------------- + public function orWhere($key, $values=[]): QueryBuilderInterface; /** * Where clause with 'IN' statement * * @param mixed $field - * @param mixed $val + * @param mixed $values * @return QueryBuilderInterface */ - public function whereIn($field, $val=[]): QueryBuilderInterface; - - // -------------------------------------------------------------------------- + public function whereIn($field, $values=[]): QueryBuilderInterface; /** * Where in statement prefixed with "or" * * @param string $field - * @param mixed $val + * @param mixed $values * @return QueryBuilderInterface */ - public function orWhereIn($field, $val=[]): QueryBuilderInterface; - - // -------------------------------------------------------------------------- + public function orWhereIn($field, $values=[]): QueryBuilderInterface; /** * WHERE NOT IN (FOO) clause * * @param string $field - * @param mixed $val + * @param mixed $values * @return QueryBuilderInterface */ - public function whereNotIn($field, $val=[]): QueryBuilderInterface; - - // -------------------------------------------------------------------------- + public function whereNotIn($field, $values=[]): QueryBuilderInterface; /** * OR WHERE NOT IN (FOO) clause * * @param string $field - * @param mixed $val + * @param mixed $values * @return QueryBuilderInterface */ - public function orWhereNotIn($field, $val=[]): QueryBuilderInterface; + public function orWhereNotIn($field, $values=[]): QueryBuilderInterface; // -------------------------------------------------------------------------- // ! Other Query Modifier methods @@ -261,12 +226,10 @@ interface QueryBuilderInterface { * Sets values for inserts / updates / deletes * * @param mixed $key - * @param mixed $val + * @param mixed $values * @return QueryBuilderInterface */ - public function set($key, $val = NULL): QueryBuilderInterface; - - // -------------------------------------------------------------------------- + public function set($key, $values = NULL): QueryBuilderInterface; /** * Creates a join phrase in a compiled query @@ -276,9 +239,7 @@ interface QueryBuilderInterface { * @param string $type * @return QueryBuilderInterface */ - public function join($table, $condition, $type=''): QueryBuilderInterface; - - // -------------------------------------------------------------------------- + public function join(string $table, string $condition, string $type=''): QueryBuilderInterface; /** * Group the results by the selected field(s) @@ -288,8 +249,6 @@ interface QueryBuilderInterface { */ public function groupBy($field): QueryBuilderInterface; - // -------------------------------------------------------------------------- - /** * Order the results by the selected field(s) * @@ -297,9 +256,7 @@ interface QueryBuilderInterface { * @param string $type * @return QueryBuilderInterface */ - public function orderBy($field, $type=""): QueryBuilderInterface; - - // -------------------------------------------------------------------------- + public function orderBy(string $field, string $type=''): QueryBuilderInterface; /** * Set a limit on the current sql statement @@ -308,7 +265,7 @@ interface QueryBuilderInterface { * @param int|bool $offset * @return QueryBuilderInterface */ - public function limit($limit, $offset=FALSE): QueryBuilderInterface; + public function limit(int $limit, $offset=FALSE): QueryBuilderInterface; // -------------------------------------------------------------------------- // ! Query Grouping Methods @@ -321,8 +278,6 @@ interface QueryBuilderInterface { */ public function groupStart(): QueryBuilderInterface; - // -------------------------------------------------------------------------- - /** * Adds a paren to the current query for query grouping, * prefixed with 'NOT' @@ -331,8 +286,6 @@ interface QueryBuilderInterface { */ public function notGroupStart(): QueryBuilderInterface; - // -------------------------------------------------------------------------- - /** * Adds a paren to the current query for query grouping, * prefixed with 'OR' @@ -341,8 +294,6 @@ interface QueryBuilderInterface { */ public function orGroupStart(): QueryBuilderInterface; - // -------------------------------------------------------------------------- - /** * Adds a paren to the current query for query grouping, * prefixed with 'OR NOT' @@ -351,8 +302,6 @@ interface QueryBuilderInterface { */ public function orNotGroupStart(): QueryBuilderInterface; - // -------------------------------------------------------------------------- - /** * Ends a query group * @@ -373,9 +322,7 @@ interface QueryBuilderInterface { * @param int|bool $offset * @return PDOStatement */ - public function get($table='', $limit=FALSE, $offset=FALSE): PDOStatement; - - // -------------------------------------------------------------------------- + public function get(string $table='', $limit=FALSE, $offset=FALSE): ?PDOStatement; /** * Convenience method for get() with a where clause @@ -386,9 +333,7 @@ interface QueryBuilderInterface { * @param int|bool $offset * @return PDOStatement */ - public function getWhere($table, $where=[], $limit=FALSE, $offset=FALSE): PDOStatement; - - // -------------------------------------------------------------------------- + public function getWhere(string $table, $where=[], $limit=FALSE, $offset=FALSE): ?PDOStatement; /** * Retrieve the number of rows in the selected table @@ -396,9 +341,7 @@ interface QueryBuilderInterface { * @param string $table * @return int */ - public function countAll($table): int; - - // -------------------------------------------------------------------------- + public function countAll(string $table): int; /** * Retrieve the number of results for the generated query - used @@ -410,8 +353,6 @@ interface QueryBuilderInterface { */ public function countAllResults(string $table='', bool $reset=TRUE): int; - // -------------------------------------------------------------------------- - /** * Creates an insert clause, and executes it * @@ -419,31 +360,25 @@ interface QueryBuilderInterface { * @param mixed $data * @return PDOStatement */ - public function insert($table, $data=[]): PDOStatement; - - // -------------------------------------------------------------------------- + public function insert(string $table, $data=[]): ?PDOStatement; /** * Creates and executes a batch insertion query * * @param string $table * @param array $data - * @return \PDOStatement|null + * @return PDOStatement */ - public function insertBatch($table, $data=[]); - - // -------------------------------------------------------------------------- + public function insertBatch(string $table, $data=[]): ?PDOStatement; /** * Insertion with automatic overwrite, rather than attempted duplication * * @param string $table * @param array $data - * @return \PDOStatement|null + * @return PDOStatement */ - public function replace($table, $data=[]); - - // -------------------------------------------------------------------------- + public function replace(string $table, $data=[]): ?PDOStatement; /** * Creates an update clause, and executes it @@ -452,9 +387,7 @@ interface QueryBuilderInterface { * @param mixed $data * @return PDOStatement */ - public function update($table, $data=[]): PDOStatement; - - // -------------------------------------------------------------------------- + public function update(string $table, $data=[]): ?PDOStatement; /** * Creates a batch update, and executes it. @@ -463,11 +396,9 @@ interface QueryBuilderInterface { * @param string $table * @param array|object $data * @param string $where - * @return int|null + * @return PDOStatement */ - public function updateBatch($table, $data, $where); - - // -------------------------------------------------------------------------- + public function updateBatch(string $table, $data, $where): ?PDOStatement; /** * Deletes data from a table @@ -476,7 +407,7 @@ interface QueryBuilderInterface { * @param mixed $where * @return PDOStatement */ - public function delete($table, $where=''): PDOStatement; + public function delete(string $table, $where=''): ?PDOStatement; // -------------------------------------------------------------------------- // ! SQL Returning Methods diff --git a/src/State.php b/src/State.php index 5d4c491..efab148 100644 --- a/src/State.php +++ b/src/State.php @@ -6,12 +6,13 @@ * * PHP version 7.1 * - * @package Query - * @author Timothy J. Warren + * @package Query + * @author Timothy J. Warren * @copyright 2012 - 2018 Timothy J. Warren - * @license http://www.opensource.org/licenses/mit-license.html MIT License - * @link https://git.timshomepage.net/aviat4ion/Query + * @license http://www.opensource.org/licenses/mit-license.html MIT License + * @link https://git.timshomepage.net/aviat4ion/Query */ + namespace Query; /** @@ -92,7 +93,7 @@ class State { /** * Value for limit string - * @var int + * @var integer */ protected $limit; @@ -123,22 +124,20 @@ class State { */ protected $havingMap = []; - // -------------------------------------------------------------------------- - - /** - * @param string $str - * @return State - */ + /** + * @param string $str + * @return State + */ public function setSelectString(string $str): self - { - $this->selectString = $str; - return $this; - } + { + $this->selectString = $str; + return $this; + } /** * @return string */ - public function getSelectString(): string + public function getSelectString(): string { return $this->selectString; } @@ -147,7 +146,7 @@ class State { * @param string $str * @return State */ - public function appendSelectString(string $str): self + public function appendSelectString(string $str): self { $this->selectString .= $str; return $this; diff --git a/src/common.php b/src/common.php index 2dcb3f8..61a2f2d 100644 --- a/src/common.php +++ b/src/common.php @@ -13,14 +13,11 @@ * @link https://git.timshomepage.net/aviat4ion/Query */ - use Query\{ ConnectionManager, QueryBuilderInterface }; -// -------------------------------------------------------------------------- - /** * Global functions that don't really fit anywhere else */ @@ -36,8 +33,6 @@ function mb_trim(string $string): string return preg_replace('/(^\s+)|(\s+$)/u', '', $string); } -// -------------------------------------------------------------------------- - /** * Filter out db rows into one array * @@ -57,8 +52,6 @@ function dbFilter(array $array, $index): array return $newArray; } -// -------------------------------------------------------------------------- - /** * Zip a set of arrays together on common keys * @@ -87,8 +80,6 @@ function arrayZipper(array $zipperInput): array return $output; } -// -------------------------------------------------------------------------- - /** * Determine whether a value in the passed array matches the pattern * passed @@ -115,8 +106,6 @@ function regexInArray(array $array, string $pattern): bool return FALSE; } -// -------------------------------------------------------------------------- - /** * Connection function * diff --git a/tests/BaseDriverTest.php b/tests/BaseDriverTest.php index c2fb152..3c5d95a 100644 --- a/tests/BaseDriverTest.php +++ b/tests/BaseDriverTest.php @@ -12,9 +12,8 @@ * @license http://www.opensource.org/licenses/mit-license.html MIT License * @link https://git.timshomepage.net/aviat4ion/Query */ -namespace Query\Tests; -// -------------------------------------------------------------------------- +namespace Query\Tests; /** * Parent Database Test Class @@ -28,15 +27,11 @@ abstract class BaseDriverTest extends TestCase { abstract public function testConnection(); - // -------------------------------------------------------------------------- - public static function tearDownAfterClass() { self::$db = NULL; } - // -------------------------------------------------------------------------- - public function testGetTables() { $tables = self::$db->getTables(); @@ -44,8 +39,6 @@ abstract class BaseDriverTest extends TestCase { $this->assertTrue( ! empty($tables)); } - // -------------------------------------------------------------------------- - public function testGetSystemTables() { $tables = self::$db->getSystemTables(); @@ -53,16 +46,12 @@ abstract class BaseDriverTest extends TestCase { $this->assertTrue( ! empty($tables)); } - // -------------------------------------------------------------------------- - public function testBackupData() { $this->assertTrue(is_string(self::$db->getUtil()->backupData(array('create_delete', FALSE)))); $this->assertTrue(is_string(self::$db->getUtil()->backupData(array('create_delete', TRUE)))); } - // -------------------------------------------------------------------------- - public function testGetColumns() { $cols = self::$db->getColumns('test'); @@ -70,8 +59,6 @@ abstract class BaseDriverTest extends TestCase { $this->assertTrue( ! empty($cols)); } - // -------------------------------------------------------------------------- - public function testGetTypes() { $types = self::$db->getTypes(); @@ -79,8 +66,6 @@ abstract class BaseDriverTest extends TestCase { $this->assertTrue( ! empty($types)); } - // -------------------------------------------------------------------------- - public function testGetFKs() { $expected = array(array( @@ -95,16 +80,12 @@ abstract class BaseDriverTest extends TestCase { $this->assertEqual($expected, $keys); } - // -------------------------------------------------------------------------- - public function testGetIndexes() { $keys = self::$db->getIndexes('test'); $this->assertTrue(is_array($keys)); } - // -------------------------------------------------------------------------- - public function testGetViews() { $views = self::$db->getViews(); @@ -113,8 +94,6 @@ abstract class BaseDriverTest extends TestCase { $this->assertTrue(is_array($views)); } - // -------------------------------------------------------------------------- - public function testGetTriggers() { // @TODO standardize trigger output for different databases @@ -123,8 +102,6 @@ abstract class BaseDriverTest extends TestCase { $this->assertTrue(is_array($triggers)); } - // -------------------------------------------------------------------------- - public function testGetSequences() { $seqs = self::$db->getSequences(); @@ -138,16 +115,12 @@ abstract class BaseDriverTest extends TestCase { $this->assertEqual($expected, $seqs); } - // -------------------------------------------------------------------------- - public function testGetProcedures() { $procedures = self::$db->getProcedures(); $this->assertTrue(is_array($procedures)); } - // -------------------------------------------------------------------------- - public function testGetFunctions() { $funcs = self::$db->getFunctions(); diff --git a/tests/ConnectionManagerTest.php b/tests/ConnectionManagerTest.php index cd7f246..e99e2b6 100644 --- a/tests/ConnectionManagerTest.php +++ b/tests/ConnectionManagerTest.php @@ -26,8 +26,6 @@ class ConnectionManagerTest extends TestCase { self::$instance = ConnectionManager::getInstance(); } - // -------------------------------------------------------------------------- - public function testNoClone() { $this->expectException('DomainException'); @@ -36,8 +34,6 @@ class ConnectionManagerTest extends TestCase { $this->assertNull($clone); } - // -------------------------------------------------------------------------- - public function testNoSerialize() { $this->expectException(DomainException::class); @@ -49,8 +45,6 @@ class ConnectionManagerTest extends TestCase { self::$instance->__sleep(); } - // -------------------------------------------------------------------------- - public function testNoUnserialize() { $this->expectException(DomainException::class); @@ -58,8 +52,6 @@ class ConnectionManagerTest extends TestCase { self::$instance->__wakeup(); } - // -------------------------------------------------------------------------- - public function testParseParams() { $params = (object) array( @@ -80,8 +72,6 @@ class ConnectionManagerTest extends TestCase { $this->assertEqual($expected, self::$instance->parseParams($params)); } - // -------------------------------------------------------------------------- - public function testConnect() { $params = (object) array( @@ -101,8 +91,6 @@ class ConnectionManagerTest extends TestCase { $this->assertEqual($conn, self::$instance->getConnection()); } - // -------------------------------------------------------------------------- - public function testGetConnection() { $params = (object) array( diff --git a/tests/CoreTest.php b/tests/CoreTest.php index 55091b5..cf22ca2 100644 --- a/tests/CoreTest.php +++ b/tests/CoreTest.php @@ -14,9 +14,6 @@ */ namespace Query\Tests; - -// -------------------------------------------------------------------------- - /** * CoreTest class - Compatibility and core functionality tests * @@ -36,8 +33,6 @@ class CoreTest extends TestCase { $this->assertTrue(PHP_VERSION_ID >= 70000); } - // -------------------------------------------------------------------------- - /** * TestHasPDO function. * diff --git a/tests/Drivers/MySQL/MySQLDriverTest.php b/tests/Drivers/MySQL/MySQLDriverTest.php index 87b4fb2..81ed6b3 100644 --- a/tests/Drivers/MySQL/MySQLDriverTest.php +++ b/tests/Drivers/MySQL/MySQLDriverTest.php @@ -22,7 +22,6 @@ use TypeError; /** * MySQLTest class. * - * @extends DBTest * @requires extension pdo_mysql */ class MySQLDriverTest extends BaseDriverTest { @@ -47,22 +46,16 @@ class MySQLDriverTest extends BaseDriverTest { self::$db->setTablePrefix('create_'); } - // -------------------------------------------------------------------------- - public function testExists() { $this->assertTrue(\in_array('mysql', PDO::getAvailableDrivers(), TRUE)); } - // -------------------------------------------------------------------------- - public function testConnection() { $this->assertIsA(self::$db, Driver::class); } - // -------------------------------------------------------------------------- - public function testCreateTable() { self::$db->exec(file_get_contents(QTEST_DIR.'/db_files/mysql.sql')); @@ -101,8 +94,6 @@ class MySQLDriverTest extends BaseDriverTest { } - // -------------------------------------------------------------------------- - public function testTruncate() { self::$db->truncate('test'); @@ -112,8 +103,6 @@ class MySQLDriverTest extends BaseDriverTest { $this->assertEquals(0, self::$db->countAll('join')); } - // -------------------------------------------------------------------------- - public function testPreparedStatements() { $sql = <<expectException(TypeError::class); @@ -143,8 +130,6 @@ SQL; } - // -------------------------------------------------------------------------- - public function testPrepareExecute() { $sql = <<beginTransaction(); @@ -172,8 +155,6 @@ SQL; $this->assertTrue($res); } - // -------------------------------------------------------------------------- - public function testRollbackTransaction() { $res = self::$db->beginTransaction(); @@ -185,26 +166,18 @@ SQL; $this->assertTrue($res); } - // -------------------------------------------------------------------------- - public function testGetSchemas() { $this->assertNull(self::$db->getSchemas()); } - // -------------------------------------------------------------------------- - public function testGetSequences() { $this->assertNull(self::$db->getSequences()); } - // -------------------------------------------------------------------------- - public function testBackup() { $this->assertTrue(is_string(self::$db->getUtil()->backupStructure())); } - - } \ No newline at end of file diff --git a/tests/Drivers/MySQL/MySQLQueryBuilderTest.php b/tests/Drivers/MySQL/MySQLQueryBuilderTest.php index 89ef900..5ea40bc 100644 --- a/tests/Drivers/MySQL/MySQLQueryBuilderTest.php +++ b/tests/Drivers/MySQL/MySQLQueryBuilderTest.php @@ -17,8 +17,6 @@ namespace Query\Tests\Drivers\MySQL; use PDO; use Query\Tests\BaseQueryBuilderTest; -// -------------------------------------------------------------------------- - /** * @requires extension pdo_mysql */ @@ -51,15 +49,11 @@ class MySQLQueryBuilderTest extends BaseQueryBuilderTest { self::$db = Query($params); } - // -------------------------------------------------------------------------- - public function testExists() { $this->assertTrue(\in_array('mysql', PDO::getAvailableDrivers(), TRUE)); } - // -------------------------------------------------------------------------- - public function testQueryExplain() { $query = self::$db->select('id, key as k, val') diff --git a/tests/Drivers/PgSQL/PgSQLDriverTest.php b/tests/Drivers/PgSQL/PgSQLDriverTest.php index 7bbe942..d88ebe9 100644 --- a/tests/Drivers/PgSQL/PgSQLDriverTest.php +++ b/tests/Drivers/PgSQL/PgSQLDriverTest.php @@ -12,11 +12,9 @@ * @license http://www.opensource.org/licenses/mit-license.html MIT License * @link https://git.timshomepage.net/aviat4ion/Query */ + namespace Query\Tests\Drivers\PgSQL; -// -------------------------------------------------------------------------- - -use InvalidArgumentException; use PDO; use Query\Drivers\Pgsql\Driver; use Query\Tests\BaseDriverTest; @@ -57,16 +55,12 @@ class PgSQLDriverTest extends BaseDriverTest { self::$db->setTablePrefix('create_'); } - // -------------------------------------------------------------------------- - public function testExists() { $drivers = PDO::getAvailableDrivers(); $this->assertTrue(in_array('pgsql', $drivers, TRUE)); } - // -------------------------------------------------------------------------- - public function testConnection() { if (empty(self::$db)) return; @@ -74,8 +68,6 @@ class PgSQLDriverTest extends BaseDriverTest { $this->assertIsA(self::$db, Driver::class); } - // -------------------------------------------------------------------------- - public function testCreateTable() { self::$db->exec(file_get_contents(QTEST_DIR.'/db_files/pgsql.sql')); @@ -126,8 +118,6 @@ class PgSQLDriverTest extends BaseDriverTest { } - // -------------------------------------------------------------------------- - public function testTruncate() { self::$db->truncate('test'); @@ -137,8 +127,6 @@ class PgSQLDriverTest extends BaseDriverTest { $this->assertEquals(0, self::$db->countAll('join')); } - // -------------------------------------------------------------------------- - public function testPreparedStatements() { $sql = <<expectException(TypeError::class); @@ -173,8 +159,6 @@ SQL; self::$db->prepareQuery($sql, 'foo'); } - // -------------------------------------------------------------------------- - public function testPrepareExecute() { if (empty(self::$db)) return; @@ -197,8 +181,6 @@ SQL; ], $res); } - // -------------------------------------------------------------------------- - public function testCommitTransaction() { if (empty(self::$db)) return; @@ -212,8 +194,6 @@ SQL; $this->assertTrue($res); } - // -------------------------------------------------------------------------- - public function testRollbackTransaction() { if (empty(self::$db)) return; @@ -227,22 +207,16 @@ SQL; $this->assertTrue($res); } - // -------------------------------------------------------------------------- - public function testGetSchemas() { $this->assertTrue(is_array(self::$db->getSchemas())); } - // -------------------------------------------------------------------------- - public function testGetDBs() { $this->assertTrue(is_array(self::$db->getDbs())); } - // -------------------------------------------------------------------------- - public function testGetFunctions() { $this->assertNull(self::$db->getFunctions()); diff --git a/tests/Drivers/PgSQL/PgSQLQueryBuilderTest.php b/tests/Drivers/PgSQL/PgSQLQueryBuilderTest.php index 42fe2fa..bd36aef 100644 --- a/tests/Drivers/PgSQL/PgSQLQueryBuilderTest.php +++ b/tests/Drivers/PgSQL/PgSQLQueryBuilderTest.php @@ -17,8 +17,6 @@ namespace Query\Tests\Drivers\PgSQL; use PDO; use Query\Tests\BaseQueryBuilderTest; -// -------------------------------------------------------------------------- - /** * @requires extension pdo_pgsql */ @@ -58,19 +56,15 @@ class PgSQLQueryBuilderTest extends BaseQueryBuilderTest { // If the database isn't installed, skip the tests if ( ! \in_array('pgsql', PDO::getAvailableDrivers(), TRUE)) { - $this->markTestSkipped("Postgres extension for PDO not loaded"); + $this->markTestSkipped('Postgres extension for PDO not loaded'); } } - // -------------------------------------------------------------------------- - public function testExists() { $this->assertTrue(\in_array('pgsql', PDO::getAvailableDrivers(), TRUE)); } - // -------------------------------------------------------------------------- - public function testQueryExplain() { $query = self::$db->select('id, key as k, val') diff --git a/tests/Drivers/SQLite/SQLiteDriverTest.php b/tests/Drivers/SQLite/SQLiteDriverTest.php index a00c6c3..bbe30b9 100644 --- a/tests/Drivers/SQLite/SQLiteDriverTest.php +++ b/tests/Drivers/SQLite/SQLiteDriverTest.php @@ -18,8 +18,6 @@ use PDO; use Query\Drivers\Sqlite\Driver; use Query\Tests\BaseDriverTest; -// -------------------------------------------------------------------------- - /** * SQLiteTest class. * @@ -64,8 +62,6 @@ class SQLiteDriverTest extends BaseDriverTest { $this->assertTrue(\in_array('create_delete', $dbs, TRUE)); } - // -------------------------------------------------------------------------- - /*public function testBackupData() { $sql = mb_trim(self::$db->getUtil()->backupData(array('create_join', 'create_test'))); @@ -83,8 +79,6 @@ SQL; $this->assertEqual($expectedArray, $sqlArray); }*/ - // -------------------------------------------------------------------------- - public function testBackupStructure() { $sql = mb_trim(self::$db->getUtil()->backupStructure()); @@ -159,8 +153,6 @@ SQL; $this->assertEqual($expectedArray, $resultArray); } - // -------------------------------------------------------------------------- - public function testDeleteTable() { $sql = self::$db->getUtil()->deleteTable('create_delete'); @@ -188,16 +180,12 @@ SQL; unset($db); } - // -------------------------------------------------------------------------- - public function testTruncate() { self::$db->truncate('create_test'); $this->assertEquals(0, self::$db->countAll('create_test')); } - // -------------------------------------------------------------------------- - public function testPreparedStatements() { $sql = <<beginTransaction(); @@ -253,8 +237,6 @@ SQL; $this->assertTrue($res); } - // -------------------------------------------------------------------------- - public function testRollbackTransaction() { $res = self::$db->beginTransaction(); @@ -266,15 +248,11 @@ SQL; $this->assertTrue($res); } - // -------------------------------------------------------------------------- - public function testGetDBs() { $this->assertTrue(is_array(self::$db->getDbs())); } - // -------------------------------------------------------------------------- - public function testGetSchemas() { $this->assertNull(self::$db->getSchemas()); @@ -296,30 +274,22 @@ SQL; $this->assertEqual(NULL, $sql); } - // -------------------------------------------------------------------------- - public function testGetSystemTables() { $sql = self::$db->getSystemTables(); $this->assertTrue(\is_array($sql)); } - // -------------------------------------------------------------------------- - public function testGetSequences() { $this->assertNull(self::$db->getSequences()); } - // -------------------------------------------------------------------------- - public function testGetFunctions() { $this->assertNull(self::$db->getFunctions()); } - // -------------------------------------------------------------------------- - public function testGetProcedures() { $this->assertNull(self::$db->getProcedures()); diff --git a/tests/Drivers/SQLite/SQLiteQueryBuilderTest.php b/tests/Drivers/SQLite/SQLiteQueryBuilderTest.php index 909a1b0..6bb7f62 100644 --- a/tests/Drivers/SQLite/SQLiteQueryBuilderTest.php +++ b/tests/Drivers/SQLite/SQLiteQueryBuilderTest.php @@ -17,8 +17,6 @@ namespace Query\Tests\Drivers\SQLite; use PDO; use Query\Tests\BaseQueryBuilderTest; -// -------------------------------------------------------------------------- - /** * Class for testing Query Builder with SQLite * @@ -32,8 +30,6 @@ use Query\Tests\BaseQueryBuilderTest; self::$db = Query('test_sqlite'); } - // -------------------------------------------------------------------------- - public function testQueryFunctionAlias() { $db = Query('test_sqlite'); @@ -41,8 +37,6 @@ use Query\Tests\BaseQueryBuilderTest; $this->assertTrue(self::$db === $db, "Alias passed into query function gives the original object back"); } - // -------------------------------------------------------------------------- - public function testQueryExplain() { $query = self::$db->select('id, key as k, val') diff --git a/tests/bootstrap.php b/tests/bootstrap.php index d0c614f..07f7b44 100644 --- a/tests/bootstrap.php +++ b/tests/bootstrap.php @@ -18,8 +18,6 @@ define('QTEST_DIR', realpath(__DIR__)); define('QBASE_DIR', realpath(QTEST_DIR.'/../') . '/'); define('QDS', DIRECTORY_SEPARATOR); -// -------------------------------------------------------------------------- - function get_json_config() { $files = array( @@ -38,7 +36,6 @@ function get_json_config() return FALSE; } -// -------------------------------------------------------------------------- $path = QTEST_DIR.QDS.'db_files'.QDS.'test_sqlite.db'; @unlink($path);