Version 3 #1
@ -15,11 +15,13 @@
|
|||||||
*/
|
*/
|
||||||
namespace Query\Drivers;
|
namespace Query\Drivers;
|
||||||
|
|
||||||
use function dbFilter;
|
|
||||||
|
|
||||||
use InvalidArgumentException;
|
use InvalidArgumentException;
|
||||||
use PDO;
|
use PDO;
|
||||||
use PDOStatement;
|
use PDOStatement;
|
||||||
|
|
||||||
|
use function call_user_func_array;
|
||||||
|
use function dbFilter;
|
||||||
|
use function is_object;
|
||||||
use function is_string;
|
use function is_string;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -127,11 +129,11 @@ abstract class AbstractDriver
|
|||||||
{
|
{
|
||||||
if (
|
if (
|
||||||
isset($this->$name)
|
isset($this->$name)
|
||||||
&& \is_object($this->$name)
|
&& is_object($this->$name)
|
||||||
&& method_exists($this->$name, '__invoke')
|
&& method_exists($this->$name, '__invoke')
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return \call_user_func_array([$this->$name, '__invoke'], $args);
|
return call_user_func_array([$this->$name, '__invoke'], $args);
|
||||||
}
|
}
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
@ -287,7 +289,7 @@ abstract class AbstractDriver
|
|||||||
* @param string $table
|
* @param string $table
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public function quoteTable($table): string
|
public function quoteTable(string $table): string
|
||||||
{
|
{
|
||||||
$table = $this->prefixTable($table);
|
$table = $this->prefixTable($table);
|
||||||
|
|
||||||
@ -333,7 +335,7 @@ abstract class AbstractDriver
|
|||||||
{
|
{
|
||||||
// Unquote the function
|
// Unquote the function
|
||||||
// Quote the inside identifiers
|
// Quote the inside identifiers
|
||||||
$raw = str_replace(array($f[0], $f[3]), array($f[1], $this->quoteIdent($f[3])), $raw);
|
$raw = str_replace([$f[0], $f[3]], [$f[1], $this->quoteIdent($f[3])], $raw);
|
||||||
}
|
}
|
||||||
|
|
||||||
return $raw;
|
return $raw;
|
||||||
|
@ -165,10 +165,10 @@ interface DriverInterface /* extends the interface of PDO */ {
|
|||||||
/**
|
/**
|
||||||
* Quote database table name, and set prefix
|
* Quote database table name, and set prefix
|
||||||
*
|
*
|
||||||
* @param string|array $table
|
* @param string $table
|
||||||
* @return string|array
|
* @return string
|
||||||
*/
|
*/
|
||||||
public function quoteTable($table);
|
public function quoteTable(string $table): string;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create and execute a prepared statement with the provided parameters
|
* Create and execute a prepared statement with the provided parameters
|
||||||
|
27
src/JoinType.php
Normal file
27
src/JoinType.php
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
<?php declare(strict_types=1);
|
||||||
|
/**
|
||||||
|
* Query
|
||||||
|
*
|
||||||
|
* SQL Query Builder / Database Abstraction Layer
|
||||||
|
*
|
||||||
|
* PHP version 7.4
|
||||||
|
*
|
||||||
|
* @package Query
|
||||||
|
* @author Timothy J. Warren <tim@timshomepage.net>
|
||||||
|
* @copyright 2012 - 2020 Timothy J. Warren
|
||||||
|
* @license http://www.opensource.org/licenses/mit-license.html MIT License
|
||||||
|
* @link https://git.timshomepage.net/aviat/Query
|
||||||
|
* @version 3.0.0
|
||||||
|
*/
|
||||||
|
namespace Query;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 'Enum' of join types
|
||||||
|
*/
|
||||||
|
class JoinType {
|
||||||
|
public const CROSS = 'cross';
|
||||||
|
public const INNER = 'inner';
|
||||||
|
public const OUTER = 'outer';
|
||||||
|
public const LEFT = 'left';
|
||||||
|
public const RIGHT = 'right';
|
||||||
|
}
|
25
src/LikeType.php
Normal file
25
src/LikeType.php
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
<?php declare(strict_types=1);
|
||||||
|
/**
|
||||||
|
* Query
|
||||||
|
*
|
||||||
|
* SQL Query Builder / Database Abstraction Layer
|
||||||
|
*
|
||||||
|
* PHP version 7.4
|
||||||
|
*
|
||||||
|
* @package Query
|
||||||
|
* @author Timothy J. Warren <tim@timshomepage.net>
|
||||||
|
* @copyright 2012 - 2020 Timothy J. Warren
|
||||||
|
* @license http://www.opensource.org/licenses/mit-license.html MIT License
|
||||||
|
* @link https://git.timshomepage.net/aviat/Query
|
||||||
|
* @version 3.0.0
|
||||||
|
*/
|
||||||
|
namespace Query;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 'Enum' of join types
|
||||||
|
*/
|
||||||
|
class LikeType {
|
||||||
|
public const BEFORE = 'before';
|
||||||
|
public const AFTER = 'after';
|
||||||
|
public const BOTH = 'both';
|
||||||
|
}
|
@ -17,6 +17,7 @@ namespace Query;
|
|||||||
|
|
||||||
use function is_array;
|
use function is_array;
|
||||||
use function is_int;
|
use function is_int;
|
||||||
|
use function mb_trim;
|
||||||
|
|
||||||
use PDOStatement;
|
use PDOStatement;
|
||||||
|
|
||||||
@ -170,14 +171,27 @@ class QueryBuilder extends QueryBuilderBase implements QueryBuilderInterface {
|
|||||||
/**
|
/**
|
||||||
* Specify the database table to select from
|
* Specify the database table to select from
|
||||||
*
|
*
|
||||||
* @param string $tblname
|
* Alias of `from` method to better match CodeIgniter 4
|
||||||
|
*
|
||||||
|
* @param string $tableName
|
||||||
* @return self
|
* @return self
|
||||||
*/
|
*/
|
||||||
public function from(string $tblname): self
|
public function table(string $tableName): self
|
||||||
|
{
|
||||||
|
return $this->from($tableName);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Specify the database table to select from
|
||||||
|
*
|
||||||
|
* @param string $tableName
|
||||||
|
* @return self
|
||||||
|
*/
|
||||||
|
public function from(string $tableName): self
|
||||||
{
|
{
|
||||||
// Split identifiers on spaces
|
// Split identifiers on spaces
|
||||||
$identArray = explode(' ', \mb_trim($tblname));
|
$identArray = explode(' ', mb_trim($tableName));
|
||||||
$identArray = array_map('\\mb_trim', $identArray);
|
$identArray = array_map('mb_trim', $identArray);
|
||||||
|
|
||||||
// Quote the identifiers
|
// Quote the identifiers
|
||||||
$identArray[0] = $this->driver->quoteTable($identArray[0]);
|
$identArray[0] = $this->driver->quoteTable($identArray[0]);
|
||||||
@ -201,7 +215,7 @@ class QueryBuilder extends QueryBuilderBase implements QueryBuilderInterface {
|
|||||||
* @param string $pos
|
* @param string $pos
|
||||||
* @return self
|
* @return self
|
||||||
*/
|
*/
|
||||||
public function like(string $field, $val, string $pos='both'): self
|
public function like(string $field, $val, string $pos=LikeType::BOTH): self
|
||||||
{
|
{
|
||||||
return $this->_like($field, $val, $pos);
|
return $this->_like($field, $val, $pos);
|
||||||
}
|
}
|
||||||
@ -214,7 +228,7 @@ class QueryBuilder extends QueryBuilderBase implements QueryBuilderInterface {
|
|||||||
* @param string $pos
|
* @param string $pos
|
||||||
* @return self
|
* @return self
|
||||||
*/
|
*/
|
||||||
public function orLike(string $field, $val, string $pos='both'): self
|
public function orLike(string $field, $val, string $pos=LikeType::BOTH): self
|
||||||
{
|
{
|
||||||
return $this->_like($field, $val, $pos, 'LIKE', 'OR');
|
return $this->_like($field, $val, $pos, 'LIKE', 'OR');
|
||||||
}
|
}
|
||||||
@ -227,7 +241,7 @@ class QueryBuilder extends QueryBuilderBase implements QueryBuilderInterface {
|
|||||||
* @param string $pos
|
* @param string $pos
|
||||||
* @return self
|
* @return self
|
||||||
*/
|
*/
|
||||||
public function notLike(string $field, $val, string $pos='both'): self
|
public function notLike(string $field, $val, string $pos=LikeType::BOTH): self
|
||||||
{
|
{
|
||||||
return $this->_like($field, $val, $pos, 'NOT LIKE');
|
return $this->_like($field, $val, $pos, 'NOT LIKE');
|
||||||
}
|
}
|
||||||
@ -240,7 +254,7 @@ class QueryBuilder extends QueryBuilderBase implements QueryBuilderInterface {
|
|||||||
* @param string $pos
|
* @param string $pos
|
||||||
* @return self
|
* @return self
|
||||||
*/
|
*/
|
||||||
public function orNotLike(string $field, $val, string $pos='both'): self
|
public function orNotLike(string $field, $val, string $pos=LikeType::BOTH): self
|
||||||
{
|
{
|
||||||
return $this->_like($field, $val, $pos, 'NOT LIKE', 'OR');
|
return $this->_like($field, $val, $pos, 'NOT LIKE', 'OR');
|
||||||
}
|
}
|
||||||
|
@ -226,13 +226,15 @@ class QueryBuilderBase {
|
|||||||
// Add the like string into the order map
|
// Add the like string into the order map
|
||||||
$like = $field . " {$like} ?";
|
$like = $field . " {$like} ?";
|
||||||
|
|
||||||
if ($pos === 'before')
|
if ($pos === LikeType::BEFORE)
|
||||||
{
|
{
|
||||||
$val = "%{$val}";
|
$val = "%{$val}";
|
||||||
} elseif ($pos === 'after')
|
}
|
||||||
|
elseif ($pos === LikeType::AFTER)
|
||||||
{
|
{
|
||||||
$val = "{$val}%";
|
$val = "{$val}%";
|
||||||
} else
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
$val = "%{$val}%";
|
$val = "%{$val}%";
|
||||||
}
|
}
|
||||||
|
@ -124,10 +124,20 @@ interface QueryBuilderInterface {
|
|||||||
/**
|
/**
|
||||||
* Specify the database table to select from
|
* Specify the database table to select from
|
||||||
*
|
*
|
||||||
* @param string $tblname
|
* Alias of `from` method to better match CodeIgniter 4
|
||||||
|
*
|
||||||
|
* @param string $tableName
|
||||||
* @return self
|
* @return self
|
||||||
*/
|
*/
|
||||||
public function from(string $tblname): self;
|
public function table(string $tableName): self;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Specify the database table to select from
|
||||||
|
*
|
||||||
|
* @param string $tableName
|
||||||
|
* @return self
|
||||||
|
*/
|
||||||
|
public function from(string $tableName): self;
|
||||||
|
|
||||||
// --------------------------------------------------------------------------
|
// --------------------------------------------------------------------------
|
||||||
// ! 'Like' methods
|
// ! 'Like' methods
|
||||||
@ -141,7 +151,7 @@ interface QueryBuilderInterface {
|
|||||||
* @param string $pos
|
* @param string $pos
|
||||||
* @return self
|
* @return self
|
||||||
*/
|
*/
|
||||||
public function like(string $field, $values, string $pos='both'): self;
|
public function like(string $field, $values, string $pos=LikeType::BOTH): self;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Generates an OR Like clause
|
* Generates an OR Like clause
|
||||||
@ -151,7 +161,7 @@ interface QueryBuilderInterface {
|
|||||||
* @param string $pos
|
* @param string $pos
|
||||||
* @return self
|
* @return self
|
||||||
*/
|
*/
|
||||||
public function orLike(string $field, $values, string $pos='both'): self;
|
public function orLike(string $field, $values, string $pos=LikeType::BOTH): self;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Generates a NOT LIKE clause
|
* Generates a NOT LIKE clause
|
||||||
@ -161,7 +171,7 @@ interface QueryBuilderInterface {
|
|||||||
* @param string $pos
|
* @param string $pos
|
||||||
* @return self
|
* @return self
|
||||||
*/
|
*/
|
||||||
public function notLike(string $field, $values, string $pos='both'): self;
|
public function notLike(string $field, $values, string $pos=LikeType::BOTH): self;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Generates a OR NOT LIKE clause
|
* Generates a OR NOT LIKE clause
|
||||||
@ -171,7 +181,7 @@ interface QueryBuilderInterface {
|
|||||||
* @param string $pos
|
* @param string $pos
|
||||||
* @return self
|
* @return self
|
||||||
*/
|
*/
|
||||||
public function orNotLike(string $field, $values, string $pos='both'): self;
|
public function orNotLike(string $field, $values, string $pos=LikeType::BOTH): self;
|
||||||
|
|
||||||
// --------------------------------------------------------------------------
|
// --------------------------------------------------------------------------
|
||||||
// ! Having methods
|
// ! Having methods
|
||||||
@ -277,7 +287,7 @@ interface QueryBuilderInterface {
|
|||||||
* @param string $type
|
* @param string $type
|
||||||
* @return self
|
* @return self
|
||||||
*/
|
*/
|
||||||
public function join(string $table, string $condition, string $type=''): self;
|
public function join(string $table, string $condition, string $type=JoinType::INNER): self;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Group the results by the selected field(s)
|
* Group the results by the selected field(s)
|
||||||
|
Loading…
Reference in New Issue
Block a user