A little cleanup of parser and connection code
This commit is contained in:
parent
57f1c38bcc
commit
bccea8cd2b
@ -102,7 +102,7 @@ final class Connection_Manager {
|
|||||||
/**
|
/**
|
||||||
* Returns the connection specified by the name given
|
* Returns the connection specified by the name given
|
||||||
*
|
*
|
||||||
* @param mixed $name
|
* @param string|array|object $name
|
||||||
* @return Query_Builder
|
* @return Query_Builder
|
||||||
* @throws InvalidArgumentException
|
* @throws InvalidArgumentException
|
||||||
*/
|
*/
|
||||||
@ -128,11 +128,11 @@ final class Connection_Manager {
|
|||||||
/**
|
/**
|
||||||
* Parse the passed parameters and return a connection
|
* Parse the passed parameters and return a connection
|
||||||
*
|
*
|
||||||
* @param array|object $params
|
* @param \ArrayObject $params
|
||||||
* @return Query_Builder
|
* @return Query_Builder
|
||||||
* @throws BadConnectionException
|
* @throws BadConnectionException
|
||||||
*/
|
*/
|
||||||
public function connect($params)
|
public function connect(\ArrayObject $params)
|
||||||
{
|
{
|
||||||
list($dsn, $dbtype, $params, $options) = $this->parse_params($params);
|
list($dsn, $dbtype, $params, $options) = $this->parse_params($params);
|
||||||
|
|
||||||
@ -143,10 +143,6 @@ final class Connection_Manager {
|
|||||||
? new $driver($dsn, $params->user, $params->pass, $options)
|
? new $driver($dsn, $params->user, $params->pass, $options)
|
||||||
: new $driver($dsn, '', '', $options);
|
: new $driver($dsn, '', '', $options);
|
||||||
|
|
||||||
// --------------------------------------------------------------------------
|
|
||||||
// Save connection
|
|
||||||
// --------------------------------------------------------------------------
|
|
||||||
|
|
||||||
// Set the table prefix, if it exists
|
// Set the table prefix, if it exists
|
||||||
if (isset($params->prefix))
|
if (isset($params->prefix))
|
||||||
{
|
{
|
||||||
@ -174,17 +170,11 @@ final class Connection_Manager {
|
|||||||
/**
|
/**
|
||||||
* Parses params into a dsn and option array
|
* Parses params into a dsn and option array
|
||||||
*
|
*
|
||||||
* @param ArrayObject $params
|
* @param \ArrayObject $params
|
||||||
* @throws BadDBDriverException
|
* @throws BadDBDriverException
|
||||||
*/
|
*/
|
||||||
private function parse_params($params)
|
private function parse_params(\ArrayObject $params)
|
||||||
{
|
{
|
||||||
// --------------------------------------------------------------------------
|
|
||||||
// Parse argument array / object
|
|
||||||
// --------------------------------------------------------------------------
|
|
||||||
|
|
||||||
// Convert array to object
|
|
||||||
$params = new \ArrayObject($params, \ArrayObject::STD_PROP_LIST | \ArrayObject::ARRAY_AS_PROPS);
|
|
||||||
$params->type = strtolower($params->type);
|
$params->type = strtolower($params->type);
|
||||||
$dbtype = ($params->type !== 'postgresql') ? $params->type : 'pgsql';
|
$dbtype = ($params->type !== 'postgresql') ? $params->type : 'pgsql';
|
||||||
|
|
||||||
@ -214,10 +204,10 @@ final class Connection_Manager {
|
|||||||
* Create the dsn from the db type and params
|
* Create the dsn from the db type and params
|
||||||
*
|
*
|
||||||
* @param string $dbtype
|
* @param string $dbtype
|
||||||
* @param array|object $params
|
* @param \ArrayObject $params
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
private function create_dsn($dbtype, $params)
|
private function create_dsn($dbtype, \ArrayObject $params)
|
||||||
{
|
{
|
||||||
if ($dbtype === 'firebird') $dsn = "{$params->host}:{$params->file}";
|
if ($dbtype === 'firebird') $dsn = "{$params->host}:{$params->file}";
|
||||||
elseif ($dbtype === 'sqlite') $dsn = $params->file;
|
elseif ($dbtype === 'sqlite') $dsn = $params->file;
|
||||||
|
@ -56,27 +56,11 @@ class Query_Parser {
|
|||||||
/**
|
/**
|
||||||
* Constructor/entry point into parser
|
* Constructor/entry point into parser
|
||||||
*
|
*
|
||||||
* @param string $sql
|
* @param \Query\Query_Builder $db
|
||||||
*/
|
*/
|
||||||
public function __construct($sql = '')
|
public function __construct(\Query\Query_Builder $db)
|
||||||
{
|
{
|
||||||
if (is_object($sql))
|
$this->db = $db;
|
||||||
{
|
|
||||||
$this->db = $sql;
|
|
||||||
$sql = '';
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get sql clause components
|
|
||||||
preg_match_all('`'.$this->match_patterns['function'].'`', $sql, $this->matches['functions'], PREG_SET_ORDER);
|
|
||||||
preg_match_all('`'.$this->match_patterns['identifier'].'`', $sql, $this->matches['identifiers'], PREG_SET_ORDER);
|
|
||||||
preg_match_all('`'.$this->match_patterns['operator'].'`', $sql, $this->matches['operators'], PREG_SET_ORDER);
|
|
||||||
|
|
||||||
// Get everything at once for ordering
|
|
||||||
$full_pattern = '`'.$this->match_patterns['function'].'+|'.$this->match_patterns['identifier'].'|('.$this->match_patterns['operator'].')+`i';
|
|
||||||
preg_match_all($full_pattern, $sql, $this->matches['combined'], PREG_SET_ORDER);
|
|
||||||
|
|
||||||
// Go through the matches, and get the most relevant matches
|
|
||||||
$this->matches = array_map(array($this, 'filter_array'), $this->matches);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// --------------------------------------------------------------------------
|
// --------------------------------------------------------------------------
|
||||||
@ -88,7 +72,18 @@ class Query_Parser {
|
|||||||
*/
|
*/
|
||||||
protected function parse_join($sql)
|
protected function parse_join($sql)
|
||||||
{
|
{
|
||||||
$this->__construct($sql);
|
// Get sql clause components
|
||||||
|
preg_match_all('`'.$this->match_patterns['function'].'`', $sql, $this->matches['functions'], PREG_SET_ORDER);
|
||||||
|
preg_match_all('`'.$this->match_patterns['identifier'].'`', $sql, $this->matches['identifiers'], PREG_SET_ORDER);
|
||||||
|
preg_match_all('`'.$this->match_patterns['operator'].'`', $sql, $this->matches['operators'], PREG_SET_ORDER);
|
||||||
|
|
||||||
|
// Get everything at once for ordering
|
||||||
|
$full_pattern = '`'.$this->match_patterns['function'].'+|'.$this->match_patterns['identifier'].'|('.$this->match_patterns['operator'].')+`i';
|
||||||
|
preg_match_all($full_pattern, $sql, $this->matches['combined'], PREG_SET_ORDER);
|
||||||
|
|
||||||
|
// Go through the matches, and get the most relevant matches
|
||||||
|
$this->matches = array_map(array($this, 'filter_array'), $this->matches);
|
||||||
|
|
||||||
return $this->matches;
|
return $this->matches;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -91,6 +91,8 @@ function Query($params = '')
|
|||||||
}
|
}
|
||||||
elseif ( ! is_scalar($params))
|
elseif ( ! is_scalar($params))
|
||||||
{
|
{
|
||||||
|
$params = new ArrayObject($params, ArrayObject::STD_PROP_LIST | ArrayObject::ARRAY_AS_PROPS);
|
||||||
|
|
||||||
// Otherwise, return a new connection
|
// Otherwise, return a new connection
|
||||||
return $cmanager->connect($params);
|
return $cmanager->connect($params);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user