Added 'get_where' method to query builder
Also added prep work for select_* methods
This commit is contained in:
parent
ffb454e95f
commit
15e7ef0832
1
.gitignore
vendored
1
.gitignore
vendored
@ -1,3 +1,4 @@
|
|||||||
test_config.json
|
test_config.json
|
||||||
index.html
|
index.html
|
||||||
|
tests/db_files/*
|
||||||
._*
|
._*
|
@ -45,7 +45,7 @@ Create a connection array or object similar to this:
|
|||||||
The parameters required depend on the database.
|
The parameters required depend on the database.
|
||||||
|
|
||||||
### Running Queries
|
### Running Queries
|
||||||
Query uses the same interface as CodeIgniter's [Active Record class](http://codeigniter.com/user_guide/database/active_record.html). However, it does not implement the `select_` methods, `count_all_results`, `distinct`, `having`, `or_having`, `get_compiled_query`, `insert_batch`, `update_batch`, or `count_all` methods.
|
Query uses the same interface as CodeIgniter's [Active Record class](http://codeigniter.com/user_guide/database/active_record.html). However, it does not implement the `select_` methods, `count_all_results`, `distinct`, `having`, `or_having`, `insert_batch`, `update_batch`, or `count_all` methods.
|
||||||
|
|
||||||
#### Retrieving Results
|
#### Retrieving Results
|
||||||
|
|
||||||
|
@ -17,6 +17,60 @@
|
|||||||
*/
|
*/
|
||||||
abstract class DB_SQL {
|
abstract class DB_SQL {
|
||||||
|
|
||||||
|
// --------------------------------------------------------------------------
|
||||||
|
// ! Methods to override
|
||||||
|
// --------------------------------------------------------------------------
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the max keyword sql
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function max()
|
||||||
|
{
|
||||||
|
return ' MAX';
|
||||||
|
}
|
||||||
|
|
||||||
|
// --------------------------------------------------------------------------
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the min keyword sql
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function min()
|
||||||
|
{
|
||||||
|
return ' MIN';
|
||||||
|
}
|
||||||
|
|
||||||
|
// --------------------------------------------------------------------------
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the 'distinct' keyword
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function distinct()
|
||||||
|
{
|
||||||
|
return ' DISTINCT';
|
||||||
|
}
|
||||||
|
|
||||||
|
// --------------------------------------------------------------------------
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the 'average' keyword
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function avg()
|
||||||
|
{
|
||||||
|
return ' AVG';
|
||||||
|
}
|
||||||
|
|
||||||
|
// --------------------------------------------------------------------------
|
||||||
|
// ! Abstract Methods
|
||||||
|
// --------------------------------------------------------------------------
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get database-specific sql to create a new table
|
* Get database-specific sql to create a new table
|
||||||
*
|
*
|
||||||
|
@ -717,6 +717,82 @@ class Query_Builder {
|
|||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// --------------------------------------------------------------------------
|
||||||
|
// ! Query Grouping Methods
|
||||||
|
// --------------------------------------------------------------------------
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds a paren to the current query for query grouping
|
||||||
|
*
|
||||||
|
* @return $this
|
||||||
|
*/
|
||||||
|
public function group_start()
|
||||||
|
{
|
||||||
|
$this->query_map[] = array(
|
||||||
|
'type' => 'group_start',
|
||||||
|
'conjunction' => '',
|
||||||
|
'string' => ' ('
|
||||||
|
);
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
// --------------------------------------------------------------------------
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds a paren to the current query for query grouping,
|
||||||
|
* prefixed with 'OR'
|
||||||
|
*
|
||||||
|
* @return $this
|
||||||
|
*/
|
||||||
|
public function or_group_start()
|
||||||
|
{
|
||||||
|
$this->query_map[] = array(
|
||||||
|
'type' => 'group_start',
|
||||||
|
'conjunction' => '',
|
||||||
|
'string' => ' OR ('
|
||||||
|
);
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
// --------------------------------------------------------------------------
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds a paren to the current query for query grouping,
|
||||||
|
* prefixed with 'OR NOT'
|
||||||
|
*
|
||||||
|
* @return $this
|
||||||
|
*/
|
||||||
|
public function or_not_group_start()
|
||||||
|
{
|
||||||
|
$this->query_map[] = array(
|
||||||
|
'type' => 'group_start',
|
||||||
|
'conjunction' => '',
|
||||||
|
'string' => ' OR NOT ('
|
||||||
|
);
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
// --------------------------------------------------------------------------
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Ends a query group
|
||||||
|
*
|
||||||
|
* @return $this
|
||||||
|
*/
|
||||||
|
public function group_end()
|
||||||
|
{
|
||||||
|
$this->query_map[] = array(
|
||||||
|
'type' => 'group_end',
|
||||||
|
'conjunction' => '',
|
||||||
|
'string' => ' ) '
|
||||||
|
);
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
// --------------------------------------------------------------------------
|
// --------------------------------------------------------------------------
|
||||||
// ! Query execution methods
|
// ! Query execution methods
|
||||||
// --------------------------------------------------------------------------
|
// --------------------------------------------------------------------------
|
||||||
@ -765,6 +841,26 @@ class Query_Builder {
|
|||||||
|
|
||||||
// --------------------------------------------------------------------------
|
// --------------------------------------------------------------------------
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convience method for get() with a where clause
|
||||||
|
*
|
||||||
|
* @param string $table
|
||||||
|
* @param array $where
|
||||||
|
* @param int $limit
|
||||||
|
* @param int $offset
|
||||||
|
* @return object
|
||||||
|
*/
|
||||||
|
public function get_where($table, $where=array(), $limit=FALSE, $offset=FALSE)
|
||||||
|
{
|
||||||
|
// Create the where clause
|
||||||
|
$this->where($where);
|
||||||
|
|
||||||
|
// Return the result
|
||||||
|
return $this->get($table, $limit, $offset);
|
||||||
|
}
|
||||||
|
|
||||||
|
// --------------------------------------------------------------------------
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates an insert clause, and executes it
|
* Creates an insert clause, and executes it
|
||||||
*
|
*
|
||||||
@ -844,81 +940,6 @@ class Query_Builder {
|
|||||||
return $res;
|
return $res;
|
||||||
}
|
}
|
||||||
|
|
||||||
// --------------------------------------------------------------------------
|
|
||||||
// ! Query Grouping Methods
|
|
||||||
// --------------------------------------------------------------------------
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Adds a paren to the current query for query grouping
|
|
||||||
*
|
|
||||||
* @return $this
|
|
||||||
*/
|
|
||||||
public function group_start()
|
|
||||||
{
|
|
||||||
$this->query_map[] = array(
|
|
||||||
'type' => 'group_start',
|
|
||||||
'conjunction' => '',
|
|
||||||
'string' => ' ('
|
|
||||||
);
|
|
||||||
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
// --------------------------------------------------------------------------
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Adds a paren to the current query for query grouping,
|
|
||||||
* prefixed with 'OR'
|
|
||||||
*
|
|
||||||
* @return $this
|
|
||||||
*/
|
|
||||||
public function or_group_start()
|
|
||||||
{
|
|
||||||
$this->query_map[] = array(
|
|
||||||
'type' => 'group_start',
|
|
||||||
'conjunction' => '',
|
|
||||||
'string' => ' OR ('
|
|
||||||
);
|
|
||||||
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
// --------------------------------------------------------------------------
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Adds a paren to the current query for query grouping,
|
|
||||||
* prefixed with 'OR NOT'
|
|
||||||
*
|
|
||||||
* @return $this
|
|
||||||
*/
|
|
||||||
public function or_not_group_start()
|
|
||||||
{
|
|
||||||
$this->query_map[] = array(
|
|
||||||
'type' => 'group_start',
|
|
||||||
'conjunction' => '',
|
|
||||||
'string' => ' OR NOT ('
|
|
||||||
);
|
|
||||||
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
// --------------------------------------------------------------------------
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Ends a query group
|
|
||||||
*
|
|
||||||
* @return $this
|
|
||||||
*/
|
|
||||||
public function group_end()
|
|
||||||
{
|
|
||||||
$this->query_map[] = array(
|
|
||||||
'type' => 'group_end',
|
|
||||||
'conjunction' => '',
|
|
||||||
'string' => ' ) '
|
|
||||||
);
|
|
||||||
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
// --------------------------------------------------------------------------
|
// --------------------------------------------------------------------------
|
||||||
// ! Miscellaneous Methods
|
// ! Miscellaneous Methods
|
||||||
|
@ -21,6 +21,17 @@
|
|||||||
*/
|
*/
|
||||||
class ODBC extends DB_PDO {
|
class ODBC extends DB_PDO {
|
||||||
|
|
||||||
|
// Don't define the escape char - or define it in sub-drivers in a refactor
|
||||||
|
protected $escape_char = '';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Use ODBC to connect to a database
|
||||||
|
*
|
||||||
|
* @param string $dsn
|
||||||
|
* @param string $username
|
||||||
|
* @param string $password
|
||||||
|
* @param array $options
|
||||||
|
*/
|
||||||
public function __construct($dsn, $username=null, $password=null, $options=array())
|
public function __construct($dsn, $username=null, $password=null, $options=array())
|
||||||
{
|
{
|
||||||
parent::__construct("odbc:$dsn", $username, $password, $options);
|
parent::__construct("odbc:$dsn", $username, $password, $options);
|
||||||
@ -33,6 +44,8 @@ class ODBC extends DB_PDO {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Doesn't apply to ODBC
|
* Doesn't apply to ODBC
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
*/
|
*/
|
||||||
public function switch_db($name)
|
public function switch_db($name)
|
||||||
{
|
{
|
||||||
|
@ -76,6 +76,15 @@ class FirebirdQBTest extends QBTest {
|
|||||||
$this->assertIsA($query, 'Firebird_Result');
|
$this->assertIsA($query, 'Firebird_Result');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function TestGetWhere()
|
||||||
|
{
|
||||||
|
if (empty($this->db)) return;
|
||||||
|
|
||||||
|
$query = $this->db->get_where('create_test', array('id !=' => 1), 2, 1);
|
||||||
|
|
||||||
|
$this->assertIsA($query, 'Firebird_Result');
|
||||||
|
}
|
||||||
|
|
||||||
function TestSelectGet()
|
function TestSelectGet()
|
||||||
{
|
{
|
||||||
$query = $this->db->select('id, key as k, val')
|
$query = $this->db->select('id, key as k, val')
|
||||||
|
Binary file not shown.
Binary file not shown.
@ -107,6 +107,15 @@ abstract class QBTest extends UnitTestCase {
|
|||||||
$this->assertIsA($query, 'PDOStatement');
|
$this->assertIsA($query, 'PDOStatement');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function TestGetWhere()
|
||||||
|
{
|
||||||
|
if (empty($this->db)) return;
|
||||||
|
|
||||||
|
$query = $this->db->get_where('create_test', array('id !=' => 1), 2, 1);
|
||||||
|
|
||||||
|
$this->assertIsA($query, 'PDOStatement');
|
||||||
|
}
|
||||||
|
|
||||||
function TestSelectGet()
|
function TestSelectGet()
|
||||||
{
|
{
|
||||||
if (empty($this->db)) return;
|
if (empty($this->db)) return;
|
||||||
|
Loading…
Reference in New Issue
Block a user