diff --git a/RoboFile.php b/RoboFile.php index 8ff0e4b..a8d8662 100644 --- a/RoboFile.php +++ b/RoboFile.php @@ -114,9 +114,7 @@ class RoboFile extends \Robo\Tasks { public function docs() { $cmd_parts = [ - 'cd build', - '../vendor/bin/phpdox', - 'cd ..' + 'phpdoc' ]; $this->_run($cmd_parts, ' && '); } @@ -232,6 +230,7 @@ class RoboFile extends \Robo\Tasks { ->configFile('phpunit.xml') ->printed(true) ->run(); + $this->_run(["php tests/index.php"]); } /** diff --git a/composer.json b/composer.json index b0bddb1..c41b53b 100644 --- a/composer.json +++ b/composer.json @@ -21,7 +21,7 @@ "role": "Developer" }], "require": { - "php": ">=5.4" + "php": "^7.0" }, "require-dev": { "consolidation/robo": "1.0.0-RC2", @@ -33,18 +33,14 @@ "phpmd/phpmd": "^2.4", "phpunit/phpunit": "^5.5", "sebastian/phpcpd": "^2.0", + "simpletest/simpletest": "^1.1", "squizlabs/php_codesniffer": "^3.0.0@RC", - "theseer/phpdox": "^0.9.0" + "phpdocumentor/phpdocumentor": "2.*" }, "autoload": { "psr-4": { "Query\\": "src/Query" }, "files": ["src/common.php"] - }, - "autoload-dev": { - "psr-4" : { - "CodeIgniter\\": "build/CodeIgniter" - } } } diff --git a/phpunit.xml b/phpunit.xml index 4a660aa..5e94913 100644 --- a/phpunit.xml +++ b/phpunit.xml @@ -5,7 +5,7 @@ bootstrap="tests/bootstrap.php"> - src + src/ autoload.php diff --git a/src/Query/BadDBDriverException.php b/src/Query/BadDBDriverException.php index a8fc3db..bcb4344 100644 --- a/src/Query/BadDBDriverException.php +++ b/src/Query/BadDBDriverException.php @@ -13,18 +13,17 @@ * @link https://git.timshomepage.net/aviat4ion/Query */ - -// -------------------------------------------------------------------------- - namespace Query; +use InvalidArgumentException; + /** * Generic exception for bad drivers * * @package Query * @subpackage Core */ -class BadDBDriverException extends \InvalidArgumentException { +class BadDBDriverException extends InvalidArgumentException { } // End of BadDBDriverException.php \ No newline at end of file diff --git a/src/Query/ConnectionManager.php b/src/Query/ConnectionManager.php index f513346..425a96f 100644 --- a/src/Query/ConnectionManager.php +++ b/src/Query/ConnectionManager.php @@ -13,11 +13,11 @@ * @link https://git.timshomepage.net/aviat4ion/Query */ - -// -------------------------------------------------------------------------- - namespace Query; +use InvalidArgumentException; +use DomainException; + /** * Connection manager class to manage connections for the * Query method @@ -46,20 +46,20 @@ final class ConnectionManager { * @codeCoverageIgnore */ private function __construct() - { - } + { + } // -------------------------------------------------------------------------- /** * Private clone method to prevent cloning * - * @throws \DomainException + * @throws DomainException * @return void */ public function __clone() { - throw new \DomainException("Can't clone singleton"); + throw new DomainException("Can't clone singleton"); } // -------------------------------------------------------------------------- @@ -67,12 +67,12 @@ final class ConnectionManager { /** * Prevent serialization of this object * - * @throws \DomainException + * @throws DomainException * @return void */ public function __sleep() { - throw new \DomainException("No serializing of singleton"); + throw new DomainException("No serializing of singleton"); } // -------------------------------------------------------------------------- @@ -80,12 +80,12 @@ final class ConnectionManager { /** * Make sure serialize/deserialize doesn't work * - * @throws \DomainException + * @throws DomainException * @return void */ public function __wakeup() { - throw new \DomainException("Can't unserialize singleton"); + throw new DomainException("Can't unserialize singleton"); } // -------------------------------------------------------------------------- @@ -113,7 +113,7 @@ final class ConnectionManager { * * @param string|array|object $name * @return QueryBuilder - * @throws \InvalidArgumentException + * @throws InvalidArgumentException */ public function get_connection($name = '') { @@ -128,7 +128,7 @@ final class ConnectionManager { } // You should actually connect before trying to get a connection... - throw new \InvalidArgumentException("The specified connection does not exist"); + throw new InvalidArgumentException("The specified connection does not exist"); } // -------------------------------------------------------------------------- diff --git a/src/Query/Drivers/Firebird/Driver.php b/src/Query/Drivers/Firebird/Driver.php index f5a8094..4512fcc 100644 --- a/src/Query/Drivers/Firebird/Driver.php +++ b/src/Query/Drivers/Firebird/Driver.php @@ -79,7 +79,7 @@ class Driver extends AbstractDriver { * @param string $user * @param string $pass * @param array $options - * @throws \PDOException + * @throws PDOException */ public function __construct($dbpath, $user='SYSDBA', $pass='masterkey', array $options = []) { diff --git a/src/Query/Drivers/PDOStatementInterface.php b/src/Query/Drivers/PDOStatementInterface.php index 2ce0695..27559bb 100644 --- a/src/Query/Drivers/PDOStatementInterface.php +++ b/src/Query/Drivers/PDOStatementInterface.php @@ -26,7 +26,7 @@ interface PDOStatementInterface { * Bind a column to a PHP variable * * @param mixed $column Number or name of the column in the result set - * @param mixed &$param Name of the PHP variable to which the column will be bound + * @param mixed $param Name of the PHP variable to which the column will be bound * @param int $type Data type of the parameter, specified by the PDO::PARAM_* constants * @param int $maxlen A hint for pre-allocation * @param mixed $driverdata Optional parameter(s) for the driver @@ -40,7 +40,7 @@ interface PDOStatementInterface { * @param mixed $parameter Parameter identifier. For a prepared statement using named placeholders, this will be a * parameter name of the form :name. For a prepared statement using question mark placeholders, this will be the * 1-indexed position of the parameter. - * @param mixed &$variable Name of the PHP variable to bind to the SQL statement parameter. + * @param mixed $variable Name of the PHP variable to bind to the SQL statement parameter. * @param int $data_type Explicit data type for the parameter using the PDO::PARAM_* constants. To return an INOUT * parameter from a stored procedure, use the bitwise OR operator to set the PDO::PARAM_INPUT_OUTPUT bits * for the data_type parameter. diff --git a/src/Query/QueryBuilder.php b/src/Query/QueryBuilder.php index a41f53b..15b5724 100644 --- a/src/Query/QueryBuilder.php +++ b/src/Query/QueryBuilder.php @@ -16,6 +16,7 @@ namespace Query; use Query\Drivers\DriverInterface; +use BadMethodCallException; /** * Convenience class for creating sql queries - also the class that @@ -99,7 +100,7 @@ class QueryBuilder extends AbstractQueryBuilder implements QueryBuilderInterface * @param string $name * @param array $params * @return mixed - * @throws \BadMethodCallException + * @throws BadMethodCallException */ public function __call($name, $params) { @@ -118,7 +119,7 @@ class QueryBuilder extends AbstractQueryBuilder implements QueryBuilderInterface } - throw new \BadMethodCallException("Method does not exist"); + throw new BadMethodCallException("Method does not exist"); } // -------------------------------------------------------------------------- @@ -174,7 +175,7 @@ class QueryBuilder extends AbstractQueryBuilder implements QueryBuilderInterface * Selects the maximum value of a field from a query * * @param string $field - * @param string|FALSE $as + * @param string|bool $as * @return QueryBuilderInterface */ public function select_max($field, $as=FALSE) @@ -627,7 +628,9 @@ class QueryBuilder extends AbstractQueryBuilder implements QueryBuilderInterface */ public function not_group_start() { - $this->_append_map('', ' NOT (', 'group_start'); + $conj = (empty($this->query_map)) ? ' WHERE ' : ' AND '; + + $this->_append_map($conj, ' NOT (', 'group_start'); return $this; } @@ -729,7 +732,7 @@ class QueryBuilder extends AbstractQueryBuilder implements QueryBuilderInterface // -------------------------------------------------------------------------- /** - * Retreive the number of rows in the selected table + * Retrieve the number of rows in the selected table * * @param string $table * @return int diff --git a/src/common.php b/src/common.php index ac417eb..21fb772 100644 --- a/src/common.php +++ b/src/common.php @@ -13,7 +13,6 @@ * @link https://git.timshomepage.net/aviat4ion/Query */ - use Query\ConnectionManager; require __DIR__ . '/../vendor/autoload.php'; diff --git a/tests/core/base_query_builder_test.php b/tests/core/base_query_builder_test.php index f3cf182..255bb87 100644 --- a/tests/core/base_query_builder_test.php +++ b/tests/core/base_query_builder_test.php @@ -333,6 +333,40 @@ abstract class QBTest extends Query_TestCase { // -------------------------------------------------------------------------- + public function testAndNotGroupStart() + { + $query = self::$db->select('id, key as k, val') + ->from('test') + ->group_start() + ->where('id >', 1) + ->where('id <', 900) + ->group_end() + ->not_group_start() + ->where('id =', 0) + ->group_end() + ->limit(2, 1) + ->get(); + + $this->assertIsA($query, 'PDOStatement'); + } + + // -------------------------------------------------------------------------- + + public function testNotGroupStart() + { + $query = self::$db->select('id, key as k, val') + ->from('test') + ->not_group_start() + ->where('id =', 0) + ->group_end() + ->limit(2, 1) + ->get(); + + $this->assertIsA($query, 'PDOStatement'); + } + + // -------------------------------------------------------------------------- + public function testGroupCamelCase() { $query = self::$db->select('id, key as k, val') diff --git a/tests/core/connection_manager_test.php b/tests/core/connection_manager_test.php index 2115922..a2311a8 100644 --- a/tests/core/connection_manager_test.php +++ b/tests/core/connection_manager_test.php @@ -13,7 +13,8 @@ class Connection_Manager_Test extends Query_TestCase { public function testNoClone() { - $this->setExpectedException('DomainException', "Can't clone singleton"); + $this->expectException('DomainException'); + $this->expectExceptionMessage("Can't clone singleton"); $clone = clone self::$instance; } diff --git a/tests/index.php b/tests/index.php index 260faf2..b344823 100644 --- a/tests/index.php +++ b/tests/index.php @@ -28,11 +28,29 @@ if ( ! defined('IS_QUERCUS')) } } +function get_json_config() +{ + $files = array( + __DIR__ . '/settings.json', + __DIR__ . '/settings.json.dist' + ); + + foreach($files as $file) + { + if (is_file($file)) + { + return json_decode(file_get_contents($file)); + } + } + + return FALSE; +} + // -------------------------------------------------------------------------- -// Include simpletest -// it has to be in the tests folder -require_once('simpletest/autorun.php'); +// Set up autoloaders +require_once(__DIR__ . '/../vendor/autoload.php'); +require_once(__DIR__ . '/../vendor/simpletest/simpletest/autorun.php'); /** * Base class for TestCases @@ -95,6 +113,16 @@ abstract class Query_TestCase extends UnitTestCase { $this->skipUnless(FALSE, $message); } + /** + * Alias to the method in PHPUnit + * + * @param string $message + */ + public function expectExceptionMessage($message) + { + // noop + } + /** * Alias for phpunit method * @@ -104,7 +132,7 @@ abstract class Query_TestCase extends UnitTestCase { */ public function setExpectedException($name, $message='', $code=NULL) { - $this->expectException($name); + $this->expectException($name, $message); } } @@ -117,9 +145,6 @@ define('QTEST_DIR', __DIR__); define('QBASE_DIR', realpath(__DIR__ . '/../') . '/'); define('QDS', DIRECTORY_SEPARATOR); -// Include db classes -require_once(QBASE_DIR . 'autoload.php'); - // Include db tests // Load db classes based on capability $test_path = QTEST_DIR.'/databases/'; @@ -142,7 +167,7 @@ $driver_test_map = array( 'MySQL' => in_array('mysql', $drivers), 'SQLite' => in_array('sqlite', $drivers), 'PgSQL' => in_array('pgsql', $drivers), - //'Firebird' => in_array('interbase', $drivers), + 'Firebird' => in_array('interbase', $drivers), //'PDOFirebird' => in_array('firebird', $drivers) );