From: skodak Date: Sun, 25 May 2008 09:31:38 +0000 (+0000) Subject: MDL-14974 improved columns caching implementation X-Git-Url: http://git.mjollnir.org/gw?a=commitdiff_plain;h=a7544e377aa9cd2eec0f2f128f9fd481aac3cdc4;p=moodle.git MDL-14974 improved columns caching implementation --- diff --git a/lib/ddl/database_manager.php b/lib/ddl/database_manager.php index da7f2830fa..67451235e7 100644 --- a/lib/ddl/database_manager.php +++ b/lib/ddl/database_manager.php @@ -84,8 +84,6 @@ class database_manager { notify('' . get_string('error') . ''); } - $this->mdb->reset_columns(); // Clear out the cache, just in case changes were made to table structures - return $result; } @@ -150,8 +148,7 @@ class database_manager { } /// Get list of fields in table - $this->mdb->reset_columns($tablename); // better reset before testing - $columns = $this->mdb->get_columns($tablename); + $columns = $this->mdb->get_columns($tablename, false); $exists = array_key_exists($fieldname, $columns); diff --git a/lib/ddl/mssql_sql_generator.php b/lib/ddl/mssql_sql_generator.php index 7cac0db09c..4616240d74 100644 --- a/lib/ddl/mssql_sql_generator.php +++ b/lib/ddl/mssql_sql_generator.php @@ -325,9 +325,7 @@ class mssql_sql_generator extends sql_generator { $fieldname = $xmldb_field->getName(); /// Take a look to field metadata - $this->mdb->reset_columns($tablename); - - $meta = $this->mdb->get_columns($tablename); + $meta = $this->mdb->get_columns($tablename, false); $metac = $meta[$fieldname]; $oldmetatype = $metac->meta_type; diff --git a/lib/ddl/mysql_sql_generator.php b/lib/ddl/mysql_sql_generator.php index a1e37ed4a4..4ccab7c65b 100644 --- a/lib/ddl/mysql_sql_generator.php +++ b/lib/ddl/mysql_sql_generator.php @@ -255,14 +255,10 @@ class mysql_sql_generator extends sql_generator { */ public function getCheckConstraintsFromDB($xmldb_table, $xmldb_field = null) { - global $db; - $tablename = $xmldb_table->getName($xmldb_table); - $this->mdb->reset_columns($tablename); - /// Fetch all the columns in the table - if (!$columns = $this->mdb->get_columns($tablename)) { + if (!$columns = $this->mdb->get_columns($tablename, false)) { return array(); } diff --git a/lib/ddl/oracle_sql_generator.php b/lib/ddl/oracle_sql_generator.php index 05c323cdc5..ba6324109c 100644 --- a/lib/ddl/oracle_sql_generator.php +++ b/lib/ddl/oracle_sql_generator.php @@ -338,7 +338,7 @@ class oracle_sql_generator extends sql_generator { $fieldname = $xmldb_field->getName(); /// Take a look to field metadata - $meta = $this->mdb->get_columns($xmldb_table->getName()); + $meta = $this->mdb->get_columns($tablename, false); $metac = $meta[$fieldname]; $oldmetatype = $metac->meta_type; diff --git a/lib/ddl/postgres_sql_generator.php b/lib/ddl/postgres_sql_generator.php index 77890f6769..ccd1ca78dc 100644 --- a/lib/ddl/postgres_sql_generator.php +++ b/lib/ddl/postgres_sql_generator.php @@ -246,7 +246,7 @@ class postgres_sql_generator extends sql_generator { $fieldname = $xmldb_field->getName(); /// Take a look to field metadata - $meta = $this->mdb->get_columns($xmldb_table->getName()); + $meta = $this->mdb->get_columns($tablename, false); $metac = $meta[$xmldb_field->getName()]; $oldmetatype = $metac->meta_type; $oldlength = $metac->max_length; diff --git a/lib/deprecatedlib.php b/lib/deprecatedlib.php index 02f72e450c..b8c77332b8 100644 --- a/lib/deprecatedlib.php +++ b/lib/deprecatedlib.php @@ -480,6 +480,20 @@ function get_course_users($courseid, $sort='ul.timeaccess DESC', $exceptions='', } +/** + * Returns a list of all site users + * Obsolete, just calls get_course_users(SITEID) + * + * @uses SITEID + * @deprecated Use {@link get_course_users()} instead. + * @param string $fields A comma separated list of fields to be returned from the chosen table. + * @return object|false {@link $USER} records or false if error. + */ +function get_site_users($sort='u.lastaccess DESC', $fields='*', $exceptions='') { + + return get_course_users(SITEID, $sort, $exceptions, $fields); +} + /** * Returns an array of user objects * diff --git a/lib/dml/adodb_moodle_database.php b/lib/dml/adodb_moodle_database.php index 9bd9f03ffd..76548fa270 100644 --- a/lib/dml/adodb_moodle_database.php +++ b/lib/dml/adodb_moodle_database.php @@ -10,7 +10,6 @@ require_once($CFG->libdir.'/dml/adodb_moodle_recordset.php'); abstract class adodb_moodle_database extends moodle_database { protected $db; - protected $columns = array(); // I wish we had a shared memory cache for this :-( /** * Returns localised database type name @@ -137,8 +136,8 @@ abstract class adodb_moodle_database extends moodle_database { return $indexes; } - public function get_columns($table) { - if (isset($this->columns[$table])) { + public function get_columns($table, $usecache=true) { + if ($usecache and isset($this->columns[$table])) { return $this->columns[$table]; } @@ -157,14 +156,6 @@ abstract class adodb_moodle_database extends moodle_database { return $this->columns[$table]; } - public function reset_columns($table=null) { - if ($table) { - unset($this->columns[$table]); - } else { - $this->columns[$table] = array(); - } - } - public function get_last_error() { return $this->db->ErrorMsg(); } @@ -206,6 +197,8 @@ abstract class adodb_moodle_database extends moodle_database { $result = false; $this->report_error($sql); } + // structure changed, reset columns cache + $this->reset_columns(); return $result; } diff --git a/lib/dml/moodle_database.php b/lib/dml/moodle_database.php index 484b51325c..cbcd8d877f 100644 --- a/lib/dml/moodle_database.php +++ b/lib/dml/moodle_database.php @@ -9,6 +9,8 @@ abstract class moodle_database { // manipulates the db structure protected $database_manager; + protected $columns = array(); // I wish we had a shared memory cache for this :-( + // db connection options protected $dbhost; protected $dbuser; @@ -319,16 +321,19 @@ abstract class moodle_database { /** * Returns datailed information about columns in table. This information is cached internally. * @param string $table name + * @param bool $usecache * @return array array of database_column_info objects indexed with column names */ - public abstract function get_columns($table); + public abstract function get_columns($table, $usecache=true); /** * Reset internal column details cache * @param string $table - empty means all, or one if name of table given * @return void */ - public abstract function reset_columns($table=null); + public function reset_columns() { + $this->columns[] = array(); + } /** * Returns sql generator used for db manipulation. diff --git a/lib/dml/pdo_moodle_database.php b/lib/dml/pdo_moodle_database.php index bcb1c4cc4c..81497a4a3a 100644 --- a/lib/dml/pdo_moodle_database.php +++ b/lib/dml/pdo_moodle_database.php @@ -10,7 +10,6 @@ require_once($CFG->libdir.'/dml/pdo_moodle_recordset.php'); abstract class pdo_moodle_database extends moodle_database { protected $pdb; - protected $columns = array(); // I wish we had a shared memory cache for this :-( //TODO: This looks incorrect now IMO. Construct should have only external and connect get all the rest of params public function __construct($dbhost, $dbuser, $dbpass, $dbname, $dbpersist, $prefix, array $dboptions=null, $external=false) { @@ -31,8 +30,8 @@ abstract class pdo_moodle_database extends moodle_database { protected function configure_dbconnection() { } - public function get_columns($table) { - if (isset($this->columns[$table])) { + public function get_columns($table, $usecache=true) { + if ($usecache and isset($this->columns[$table])) { return $this->columns[$table]; } @@ -43,15 +42,6 @@ abstract class pdo_moodle_database extends moodle_database { return $this->columns[$table]; } - public function reset_columns($table=null) { - if ($table) { - unset($this->columns[$table]); - } else { - $this->columns[$table] = array(); - } - } - - protected function report_error($sql, $params, $obj) { debugging($e->getMessage() .'

'. s($sql)); } @@ -66,7 +56,6 @@ abstract class pdo_moodle_database extends moodle_database { public function execute($sql, array $params=null) { try { - //$this->reset_columns(); // TODO: do we need to clean the cache here?? list($sql, $params, $type) = $this->fix_sql_params($sql, $params); $sth = $this->dbh->prepare($sql); return $sth->execute($params); diff --git a/lib/dml/postgres7_adodb_moodle_database.php b/lib/dml/postgres7_adodb_moodle_database.php index 6ce794e702..92d544c157 100644 --- a/lib/dml/postgres7_adodb_moodle_database.php +++ b/lib/dml/postgres7_adodb_moodle_database.php @@ -100,8 +100,8 @@ class postgres7_adodb_moodle_database extends adodb_moodle_database { return SQL_PARAMS_QM; } - public function get_columns($table) { - if (isset($this->columns[$table])) { + public function get_columns($table, $usecache=true) { + if ($usecache and isset($this->columns[$table])) { return $this->columns[$table]; } diff --git a/lib/dmllib_todo.php b/lib/dmllib_todo.php index a4fbb09732..3b0476997d 100644 --- a/lib/dmllib_todo.php +++ b/lib/dmllib_todo.php @@ -39,12 +39,12 @@ function execute_sql($command, $feedback=true) { } } - $DB->reset_columns(); // Clear out the cache, just in case changes were made to table structures - if (defined('MDL_PERFDB')) { global $PERF ; $PERF->dbqueries++; }; $rs = $db->Execute($command); + $DB->reset_columns(); // Clear out the cache, just in case changes were made to table structures + $db->debug = $olddebug; if ($rs) {