2012-12-18 16:19:52 -05:00
|
|
|
<?php
|
|
|
|
/**
|
|
|
|
* Query
|
|
|
|
*
|
|
|
|
* Free Query Builder / Database Abstraction Layer
|
|
|
|
*
|
|
|
|
* @package Query
|
|
|
|
* @author Timothy J. Warren
|
2014-01-02 12:36:50 -05:00
|
|
|
* @copyright Copyright (c) 2012 - 2014
|
2012-12-18 16:19:52 -05:00
|
|
|
* @link https://github.com/aviat4ion/Query
|
|
|
|
* @license http://philsturgeon.co.uk/code/dbad-license
|
|
|
|
*/
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------
|
|
|
|
|
2014-04-02 17:08:50 -04:00
|
|
|
namespace Query;
|
|
|
|
|
2012-12-18 16:19:52 -05:00
|
|
|
/**
|
|
|
|
* Interface defining the Query Builder class
|
|
|
|
*
|
|
|
|
* @package Query
|
2014-03-31 16:01:58 -04:00
|
|
|
* @subpackage Query_Builder
|
2012-12-18 16:19:52 -05:00
|
|
|
*/
|
2014-03-28 13:38:34 -04:00
|
|
|
interface Query_Builder_Interface {
|
2012-12-18 16:19:52 -05:00
|
|
|
|
|
|
|
// --------------------------------------------------------------------------
|
|
|
|
// ! Select Queries
|
|
|
|
// --------------------------------------------------------------------------
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Specifies rows to select in a query
|
|
|
|
*
|
|
|
|
* @param string $fields
|
2014-03-31 16:01:58 -04:00
|
|
|
* @return Query_Builder
|
2012-12-18 16:19:52 -05:00
|
|
|
*/
|
|
|
|
public function select($fields);
|
2013-05-01 15:59:23 -04:00
|
|
|
|
2012-12-18 16:19:52 -05:00
|
|
|
// --------------------------------------------------------------------------
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Selects the maximum value of a field from a query
|
|
|
|
*
|
|
|
|
* @param string $field
|
|
|
|
* @param string $as
|
2014-03-31 16:01:58 -04:00
|
|
|
* @return Query_Builder
|
2012-12-18 16:19:52 -05:00
|
|
|
*/
|
|
|
|
public function select_max($field, $as=FALSE);
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Selects the minimum value of a field from a query
|
|
|
|
*
|
|
|
|
* @param string $field
|
|
|
|
* @param string $as
|
2014-03-31 16:01:58 -04:00
|
|
|
* @return Query_Builder
|
2012-12-18 16:19:52 -05:00
|
|
|
*/
|
|
|
|
public function select_min($field, $as=FALSE);
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Selects the average value of a field from a query
|
|
|
|
*
|
|
|
|
* @param string $field
|
|
|
|
* @param string $as
|
2014-03-31 16:01:58 -04:00
|
|
|
* @return Query_Builder
|
2012-12-18 16:19:52 -05:00
|
|
|
*/
|
|
|
|
public function select_avg($field, $as=FALSE);
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Selects the sum of a field from a query
|
|
|
|
*
|
|
|
|
* @param string $field
|
|
|
|
* @param string $as
|
2014-03-31 16:01:58 -04:00
|
|
|
* @return Query_Builder
|
2012-12-18 16:19:52 -05:00
|
|
|
*/
|
|
|
|
public function select_sum($field, $as=FALSE);
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Adds the 'distinct' keyword to a query
|
|
|
|
*
|
2014-03-31 16:01:58 -04:00
|
|
|
* @return Query_Builder
|
2012-12-18 16:19:52 -05:00
|
|
|
*/
|
|
|
|
public function distinct();
|
2014-03-28 13:38:34 -04:00
|
|
|
|
2014-02-04 20:59:30 -05:00
|
|
|
// --------------------------------------------------------------------------
|
2014-03-28 13:38:34 -04:00
|
|
|
|
2014-02-04 20:59:30 -05:00
|
|
|
/**
|
|
|
|
* Shows the query plan for the query
|
|
|
|
*
|
2014-03-31 16:01:58 -04:00
|
|
|
* @return Query_Builder
|
2014-02-04 20:59:30 -05:00
|
|
|
*/
|
|
|
|
public function explain();
|
2012-12-18 16:19:52 -05:00
|
|
|
|
|
|
|
// --------------------------------------------------------------------------
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Specify the database table to select from
|
|
|
|
*
|
|
|
|
* @param string $tblname
|
2014-03-31 16:01:58 -04:00
|
|
|
* @return Query_Builder
|
2012-12-18 16:19:52 -05:00
|
|
|
*/
|
|
|
|
public function from($tblname);
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------
|
|
|
|
// ! 'Like' methods
|
|
|
|
// --------------------------------------------------------------------------
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Creates a Like clause in the sql statement
|
|
|
|
*
|
|
|
|
* @param string $field
|
|
|
|
* @param mixed $val
|
|
|
|
* @param string $pos
|
2014-03-31 16:01:58 -04:00
|
|
|
* @return Query_Builder
|
2012-12-18 16:19:52 -05:00
|
|
|
*/
|
|
|
|
public function like($field, $val, $pos='both');
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Generates an OR Like clause
|
|
|
|
*
|
|
|
|
* @param string $field
|
|
|
|
* @param mixed $val
|
|
|
|
* @param string $pos
|
2014-03-31 16:01:58 -04:00
|
|
|
* @return Query_Builder
|
2012-12-18 16:19:52 -05:00
|
|
|
*/
|
|
|
|
public function or_like($field, $val, $pos='both');
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Generates a NOT LIKE clause
|
|
|
|
*
|
|
|
|
* @param string $field
|
|
|
|
* @param mixed $val
|
|
|
|
* @param string $pos
|
2014-03-31 16:01:58 -04:00
|
|
|
* @return Query_Builder
|
2012-12-18 16:19:52 -05:00
|
|
|
*/
|
|
|
|
public function not_like($field, $val, $pos='both');
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Generates a OR NOT LIKE clause
|
|
|
|
*
|
|
|
|
* @param string $field
|
|
|
|
* @param mixed $val
|
|
|
|
* @param string $pos
|
2014-03-31 16:01:58 -04:00
|
|
|
* @return Query_Builder
|
2012-12-18 16:19:52 -05:00
|
|
|
*/
|
|
|
|
public function or_not_like($field, $val, $pos='both');
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------
|
|
|
|
// ! Having methods
|
|
|
|
// --------------------------------------------------------------------------
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Generates a 'Having' clause
|
|
|
|
*
|
|
|
|
* @param mixed $key
|
|
|
|
* @param mixed $val
|
2014-03-31 16:01:58 -04:00
|
|
|
* @return Query_Builder
|
2012-12-18 16:19:52 -05:00
|
|
|
*/
|
|
|
|
public function having($key, $val=array());
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Generates a 'Having' clause prefixed with 'OR'
|
|
|
|
*
|
|
|
|
* @param mixed $key
|
|
|
|
* @param mixed $val
|
2014-03-31 16:01:58 -04:00
|
|
|
* @return Query_Builder
|
2012-12-18 16:19:52 -05:00
|
|
|
*/
|
|
|
|
public function or_having($key, $val=array());
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------
|
|
|
|
// ! 'Where' methods
|
|
|
|
// --------------------------------------------------------------------------
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Specify condition(s) in the where clause of a query
|
|
|
|
* Note: this function works with key / value, or a
|
|
|
|
* passed array with key / value pairs
|
|
|
|
*
|
|
|
|
* @param mixed $key
|
|
|
|
* @param mixed $val
|
2014-02-18 15:18:01 -05:00
|
|
|
* @param bool $escape
|
2014-03-31 16:01:58 -04:00
|
|
|
* @return Query_Builder
|
2012-12-18 16:19:52 -05:00
|
|
|
*/
|
2014-02-04 20:59:30 -05:00
|
|
|
public function where($key, $val=array(), $escape = NULL);
|
2012-12-18 16:19:52 -05:00
|
|
|
|
|
|
|
// --------------------------------------------------------------------------
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Where clause prefixed with "OR"
|
|
|
|
*
|
|
|
|
* @param string $key
|
|
|
|
* @param mixed $val
|
2014-03-31 16:01:58 -04:00
|
|
|
* @return Query_Builder
|
2012-12-18 16:19:52 -05:00
|
|
|
*/
|
|
|
|
public function or_where($key, $val=array());
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Where clause with 'IN' statement
|
|
|
|
*
|
|
|
|
* @param mixed $field
|
|
|
|
* @param mixed $val
|
2014-03-31 16:01:58 -04:00
|
|
|
* @return Query_Builder
|
2012-12-18 16:19:52 -05:00
|
|
|
*/
|
|
|
|
public function where_in($field, $val=array());
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Where in statement prefixed with "or"
|
|
|
|
*
|
|
|
|
* @param string $field
|
|
|
|
* @param mixed $val
|
2014-03-31 16:01:58 -04:00
|
|
|
* @return Query_Builder
|
2012-12-18 16:19:52 -05:00
|
|
|
*/
|
|
|
|
public function or_where_in($field, $val=array());
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------
|
|
|
|
|
|
|
|
/**
|
|
|
|
* WHERE NOT IN (FOO) clause
|
|
|
|
*
|
|
|
|
* @param string $field
|
|
|
|
* @param mixed $val
|
2014-03-31 16:01:58 -04:00
|
|
|
* @return Query_Builder
|
2012-12-18 16:19:52 -05:00
|
|
|
*/
|
|
|
|
public function where_not_in($field, $val=array());
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------
|
|
|
|
|
|
|
|
/**
|
|
|
|
* OR WHERE NOT IN (FOO) clause
|
|
|
|
*
|
|
|
|
* @param string $field
|
|
|
|
* @param mixed $val
|
2014-03-31 16:01:58 -04:00
|
|
|
* @return Query_Builder
|
2012-12-18 16:19:52 -05:00
|
|
|
*/
|
|
|
|
public function or_where_not_in($field, $val=array());
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------
|
|
|
|
// ! Other Query Modifier methods
|
|
|
|
// --------------------------------------------------------------------------
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Sets values for inserts / updates / deletes
|
|
|
|
*
|
|
|
|
* @param mixed $key
|
|
|
|
* @param mixed $val
|
2014-03-31 16:01:58 -04:00
|
|
|
* @return Query_Builder
|
2012-12-18 16:19:52 -05:00
|
|
|
*/
|
|
|
|
public function set($key, $val = NULL);
|
2013-05-01 15:59:23 -04:00
|
|
|
|
2012-12-18 16:19:52 -05:00
|
|
|
// --------------------------------------------------------------------------
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Creates a join phrase in a compiled query
|
|
|
|
*
|
|
|
|
* @param string $table
|
|
|
|
* @param string $condition
|
|
|
|
* @param string $type
|
2014-03-31 16:01:58 -04:00
|
|
|
* @return Query_Builder
|
2012-12-18 16:19:52 -05:00
|
|
|
*/
|
|
|
|
public function join($table, $condition, $type='');
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Group the results by the selected field(s)
|
|
|
|
*
|
|
|
|
* @param mixed $field
|
2014-03-31 16:01:58 -04:00
|
|
|
* @return Query_Builder
|
2012-12-18 16:19:52 -05:00
|
|
|
*/
|
|
|
|
public function group_by($field);
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Order the results by the selected field(s)
|
|
|
|
*
|
|
|
|
* @param string $field
|
|
|
|
* @param string $type
|
2014-03-31 16:01:58 -04:00
|
|
|
* @return Query_Builder
|
2012-12-18 16:19:52 -05:00
|
|
|
*/
|
|
|
|
public function order_by($field, $type="");
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Set a limit on the current sql statement
|
|
|
|
*
|
|
|
|
* @param int $limit
|
|
|
|
* @param int $offset
|
|
|
|
* @return string
|
|
|
|
*/
|
|
|
|
public function limit($limit, $offset=FALSE);
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------
|
|
|
|
// ! Query Grouping Methods
|
|
|
|
// --------------------------------------------------------------------------
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Adds a paren to the current query for query grouping
|
|
|
|
*
|
2014-03-31 16:01:58 -04:00
|
|
|
* @return Query_Builder
|
2012-12-18 16:19:52 -05:00
|
|
|
*/
|
|
|
|
public function group_start();
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Adds a paren to the current query for query grouping,
|
|
|
|
* prefixed with 'OR'
|
|
|
|
*
|
2014-03-31 16:01:58 -04:00
|
|
|
* @return Query_Builder
|
2012-12-18 16:19:52 -05:00
|
|
|
*/
|
|
|
|
public function or_group_start();
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Adds a paren to the current query for query grouping,
|
|
|
|
* prefixed with 'OR NOT'
|
|
|
|
*
|
2014-03-31 16:01:58 -04:00
|
|
|
* @return Query_Builder
|
2012-12-18 16:19:52 -05:00
|
|
|
*/
|
|
|
|
public function or_not_group_start();
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Ends a query group
|
|
|
|
*
|
2014-03-31 16:01:58 -04:00
|
|
|
* @return Query_Builder
|
2012-12-18 16:19:52 -05:00
|
|
|
*/
|
|
|
|
public function group_end();
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------
|
|
|
|
// ! Query execution methods
|
|
|
|
// --------------------------------------------------------------------------
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Select and retrieve all records from the current table, and/or
|
|
|
|
* execute current compiled query
|
|
|
|
*
|
|
|
|
* @param $table
|
|
|
|
* @param int $limit
|
|
|
|
* @param int $offset
|
2014-03-28 15:34:48 -04:00
|
|
|
* @return PDOStatement
|
2012-12-18 16:19:52 -05:00
|
|
|
*/
|
|
|
|
public function get($table='', $limit=FALSE, $offset=FALSE);
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Convience method for get() with a where clause
|
|
|
|
*
|
|
|
|
* @param string $table
|
|
|
|
* @param array $where
|
|
|
|
* @param int $limit
|
|
|
|
* @param int $offset
|
2014-03-28 15:34:48 -04:00
|
|
|
* @return PDOStatement
|
2012-12-18 16:19:52 -05:00
|
|
|
*/
|
|
|
|
public function get_where($table, $where=array(), $limit=FALSE, $offset=FALSE);
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Retreive the number of rows in the selected table
|
|
|
|
*
|
|
|
|
* @param string $table
|
|
|
|
* @return int
|
|
|
|
*/
|
|
|
|
public function count_all($table);
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Retrieve the number of results for the generated query - used
|
|
|
|
* in place of the get() method
|
|
|
|
*
|
|
|
|
* @param string $table
|
|
|
|
* @return int
|
|
|
|
*/
|
|
|
|
public function count_all_results($table='');
|
2013-05-01 15:59:23 -04:00
|
|
|
|
2012-12-18 16:19:52 -05:00
|
|
|
// --------------------------------------------------------------------------
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Creates an insert clause, and executes it
|
|
|
|
*
|
|
|
|
* @param string $table
|
|
|
|
* @param mixed $data
|
2014-03-28 15:34:48 -04:00
|
|
|
* @return PDOStatement
|
2012-12-18 16:19:52 -05:00
|
|
|
*/
|
|
|
|
public function insert($table, $data=array());
|
2014-03-28 15:16:39 -04:00
|
|
|
|
|
|
|
// --------------------------------------------------------------------------
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Creates and executes a batch insertion query
|
|
|
|
*
|
|
|
|
* @param string $table
|
|
|
|
* @param array $data
|
2014-04-03 15:05:18 -04:00
|
|
|
* @return \PDOStatement|null
|
2014-03-28 15:16:39 -04:00
|
|
|
*/
|
|
|
|
public function insert_batch($table, $data=array());
|
2012-12-18 16:19:52 -05:00
|
|
|
|
|
|
|
// --------------------------------------------------------------------------
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Creates an update clause, and executes it
|
|
|
|
*
|
|
|
|
* @param string $table
|
|
|
|
* @param mixed $data
|
2014-03-28 15:34:48 -04:00
|
|
|
* @return PDOStatement
|
2012-12-18 16:19:52 -05:00
|
|
|
*/
|
|
|
|
public function update($table, $data=array());
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Deletes data from a table
|
|
|
|
*
|
|
|
|
* @param string $table
|
|
|
|
* @param mixed $where
|
2014-03-28 15:34:48 -04:00
|
|
|
* @return PDOStatement
|
2012-12-18 16:19:52 -05:00
|
|
|
*/
|
|
|
|
public function delete($table, $where='');
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------
|
|
|
|
// ! SQL Returning Methods
|
|
|
|
// --------------------------------------------------------------------------
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns the generated 'select' sql query
|
|
|
|
*
|
|
|
|
* @param string $table
|
|
|
|
* @param bool $reset
|
|
|
|
* @return string
|
|
|
|
*/
|
|
|
|
public function get_compiled_select($table='', $reset=TRUE);
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns the generated 'insert' sql query
|
|
|
|
*
|
|
|
|
* @param string $table
|
|
|
|
* @param bool $reset
|
|
|
|
* @return string
|
|
|
|
*/
|
|
|
|
public function get_compiled_insert($table, $reset=TRUE);
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns the generated 'update' sql query
|
|
|
|
*
|
|
|
|
* @param string $table
|
|
|
|
* @param bool $reset
|
|
|
|
* @return string
|
|
|
|
*/
|
|
|
|
public function get_compiled_update($table='', $reset=TRUE);
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns the generated 'delete' sql query
|
|
|
|
*
|
|
|
|
* @param string $table
|
|
|
|
* @param bool $reset
|
|
|
|
* @return string
|
|
|
|
*/
|
|
|
|
public function get_compiled_delete($table="", $reset=TRUE);
|
|
|
|
|
|
|
|
// --------------------------------------------------------------------------
|
|
|
|
// ! Miscellaneous Methods
|
|
|
|
// --------------------------------------------------------------------------
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Clear out the class variables, so the next query can be run
|
|
|
|
*
|
|
|
|
* @return void
|
|
|
|
*/
|
|
|
|
public function reset_query();
|
|
|
|
}
|
|
|
|
|
2014-03-28 13:38:34 -04:00
|
|
|
// End of query_builder_interface.php
|