/** * Given one xmldb_table, check if it exists in DB (true/false) * * @param mixed the table to be searched (string name or xmldb_table instance) * @param bool temp table (might need different checks) * @return boolean true/false */ public function table_exists($table, $temptable = false) { global $CFG; if (!$temptable) { return parent::table_exists($table, $temptable); } if (is_string($table)) { $tablename = $table; } else { /// Calculate the name of the table $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? try { $result = $this->mdb->execute("DESCRIBE {" . $tablename . "}"); } catch (Exception $e) { $result = false; } if ($result === false) { $exists = false; } else { $exists = true; } /// Re-set original debug $this->mdb->set_debug($olddbdebug); $CFG->debug = $oldcfgdebug; return $exists; }