Enabled caching table_columns() and results
This commit is contained in:
parent
9edf5b81b3
commit
8de1dfc484
@ -75,6 +75,10 @@ class Kohana_Database_DB2 extends Database {
|
||||
$e->getCode());
|
||||
}
|
||||
|
||||
if (! $this->_connection) {
|
||||
throw new Database_Exception('Connection to DB2 failed? (:error)', array(':error'=>db2_conn_errormsg()));
|
||||
}
|
||||
|
||||
// \xFF is a better delimiter, but the PHP driver uses underscore
|
||||
$this->_connection_id = sha1($hostname.'_'.$username.'_'.$password);
|
||||
|
||||
@ -152,6 +156,17 @@ class Kohana_Database_DB2 extends Database {
|
||||
}
|
||||
|
||||
public function list_columns($table, $like = NULL, $add_prefix = FALSE) {
|
||||
// If caching is on, cache the tables
|
||||
if ($this->_config['caching']) {
|
||||
$cache_key = __METHOD__.':'.$table.':'.$like.':'.$add_prefix;
|
||||
|
||||
$columns = Kohana::cache($cache_key);
|
||||
|
||||
if ($columns) {
|
||||
return $columns;
|
||||
}
|
||||
}
|
||||
|
||||
// Make sure the database is connected
|
||||
$this->_connection or $this->connect();
|
||||
|
||||
@ -166,7 +181,12 @@ class Kohana_Database_DB2 extends Database {
|
||||
else
|
||||
{
|
||||
// Find all column names
|
||||
try {
|
||||
$result = db2_columns($this->_connection,NULL,'%',$table);
|
||||
|
||||
} catch (Exception $e) {
|
||||
throw new Kohana_Exception('Unable to show DB Columns :table (:connection)',array(':table'=>$table,':connection'=>$this->_connection));
|
||||
}
|
||||
}
|
||||
|
||||
$count = 0;
|
||||
@ -224,6 +244,11 @@ class Kohana_Database_DB2 extends Database {
|
||||
$columns[$row['COLUMN_NAME']] = $column;
|
||||
}
|
||||
|
||||
// Save our cache data for next call
|
||||
if ($this->_config['caching']) {
|
||||
Kohana::cache($cache_key,$columns);
|
||||
}
|
||||
|
||||
return $columns;
|
||||
}
|
||||
|
||||
|
@ -12,6 +12,9 @@ class Kohana_Database_DB2_Result extends Database_Result {
|
||||
|
||||
protected $_internal_row = 0;
|
||||
|
||||
// if we cache queries, we need to preserve our data, otherwise it is lost
|
||||
protected $_internal_data = array();
|
||||
|
||||
public function __construct($result, $sql, $as_object = FALSE, array $params = NULL)
|
||||
{
|
||||
parent::__construct($result, $sql, $as_object, $params);
|
||||
@ -39,7 +42,7 @@ class Kohana_Database_DB2_Result extends Database_Result {
|
||||
}
|
||||
else
|
||||
{
|
||||
return FALSE;
|
||||
return isset($this->_internal_data[$offset+1]);
|
||||
}
|
||||
}
|
||||
|
||||
@ -53,11 +56,13 @@ class Kohana_Database_DB2_Result extends Database_Result {
|
||||
|
||||
if ($this->_as_object === TRUE)
|
||||
{
|
||||
throw new Kohana_Exception('This configuration is not tested for caching');
|
||||
// Return an stdClass
|
||||
return db2_fetch_object($this->_result);
|
||||
}
|
||||
elseif (is_string($this->_as_object))
|
||||
{
|
||||
throw new Kohana_Exception('This configuration is not tested for caching');
|
||||
$o = new $this->_as_object;
|
||||
|
||||
// Return an object of given class name
|
||||
@ -67,8 +72,15 @@ class Kohana_Database_DB2_Result extends Database_Result {
|
||||
else
|
||||
{
|
||||
// Return an array of the row
|
||||
return db2_fetch_assoc($this->_result);
|
||||
return isset($this->_internal_data[$this->_internal_row])
|
||||
? $this->_internal_data[$this->_internal_row]
|
||||
: ($this->_internal_data[$this->_internal_row] = db2_fetch_assoc($this->_result));
|
||||
}
|
||||
}
|
||||
|
||||
} // End Database_DB2L_Result
|
||||
public function rewind() {
|
||||
$this->_internal_row = 0;
|
||||
|
||||
return parent::rewind();
|
||||
}
|
||||
} // End Database_DB2_Result
|
||||
|
Reference in New Issue
Block a user