1 database.inc public DatabaseConnection_mysql::nextIdDelete()

Clean up the sequences table when closing a database connection.

See also

DatabaseConnection_mysql::__destruct()

File

core/includes/database/mysql/database.inc, line 298
Database interface code for MySQL database servers.

Class

DatabaseConnection_mysql
MySQL database connection driver.

Code

public function nextIdDelete() {
  // While we want to clean up the table to keep it up from occupying too
  // much storage and memory, we must keep the highest value in the table
  // because InnoDB uses an in-memory auto-increment counter as long as the
  // server runs. When the server is stopped and restarted, InnoDB
  // re-initializes the counter for each table for the first INSERT to the
  // table based solely on values from the table so deleting all values would
  // be a problem in this case. Also, TRUNCATE resets the auto increment
  // counter.
  try {
    $max_id = $this->query('SELECT MAX(value) FROM {sequences}')->fetchField();
    // We know we are using MySQL here, no need for the slower db_delete().
    $this->query('DELETE FROM {sequences} WHERE value < :value', array(':value' => $max_id));
  }
  // During testing, this function is called from shutdown with the
  // simpletest prefix stored in $this->connection, and those tables are gone
  // by the time shutdown is called so we need to ignore the database
  // errors. There is no problem with completely ignoring errors here: if
  // these queries fail, the sequence will work just fine, just use a bit
  // more database storage and memory.
  catch (PDOException $e) {
  }
}