MDL-39389 add databasemeta cache to ms/oci drivers

This commit is contained in:
Eloy Lafuente (stronk7)
2013-04-28 18:12:38 +02:00
parent cf5a3296c4
commit 9043466103
3 changed files with 41 additions and 15 deletions
+14 -5
View File
@@ -410,11 +410,16 @@ class mssql_native_moodle_database extends moodle_database {
* @return array array of database_column_info objects indexed with column names
*/
public function get_columns($table, $usecache=true) {
if ($usecache and isset($this->columns[$table])) {
return $this->columns[$table];
if ($usecache) {
$properties = array('dbfamily' => $this->get_dbfamily(), 'settings' => $this->get_settings_hash());
$cache = cache::make('core', 'databasemeta', $properties);
if ($data = $cache->get($table)) {
return $data;
}
}
$this->columns[$table] = array();
$structure = array();
if (!$this->temptables->is_temptable($table)) { // normal table, get metadata from own schema
$sql = "SELECT column_name AS name,
@@ -494,11 +499,15 @@ class mssql_native_moodle_database extends moodle_database {
// Process binary
$info->binary = $info->meta_type == 'B' ? true : false;
$this->columns[$table][$info->name] = new database_column_info($info);
$structure[$info->name] = new database_column_info($info);
}
$this->free_result($result);
return $this->columns[$table];
if ($usecache) {
$result = $cache->set($table, $structure);
}
return $structure;
}
/**
+14 -5
View File
@@ -469,15 +469,20 @@ class oci_native_moodle_database extends moodle_database {
* @return array array of database_column_info objects indexed with column names
*/
public function get_columns($table, $usecache=true) {
if ($usecache and isset($this->columns[$table])) {
return $this->columns[$table];
if ($usecache) {
$properties = array('dbfamily' => $this->get_dbfamily(), 'settings' => $this->get_settings_hash());
$cache = cache::make('core', 'databasemeta', $properties);
if ($data = $cache->get($table)) {
return $data;
}
}
if (!$table) { // table not specified, return empty array directly
return array();
}
$this->columns[$table] = array();
$structure = array();
// We give precedence to CHAR_LENGTH for VARCHAR2 columns over WIDTH because the former is always
// BYTE based and, for cross-db operations, we want CHAR based results. See MDL-29415
@@ -656,10 +661,14 @@ class oci_native_moodle_database extends moodle_database {
$info->meta_type = '?';
}
$this->columns[$table][$info->name] = new database_column_info($info);
$structure[$info->name] = new database_column_info($info);
}
return $this->columns[$table];
if ($usecache) {
$result = $cache->set($table, $structure);
}
return $structure;
}
/**
+13 -5
View File
@@ -476,11 +476,15 @@ class sqlsrv_native_moodle_database extends moodle_database {
* @return array array of database_column_info objects indexed with column names
*/
public function get_columns($table, $usecache = true) {
if ($usecache and isset($this->columns[$table])) {
return $this->columns[$table];
if ($usecache) {
$properties = array('dbfamily' => $this->get_dbfamily(), 'settings' => $this->get_settings_hash());
$cache = cache::make('core', 'databasemeta', $properties);
if ($data = $cache->get($table)) {
return $data;
}
}
$this->columns[$table] = array ();
$structure = array();
if (!$this->temptables->is_temptable($table)) { // normal table, get metadata from own schema
$sql = "SELECT column_name AS name,
@@ -560,11 +564,15 @@ class sqlsrv_native_moodle_database extends moodle_database {
// Process binary
$info->binary = $info->meta_type == 'B' ? true : false;
$this->columns[$table][$info->name] = new database_column_info($info);
$structure[$info->name] = new database_column_info($info);
}
$this->free_result($result);
return $this->columns[$table];
if ($usecache) {
$result = $cache->set($table, $structure);
}
return $structure;
}
/**