Remove __call method from util classes

This commit is contained in:
Timothy Warren 2014-04-24 13:42:01 -04:00
parent 1f744088f2
commit ff77cea041
6 changed files with 45 additions and 47 deletions

View File

@ -43,19 +43,15 @@ abstract class Abstract_Util {
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
/** /**
* Enable calling driver methods * Get the driver object for the current connection
* *
* @param string $method * @return Driver_Interface
* @param array $args
* @return mixed
*/ */
public function __call($method, $args) public function get_driver()
{ {
return call_user_func_array(array($this->conn, $method), $args); return $this->conn;
} }
// --------------------------------------------------------------------------
// ! Abstract Methods
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
/** /**
@ -70,8 +66,6 @@ abstract class Abstract_Util {
*/ */
public function create_table($name, $fields, array $constraints=array(), $if_not_exists=TRUE) public function create_table($name, $fields, array $constraints=array(), $if_not_exists=TRUE)
{ {
$column_array = array();
$exists_str = ($if_not_exists) ? ' IF NOT EXISTS ' : ' '; $exists_str = ($if_not_exists) ? ' IF NOT EXISTS ' : ' ';
// Reorganize into an array indexed with column information // Reorganize into an array indexed with column information
@ -89,7 +83,7 @@ abstract class Abstract_Util {
$columns = array(); $columns = array();
foreach($column_array as $n => $props) foreach($column_array as $n => $props)
{ {
$str = $this->quote_ident($n); $str = $this->get_driver()->quote_ident($n);
$str .= (isset($props['type'])) ? " {$props['type']}" : ""; $str .= (isset($props['type'])) ? " {$props['type']}" : "";
$str .= (isset($props['constraint'])) ? " {$props['constraint']}" : ""; $str .= (isset($props['constraint'])) ? " {$props['constraint']}" : "";
@ -97,7 +91,7 @@ abstract class Abstract_Util {
} }
// Generate the sql for the creation of the table // Generate the sql for the creation of the table
$sql = 'CREATE TABLE'.$exists_str.$this->quote_table($name).' ('; $sql = 'CREATE TABLE'.$exists_str.$this->get_driver()->quote_table($name).' (';
$sql .= implode(', ', $columns); $sql .= implode(', ', $columns);
$sql .= ')'; $sql .= ')';
@ -114,9 +108,12 @@ abstract class Abstract_Util {
*/ */
public function delete_table($name) public function delete_table($name)
{ {
return 'DROP TABLE IF EXISTS '.$this->quote_table($name); return 'DROP TABLE IF EXISTS '.$this->get_driver()->quote_table($name);
} }
// --------------------------------------------------------------------------
// ! Abstract Methods
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
/** /**

View File

@ -115,6 +115,13 @@ interface Driver_Interface {
*/ */
public function get_tables(); public function get_tables();
/**
* Return list of dbs for the current connection, if possible
*
* @return array
*/
public function get_dbs();
/** /**
* Surrounds the string with the databases identifier escape characters * Surrounds the string with the databases identifier escape characters
* *
@ -153,5 +160,14 @@ interface Driver_Interface {
* @return Abstract_Util * @return Abstract_Util
*/ */
public function get_util(); public function get_util();
/**
* Method to simplify retrieving db results for meta-data queries
*
* @param string|array|null $query
* @param bool $filtered_index
* @return array
*/
public function driver_query($query, $filtered_index=TRUE);
} }
// End of driver_interface.php // End of driver_interface.php

View File

@ -20,10 +20,6 @@ namespace Query\Driver;
* *
* @package Query * @package Query
* @subpackage Drivers * @subpackage Drivers
* @method array get_system_tables()
* @method array get_tables()
* @method object query(string $sql)
* @method resource get_service()
*/ */
class Firebird_Util extends Abstract_Util { class Firebird_Util extends Abstract_Util {
@ -50,7 +46,7 @@ class Firebird_Util extends Abstract_Util {
*/ */
public function delete_table($name) public function delete_table($name)
{ {
return 'DROP TABLE '.$this->quote_table($name); return 'DROP TABLE '.$this->get_driver()->quote_table($name);
} }
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
@ -65,7 +61,7 @@ class Firebird_Util extends Abstract_Util {
public function backup_structure() public function backup_structure()
{ {
list($db_path, $new_file) = func_get_args(); list($db_path, $new_file) = func_get_args();
return ibase_backup($this->get_service(), $db_path, $new_file, \IBASE_BKP_METADATA_ONLY); return ibase_backup($this->get_driver()->get_service(), $db_path, $new_file, \IBASE_BKP_METADATA_ONLY);
} }
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
@ -81,13 +77,10 @@ class Firebird_Util extends Abstract_Util {
public function backup_data($exclude=array(), $system_tables=FALSE) public function backup_data($exclude=array(), $system_tables=FALSE)
{ {
// Determine which tables to use // Determine which tables to use
$tables = $this->get_driver()->get_tables();
if($system_tables == TRUE) if($system_tables == TRUE)
{ {
$tables = array_merge($this->get_system_tables(), $this->get_tables()); $tables = array_merge($tables, $this->get_driver()->get_system_tables());
}
else
{
$tables = $this->get_tables();
} }
// Filter out the tables you don't want // Filter out the tables you don't want
@ -102,7 +95,7 @@ class Firebird_Util extends Abstract_Util {
foreach($tables as $t) foreach($tables as $t)
{ {
$sql = 'SELECT * FROM "'.trim($t).'"'; $sql = 'SELECT * FROM "'.trim($t).'"';
$res = $this->query($sql); $res = $this->get_driver()->query($sql);
$obj_res = $res->fetchAll(\PDO::FETCH_ASSOC); $obj_res = $res->fetchAll(\PDO::FETCH_ASSOC);
// Don't add to the file if the table is empty // Don't add to the file if the table is empty
@ -121,7 +114,7 @@ class Firebird_Util extends Abstract_Util {
// Quote values as needed by type // Quote values as needed by type
if(stripos($t, 'RDB$') === FALSE) if(stripos($t, 'RDB$') === FALSE)
{ {
$row = array_map(array(&$this, 'quote'), $row); $row = array_map(array($this->get_driver(), 'quote'), $row);
$row = array_map('trim', $row); $row = array_map('trim', $row);
} }

View File

@ -20,12 +20,6 @@ namespace Query\Driver;
* *
* @package Query * @package Query
* @subpackage Drivers * @subpackage Drivers
* @method array get_dbs()
* @method mixed driver_query(string $sql, bool $filtered_index=TRUE)
* @method array get_system_tables()
* @method array get_tables()
* @method mixed query(string $sql)
* @method string quote(string $str)
*/ */
class MySQL_Util extends Abstract_Util { class MySQL_Util extends Abstract_Util {
@ -39,7 +33,7 @@ class MySQL_Util extends Abstract_Util {
$string = array(); $string = array();
// Get databases // Get databases
$dbs = $this->get_dbs(); $dbs = $this->get_driver()->get_dbs();
foreach($dbs as &$d) foreach($dbs as &$d)
{ {
@ -47,11 +41,11 @@ class MySQL_Util extends Abstract_Util {
if ($d == 'mysql') continue; if ($d == 'mysql') continue;
// Get the list of tables // Get the list of tables
$tables = $this->driver_query("SHOW TABLES FROM `{$d}`", TRUE); $tables = $this->get_driver()->driver_query("SHOW TABLES FROM `{$d}`", TRUE);
foreach($tables as $table) foreach($tables as $table)
{ {
$array = $this->driver_query("SHOW CREATE TABLE `{$d}`.`{$table}`", FALSE); $array = $this->get_driver()->driver_query("SHOW CREATE TABLE `{$d}`.`{$table}`", FALSE);
$row = current($array); $row = current($array);
if ( ! isset($row['Create Table'])) continue; if ( ! isset($row['Create Table'])) continue;
@ -74,7 +68,7 @@ class MySQL_Util extends Abstract_Util {
*/ */
public function backup_data($exclude=array()) public function backup_data($exclude=array())
{ {
$tables = $this->get_tables(); $tables = $this->get_driver()->get_tables();
// Filter out the tables you don't want // Filter out the tables you don't want
if( ! empty($exclude)) if( ! empty($exclude))
@ -88,7 +82,7 @@ class MySQL_Util extends Abstract_Util {
foreach($tables as $t) foreach($tables as $t)
{ {
$sql = "SELECT * FROM `{$t}`"; $sql = "SELECT * FROM `{$t}`";
$res = $this->query($sql); $res = $this->get_driver()->query($sql);
$rows = $res->fetchAll(\PDO::FETCH_ASSOC); $rows = $res->fetchAll(\PDO::FETCH_ASSOC);
// Skip empty tables // Skip empty tables
@ -107,7 +101,7 @@ class MySQL_Util extends Abstract_Util {
// Workaround for Quercus // Workaround for Quercus
foreach($row as &$r) foreach($row as &$r)
{ {
$r = $this->quote($r); $r = $this->get_driver()->quote($r);
} }
$row = array_map('trim', $row); $row = array_map('trim', $row);

View File

@ -20,8 +20,6 @@ namespace Query\Driver;
* *
* @package Query * @package Query
* @subpackage Drivers * @subpackage Drivers
* @method mixed query(string $sql)
* @method array get_tables()
*/ */
class PgSQL_Util extends Abstract_Util { class PgSQL_Util extends Abstract_Util {
@ -46,7 +44,7 @@ class PgSQL_Util extends Abstract_Util {
*/ */
public function backup_data($exclude=array()) public function backup_data($exclude=array())
{ {
$tables = $this->get_tables(); $tables = $this->get_driver()->get_tables();
// Filter out the tables you don't want // Filter out the tables you don't want
if( ! empty($exclude)) if( ! empty($exclude))
@ -60,7 +58,7 @@ class PgSQL_Util extends Abstract_Util {
foreach($tables as $t) foreach($tables as $t)
{ {
$sql = 'SELECT * FROM "'.trim($t).'"'; $sql = 'SELECT * FROM "'.trim($t).'"';
$res = $this->query($sql); $res = $this->get_driver()->query($sql);
$obj_res = $res->fetchAll(\PDO::FETCH_ASSOC); $obj_res = $res->fetchAll(\PDO::FETCH_ASSOC);
// Don't add to the file if the table is empty // Don't add to the file if the table is empty
@ -79,7 +77,7 @@ class PgSQL_Util extends Abstract_Util {
$row = array_values($row); $row = array_values($row);
// Quote values as needed by type // Quote values as needed by type
$row = array_map(array(&$this, 'quote'), $row); $row = array_map(array($this->get_driver(), 'quote'), $row);
$row = array_map('trim', $row); $row = array_map('trim', $row);

View File

@ -43,7 +43,7 @@ class SQLite_Util extends Abstract_Util {
$sql .= " AND \"name\" NOT IN('".implode("','", $excluded)."')"; $sql .= " AND \"name\" NOT IN('".implode("','", $excluded)."')";
} }
$res = $this->query($sql); $res = $this->get_driver()->query($sql);
$result = $res->fetchAll(\PDO::FETCH_ASSOC); $result = $res->fetchAll(\PDO::FETCH_ASSOC);
unset($res); unset($res);
@ -54,7 +54,7 @@ class SQLite_Util extends Abstract_Util {
foreach($result as $r) foreach($result as $r)
{ {
$sql = 'SELECT * FROM "'.$r['name'].'"'; $sql = 'SELECT * FROM "'.$r['name'].'"';
$res = $this->query($sql); $res = $this->get_driver()->query($sql);
$obj_res = $res->fetchAll(\PDO::FETCH_ASSOC); $obj_res = $res->fetchAll(\PDO::FETCH_ASSOC);
unset($res); unset($res);
@ -75,7 +75,7 @@ class SQLite_Util extends Abstract_Util {
// Quote values as needed by type // Quote values as needed by type
for($i=0, $icount=count($row); $i<$icount; $i++) for($i=0, $icount=count($row); $i<$icount; $i++)
{ {
$row[$i] = (is_numeric($row[$i])) ? $row[$i] : $this->quote($row[$i]); $row[$i] = (is_numeric($row[$i])) ? $row[$i] : $this->get_driver()->quote($row[$i]);
} }
$row_string = 'INSERT INTO "'.$r['name'].'" ("'.implode('","', $columns).'") VALUES ('.implode(',', $row).');'; $row_string = 'INSERT INTO "'.$r['name'].'" ("'.implode('","', $columns).'") VALUES ('.implode(',', $row).');';
@ -104,7 +104,7 @@ class SQLite_Util extends Abstract_Util {
{ {
// Fairly easy for SQLite...just query the master table // Fairly easy for SQLite...just query the master table
$sql = 'SELECT "sql" FROM "sqlite_master"'; $sql = 'SELECT "sql" FROM "sqlite_master"';
$res = $this->query($sql); $res = $this->get_driver()->query($sql);
$result = $res->fetchAll(\PDO::FETCH_ASSOC); $result = $res->fetchAll(\PDO::FETCH_ASSOC);
$sql_array = array(); $sql_array = array();