Add Or Not Like method

This commit is contained in:
Timothy Warren 2016-10-12 20:32:23 -04:00
parent ca601623ba
commit 3eb4d889f9
12 changed files with 102 additions and 46 deletions

View File

@ -114,9 +114,7 @@ class RoboFile extends \Robo\Tasks {
public function docs() public function docs()
{ {
$cmd_parts = [ $cmd_parts = [
'cd build', 'phpdoc'
'../vendor/bin/phpdox',
'cd ..'
]; ];
$this->_run($cmd_parts, ' && '); $this->_run($cmd_parts, ' && ');
} }
@ -232,6 +230,7 @@ class RoboFile extends \Robo\Tasks {
->configFile('phpunit.xml') ->configFile('phpunit.xml')
->printed(true) ->printed(true)
->run(); ->run();
$this->_run(["php tests/index.php"]);
} }
/** /**

View File

@ -21,7 +21,7 @@
"role": "Developer" "role": "Developer"
}], }],
"require": { "require": {
"php": ">=5.4" "php": "^7.0"
}, },
"require-dev": { "require-dev": {
"consolidation/robo": "1.0.0-RC2", "consolidation/robo": "1.0.0-RC2",
@ -33,18 +33,14 @@
"phpmd/phpmd": "^2.4", "phpmd/phpmd": "^2.4",
"phpunit/phpunit": "^5.5", "phpunit/phpunit": "^5.5",
"sebastian/phpcpd": "^2.0", "sebastian/phpcpd": "^2.0",
"simpletest/simpletest": "^1.1",
"squizlabs/php_codesniffer": "^3.0.0@RC", "squizlabs/php_codesniffer": "^3.0.0@RC",
"theseer/phpdox": "^0.9.0" "phpdocumentor/phpdocumentor": "2.*"
}, },
"autoload": { "autoload": {
"psr-4": { "psr-4": {
"Query\\": "src/Query" "Query\\": "src/Query"
}, },
"files": ["src/common.php"] "files": ["src/common.php"]
},
"autoload-dev": {
"psr-4" : {
"CodeIgniter\\": "build/CodeIgniter"
}
} }
} }

View File

@ -5,7 +5,7 @@
bootstrap="tests/bootstrap.php"> bootstrap="tests/bootstrap.php">
<filter> <filter>
<whitelist> <whitelist>
<directory suffix=".php">src</directory> <directory suffix=".php">src/</directory>
<file>autoload.php</file> <file>autoload.php</file>
</whitelist> </whitelist>
</filter> </filter>

View File

@ -13,18 +13,17 @@
* @link https://git.timshomepage.net/aviat4ion/Query * @link https://git.timshomepage.net/aviat4ion/Query
*/ */
// --------------------------------------------------------------------------
namespace Query; namespace Query;
use InvalidArgumentException;
/** /**
* Generic exception for bad drivers * Generic exception for bad drivers
* *
* @package Query * @package Query
* @subpackage Core * @subpackage Core
*/ */
class BadDBDriverException extends \InvalidArgumentException { class BadDBDriverException extends InvalidArgumentException {
} }
// End of BadDBDriverException.php // End of BadDBDriverException.php

View File

@ -13,11 +13,11 @@
* @link https://git.timshomepage.net/aviat4ion/Query * @link https://git.timshomepage.net/aviat4ion/Query
*/ */
// --------------------------------------------------------------------------
namespace Query; namespace Query;
use InvalidArgumentException;
use DomainException;
/** /**
* Connection manager class to manage connections for the * Connection manager class to manage connections for the
* Query method * Query method
@ -46,20 +46,20 @@ final class ConnectionManager {
* @codeCoverageIgnore * @codeCoverageIgnore
*/ */
private function __construct() private function __construct()
{ {
} }
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
/** /**
* Private clone method to prevent cloning * Private clone method to prevent cloning
* *
* @throws \DomainException * @throws DomainException
* @return void * @return void
*/ */
public function __clone() 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 * Prevent serialization of this object
* *
* @throws \DomainException * @throws DomainException
* @return void * @return void
*/ */
public function __sleep() 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 * Make sure serialize/deserialize doesn't work
* *
* @throws \DomainException * @throws DomainException
* @return void * @return void
*/ */
public function __wakeup() 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 * @param string|array|object $name
* @return QueryBuilder * @return QueryBuilder
* @throws \InvalidArgumentException * @throws InvalidArgumentException
*/ */
public function get_connection($name = '') public function get_connection($name = '')
{ {
@ -128,7 +128,7 @@ final class ConnectionManager {
} }
// You should actually connect before trying to get a connection... // 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");
} }
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------

View File

@ -79,7 +79,7 @@ class Driver extends AbstractDriver {
* @param string $user * @param string $user
* @param string $pass * @param string $pass
* @param array $options * @param array $options
* @throws \PDOException * @throws PDOException
*/ */
public function __construct($dbpath, $user='SYSDBA', $pass='masterkey', array $options = []) public function __construct($dbpath, $user='SYSDBA', $pass='masterkey', array $options = [])
{ {

View File

@ -26,7 +26,7 @@ interface PDOStatementInterface {
* Bind a column to a PHP variable * Bind a column to a PHP variable
* *
* @param mixed $column Number or name of the column in the result set * @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 $type Data type of the parameter, specified by the PDO::PARAM_* constants
* @param int $maxlen A hint for pre-allocation * @param int $maxlen A hint for pre-allocation
* @param mixed $driverdata Optional parameter(s) for the driver * @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 * @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 * parameter name of the form :name. For a prepared statement using question mark placeholders, this will be the
* 1-indexed position of the parameter. * 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 * @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 * parameter from a stored procedure, use the bitwise OR operator to set the PDO::PARAM_INPUT_OUTPUT bits
* for the data_type parameter. * for the data_type parameter.

View File

@ -16,6 +16,7 @@
namespace Query; namespace Query;
use Query\Drivers\DriverInterface; use Query\Drivers\DriverInterface;
use BadMethodCallException;
/** /**
* Convenience class for creating sql queries - also the class that * Convenience class for creating sql queries - also the class that
@ -99,7 +100,7 @@ class QueryBuilder extends AbstractQueryBuilder implements QueryBuilderInterface
* @param string $name * @param string $name
* @param array $params * @param array $params
* @return mixed * @return mixed
* @throws \BadMethodCallException * @throws BadMethodCallException
*/ */
public function __call($name, $params) 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 * Selects the maximum value of a field from a query
* *
* @param string $field * @param string $field
* @param string|FALSE $as * @param string|bool $as
* @return QueryBuilderInterface * @return QueryBuilderInterface
*/ */
public function select_max($field, $as=FALSE) public function select_max($field, $as=FALSE)
@ -627,7 +628,9 @@ class QueryBuilder extends AbstractQueryBuilder implements QueryBuilderInterface
*/ */
public function not_group_start() 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; 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 * @param string $table
* @return int * @return int

View File

@ -13,7 +13,6 @@
* @link https://git.timshomepage.net/aviat4ion/Query * @link https://git.timshomepage.net/aviat4ion/Query
*/ */
use Query\ConnectionManager; use Query\ConnectionManager;
require __DIR__ . '/../vendor/autoload.php'; require __DIR__ . '/../vendor/autoload.php';

View File

@ -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() public function testGroupCamelCase()
{ {
$query = self::$db->select('id, key as k, val') $query = self::$db->select('id, key as k, val')

View File

@ -13,7 +13,8 @@ class Connection_Manager_Test extends Query_TestCase {
public function testNoClone() public function testNoClone()
{ {
$this->setExpectedException('DomainException', "Can't clone singleton"); $this->expectException('DomainException');
$this->expectExceptionMessage("Can't clone singleton");
$clone = clone self::$instance; $clone = clone self::$instance;
} }

View File

@ -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 // Set up autoloaders
// it has to be in the tests folder require_once(__DIR__ . '/../vendor/autoload.php');
require_once('simpletest/autorun.php'); require_once(__DIR__ . '/../vendor/simpletest/simpletest/autorun.php');
/** /**
* Base class for TestCases * Base class for TestCases
@ -95,6 +113,16 @@ abstract class Query_TestCase extends UnitTestCase {
$this->skipUnless(FALSE, $message); $this->skipUnless(FALSE, $message);
} }
/**
* Alias to the method in PHPUnit
*
* @param string $message
*/
public function expectExceptionMessage($message)
{
// noop
}
/** /**
* Alias for phpunit method * Alias for phpunit method
* *
@ -104,7 +132,7 @@ abstract class Query_TestCase extends UnitTestCase {
*/ */
public function setExpectedException($name, $message='', $code=NULL) 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('QBASE_DIR', realpath(__DIR__ . '/../') . '/');
define('QDS', DIRECTORY_SEPARATOR); define('QDS', DIRECTORY_SEPARATOR);
// Include db classes
require_once(QBASE_DIR . 'autoload.php');
// Include db tests // Include db tests
// Load db classes based on capability // Load db classes based on capability
$test_path = QTEST_DIR.'/databases/'; $test_path = QTEST_DIR.'/databases/';
@ -142,7 +167,7 @@ $driver_test_map = array(
'MySQL' => in_array('mysql', $drivers), 'MySQL' => in_array('mysql', $drivers),
'SQLite' => in_array('sqlite', $drivers), 'SQLite' => in_array('sqlite', $drivers),
'PgSQL' => in_array('pgsql', $drivers), 'PgSQL' => in_array('pgsql', $drivers),
//'Firebird' => in_array('interbase', $drivers), 'Firebird' => in_array('interbase', $drivers),
//'PDOFirebird' => in_array('firebird', $drivers) //'PDOFirebird' => in_array('firebird', $drivers)
); );