More cleanup/ refactoring
This commit is contained in:
parent
9078e19961
commit
6ecfb40c87
51
autoload.php
51
autoload.php
@ -27,34 +27,8 @@ define('QBASE_PATH', dirname(__FILE__).'/');
|
|||||||
*/
|
*/
|
||||||
define('QDRIVER_PATH', QBASE_PATH.'drivers/');
|
define('QDRIVER_PATH', QBASE_PATH.'drivers/');
|
||||||
|
|
||||||
if ( ! function_exists('do_include'))
|
// Require some common functions
|
||||||
{
|
require(QBASE_PATH.'common.php');
|
||||||
/**
|
|
||||||
* Bulk directory loading workaround for use
|
|
||||||
* with array_map and glob
|
|
||||||
*
|
|
||||||
* @param string $path
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
function do_include($path)
|
|
||||||
{
|
|
||||||
require_once($path);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( ! function_exists('mb_trim'))
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Multibyte-safe trim function
|
|
||||||
*
|
|
||||||
* @param string
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
function mb_trim($string)
|
|
||||||
{
|
|
||||||
return preg_replace("/(^\s+)|(\s+$)/us", "", $string);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Load a Query class
|
* Load a Query class
|
||||||
@ -92,25 +66,4 @@ function query_autoload($class)
|
|||||||
// Set up autoloader
|
// Set up autoloader
|
||||||
spl_autoload_register('query_autoload');
|
spl_autoload_register('query_autoload');
|
||||||
|
|
||||||
// --------------------------------------------------------------------------
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Filter out db rows into one array
|
|
||||||
*
|
|
||||||
* @param array $array
|
|
||||||
* @param mixed $index
|
|
||||||
* @return array
|
|
||||||
*/
|
|
||||||
function db_filter($array, $index)
|
|
||||||
{
|
|
||||||
$new_array = array();
|
|
||||||
|
|
||||||
foreach($array as $a)
|
|
||||||
{
|
|
||||||
$new_array[] = $a[$index];
|
|
||||||
}
|
|
||||||
|
|
||||||
return $new_array;
|
|
||||||
}
|
|
||||||
|
|
||||||
// End of autoload.php
|
// End of autoload.php
|
@ -21,72 +21,6 @@
|
|||||||
*/
|
*/
|
||||||
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';
|
|
||||||
}
|
|
||||||
|
|
||||||
// --------------------------------------------------------------------------
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the 'sum' keyword
|
|
||||||
*
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public function sum()
|
|
||||||
{
|
|
||||||
return ' SUM';
|
|
||||||
}
|
|
||||||
|
|
||||||
// --------------------------------------------------------------------------
|
|
||||||
// ! Abstract Methods
|
|
||||||
// --------------------------------------------------------------------------
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get database specific sql for limit clause
|
* Get database specific sql for limit clause
|
||||||
*
|
*
|
||||||
|
@ -13,26 +13,6 @@
|
|||||||
|
|
||||||
// --------------------------------------------------------------------------
|
// --------------------------------------------------------------------------
|
||||||
|
|
||||||
/**
|
|
||||||
* Generic exception for bad drivers
|
|
||||||
*
|
|
||||||
* @package Query
|
|
||||||
* @subpackage Query
|
|
||||||
*/
|
|
||||||
class BadDBDriverException extends InvalidArgumentException {}
|
|
||||||
|
|
||||||
// --------------------------------------------------------------------------
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Generic exception for bad connection strings
|
|
||||||
*
|
|
||||||
* @package Query
|
|
||||||
* @subpackage Query
|
|
||||||
*/
|
|
||||||
class BadConnectionException extends UnexpectedValueException {}
|
|
||||||
|
|
||||||
// --------------------------------------------------------------------------
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Convienience class for creating sql queries - also the class that
|
* Convienience class for creating sql queries - also the class that
|
||||||
* instantiates the specific db driver
|
* instantiates the specific db driver
|
||||||
@ -130,33 +110,59 @@ class Query_Builder {
|
|||||||
// Convert array to object
|
// Convert array to object
|
||||||
if (is_array($params))
|
if (is_array($params))
|
||||||
{
|
{
|
||||||
$p = new stdClass();
|
$params = new ArrayObject($params, ArrayObject::STD_PROP_LIST | ArrayObject::ARRAY_AS_PROPS);
|
||||||
|
|
||||||
foreach($params as $k => $v)
|
|
||||||
{
|
|
||||||
$p->$k = $v;
|
|
||||||
}
|
|
||||||
|
|
||||||
$params = $p;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$params->type = strtolower($params->type);
|
||||||
|
$dbtype = ($params->type !== 'postgresql') ? $params->type : 'pgsql';
|
||||||
|
|
||||||
|
// Generate dsn
|
||||||
|
$dsn = $this->_connect($dbtype, $params);
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// Create the database connection
|
||||||
|
$this->db = ( ! empty($params->user))
|
||||||
|
? new $dbtype($dsn, $params->user, $params->pass)
|
||||||
|
: new $dbtype($dsn);
|
||||||
|
}
|
||||||
|
catch(Exception $e)
|
||||||
|
{
|
||||||
|
throw new BadConnectionException('Connection failed, invalid arguments', 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set the connection name property, if applicable
|
||||||
|
if (isset($params->name))
|
||||||
|
{
|
||||||
|
$this->conn_name = $params->name;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Instantiate the Query Parser
|
||||||
|
$this->parser = new Query_Parser();
|
||||||
|
|
||||||
|
// Make things just slightly shorter
|
||||||
|
$this->sql =& $this->db->sql;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create the dsn for connection to the database
|
||||||
|
*
|
||||||
|
* @param string $dbtype
|
||||||
|
* @param object $params
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
private function _connect($dbtype, &$params)
|
||||||
|
{
|
||||||
// Let the connection work with 'conn_db' or 'database'
|
// Let the connection work with 'conn_db' or 'database'
|
||||||
if (isset($params->database))
|
if (isset($params->database))
|
||||||
{
|
{
|
||||||
$params->conn_db = $params->database;
|
$params->conn_db = $params->database;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
$params->type = strtolower($params->type);
|
|
||||||
$dbtype = ($params->type !== 'postgresql') ? $params->type : 'pgsql';
|
|
||||||
|
|
||||||
$dsn = '';
|
|
||||||
|
|
||||||
// Add the driver type to the dsn
|
// Add the driver type to the dsn
|
||||||
if ($dbtype !== 'firebird' && $dbtype !== 'sqlite')
|
$dsn = ($dbtype !== 'firebird' && $dbtype !== 'sqlite')
|
||||||
{
|
? strtolower($dbtype).':'
|
||||||
$dsn = strtolower($dbtype).':'.$dsn;
|
: '';
|
||||||
}
|
|
||||||
|
|
||||||
// Make sure the class exists
|
// Make sure the class exists
|
||||||
if ( ! class_exists($dbtype))
|
if ( ! class_exists($dbtype))
|
||||||
@ -197,30 +203,7 @@ class Query_Builder {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return $dsn;
|
||||||
try
|
|
||||||
{
|
|
||||||
// Create the database connection
|
|
||||||
$this->db = ( ! empty($params->user))
|
|
||||||
? new $dbtype($dsn, $params->user, $params->pass)
|
|
||||||
: new $dbtype($dsn);
|
|
||||||
}
|
|
||||||
catch(Exception $e)
|
|
||||||
{
|
|
||||||
throw new BadConnectionException('Connection failed, invalid arguments', 2);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set the connection name property, if applicable
|
|
||||||
if (isset($params->name))
|
|
||||||
{
|
|
||||||
$this->conn_name = $params->name;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Instantiate the Query Parser
|
|
||||||
$this->parser = new Query_Parser();
|
|
||||||
|
|
||||||
// Make things just slightly shorter
|
|
||||||
$this->sql =& $this->db->sql;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// --------------------------------------------------------------------------
|
// --------------------------------------------------------------------------
|
||||||
@ -303,7 +286,7 @@ class Query_Builder {
|
|||||||
public function select_max($field, $as=FALSE)
|
public function select_max($field, $as=FALSE)
|
||||||
{
|
{
|
||||||
// Create the select string
|
// Create the select string
|
||||||
$this->select_string .= $this->sql->max().$this->_select($field, $as);
|
$this->select_string .= ' MAX'.$this->_select($field, $as);
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -319,7 +302,7 @@ class Query_Builder {
|
|||||||
public function select_min($field, $as=FALSE)
|
public function select_min($field, $as=FALSE)
|
||||||
{
|
{
|
||||||
// Create the select string
|
// Create the select string
|
||||||
$this->select_string .= $this->sql->min().$this->_select($field, $as);
|
$this->select_string .= ' MIN'.$this->_select($field, $as);
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -335,7 +318,7 @@ class Query_Builder {
|
|||||||
public function select_avg($field, $as=FALSE)
|
public function select_avg($field, $as=FALSE)
|
||||||
{
|
{
|
||||||
// Create the select string
|
// Create the select string
|
||||||
$this->select_string .= $this->sql->avg().$this->_select($field, $as);
|
$this->select_string .= ' AVG'.$this->_select($field, $as);
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -351,7 +334,7 @@ class Query_Builder {
|
|||||||
public function select_sum($field, $as=FALSE)
|
public function select_sum($field, $as=FALSE)
|
||||||
{
|
{
|
||||||
// Create the select string
|
// Create the select string
|
||||||
$this->select_string .= $this->sql->sum().$this->_select($field, $as);
|
$this->select_string .= ' SUM'.$this->_select($field, $as);
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -365,7 +348,7 @@ class Query_Builder {
|
|||||||
public function distinct()
|
public function distinct()
|
||||||
{
|
{
|
||||||
// Prepend the keyword to the select string
|
// Prepend the keyword to the select string
|
||||||
$this->select_string = $this->sql->distinct() . $this->select_string;
|
$this->select_string = ' DISTINCT '.$this->select_string;
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -807,10 +790,8 @@ class Query_Builder {
|
|||||||
{
|
{
|
||||||
$table = implode(' ', array_map(array($this->db, 'quote_ident'), explode(' ', trim($table))));
|
$table = implode(' ', array_map(array($this->db, 'quote_ident'), explode(' ', trim($table))));
|
||||||
|
|
||||||
$parser = new query_parser();
|
|
||||||
|
|
||||||
// Parse out the join condition
|
// Parse out the join condition
|
||||||
$parts = $parser->parse_join($condition);
|
$parts = $this->parser->parse_join($condition);
|
||||||
$count = count($parts['identifiers']);
|
$count = count($parts['identifiers']);
|
||||||
|
|
||||||
// Go through and quote the identifiers
|
// Go through and quote the identifiers
|
||||||
@ -1253,12 +1234,9 @@ class Query_Builder {
|
|||||||
*/
|
*/
|
||||||
public function reset_query()
|
public function reset_query()
|
||||||
{
|
{
|
||||||
// Only unset class variables that
|
|
||||||
// are not callable. Otherwise, we'll
|
|
||||||
// delete class methods!
|
|
||||||
foreach($this as $name => $var)
|
foreach($this as $name => $var)
|
||||||
{
|
{
|
||||||
$skip = array('db','sql','queries','table_prefix');
|
$skip = array('db','sql','queries','table_prefix','parser','conn_name');
|
||||||
|
|
||||||
// Skip properties that are needed for every query
|
// Skip properties that are needed for every query
|
||||||
if (in_array($name, $skip))
|
if (in_array($name, $skip))
|
||||||
@ -1267,10 +1245,7 @@ class Query_Builder {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Nothing query-generation related is safe!
|
// Nothing query-generation related is safe!
|
||||||
if ( ! is_callable($this->$name))
|
$this->$name = NULL;
|
||||||
{
|
|
||||||
$this->$name = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set empty arrays
|
// Set empty arrays
|
||||||
$this->values = array();
|
$this->values = array();
|
||||||
@ -1412,7 +1387,7 @@ class Query_Builder {
|
|||||||
// Set the last query to get rowcounts properly
|
// Set the last query to get rowcounts properly
|
||||||
$this->db->last_query = $sql;
|
$this->db->last_query = $sql;
|
||||||
|
|
||||||
// echo $sql . '<br />';
|
//echo $sql . '<br />';
|
||||||
|
|
||||||
return $sql;
|
return $sql;
|
||||||
}
|
}
|
||||||
|
92
common.php
Normal file
92
common.php
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Query
|
||||||
|
*
|
||||||
|
* Free Query Builder / Database Abstraction Layer
|
||||||
|
*
|
||||||
|
* @package Query
|
||||||
|
* @author Timothy J. Warren
|
||||||
|
* @copyright Copyright (c) 2012
|
||||||
|
* @link https://github.com/aviat4ion/Query
|
||||||
|
* @license http://philsturgeon.co.uk/code/dbad-license
|
||||||
|
*/
|
||||||
|
|
||||||
|
// --------------------------------------------------------------------------
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Global classes/functions that don't really fit anywhere else
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generic exception for bad drivers
|
||||||
|
*
|
||||||
|
* @package Query
|
||||||
|
* @subpackage Query
|
||||||
|
*/
|
||||||
|
class BadDBDriverException extends InvalidArgumentException {}
|
||||||
|
|
||||||
|
// --------------------------------------------------------------------------
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generic exception for bad connection strings
|
||||||
|
*
|
||||||
|
* @package Query
|
||||||
|
* @subpackage Query
|
||||||
|
*/
|
||||||
|
class BadConnectionException extends UnexpectedValueException {}
|
||||||
|
|
||||||
|
// --------------------------------------------------------------------------
|
||||||
|
|
||||||
|
if ( ! function_exists('do_include'))
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Bulk directory loading workaround for use
|
||||||
|
* with array_map and glob
|
||||||
|
*
|
||||||
|
* @param string $path
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
function do_include($path)
|
||||||
|
{
|
||||||
|
require_once($path);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// --------------------------------------------------------------------------
|
||||||
|
|
||||||
|
if ( ! function_exists('mb_trim'))
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Multibyte-safe trim function
|
||||||
|
*
|
||||||
|
* @param string
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
function mb_trim($string)
|
||||||
|
{
|
||||||
|
return preg_replace("/(^\s+)|(\s+$)/us", "", $string);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// --------------------------------------------------------------------------
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Filter out db rows into one array
|
||||||
|
*
|
||||||
|
* @param array $array
|
||||||
|
* @param mixed $index
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
function db_filter($array, $index)
|
||||||
|
{
|
||||||
|
$new_array = array();
|
||||||
|
|
||||||
|
foreach($array as $a)
|
||||||
|
{
|
||||||
|
$new_array[] = $a[$index];
|
||||||
|
}
|
||||||
|
|
||||||
|
return $new_array;
|
||||||
|
}
|
||||||
|
|
||||||
|
// End of common.php
|
Binary file not shown.
Loading…
Reference in New Issue
Block a user