MDL-39389 add databasemeta cache to ms/oci drivers
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user