* @return boolean true/false
*/
public function table_exists($table, $temptable=false) {
+ global $CFG;
+
if (!$temptable) {
return parent::table_exists($table, $temptable);
}
$tablename = $table->getName();
}
+ /// Do this function silenty (to avoid output in install/upgrade process)
+ $olddbdebug = $this->mdb->get_debug();
+ $this->mdb->set_debug(false);
+ $oldcfgdebug = $CFG->debug;
+ $CFG->debug = 0;
+
// ugly hack - mysql does not list temporary tables :-(
+ // this polutes the db log with errors :-(
+ // TODO: is there a better way?
if ($this->mdb->execute("DESCRIBE {".$tablename."}") === false) {
$exists = false;
} else {
$exists = true;
}
+ /// Re-set original debug
+ $this->mdb->set_debug($olddbdebug);
+ $CFG->debug = $oldcfgdebug;
+
return $exists;
}
+ /**
+ * Given one correct xmldb_table, returns the SQL statements
+ * to create temporary table (inside one array)
+ */
+ public function getCreateTempTableSQL($xmldb_table) {
+ $sqlarr = $this->getCreateTableSQL($xmldb_table);
+ $sqlarr = preg_replace('/^CREATE TABLE (.*)/s', 'CREATE TEMPORARY TABLE $1 TYPE=MyISAM', $sqlarr);
+ return $sqlarr;
+ }
+
/**
* Given one correct xmldb_table and the new name, returns the SQL statements
* to drop it (inside one array)
*/
public function getCreateTempTableSQL($xmldb_table) {
$sqlarr = $this->getCreateTableSQL($xmldb_table);
- $sqlarr = preg_replace('/^CREATE TABLE/', "CREATE GLOBAL TEMPORARY TABLE", $sqlarr);
+ $sqlarr = preg_replace('/^CREATE TABLE (.*)/s', 'CREATE GLOBAL TEMPORARY TABLE $1 ON COMMIT PRESERVE ROWS', $sqlarr);
return $sqlarr;
}
/// get all tables in moodle database
$tables = $this->mdb->get_tables();
$exists = in_array($tablename, $tables);
+
/// Re-set original debug
$this->mdb->set_debug($olddbdebug);