You are here

function system_update_6043 in Drupal 6

Update table indices to make them more rational and useful.

Related topics

File

modules/system/system.install, line 2418

Code

function system_update_6043() {
  $ret = array();

  // Required modules first.
  // Add new system module indexes.
  db_add_index($ret, 'flood', 'allow', array(
    'event',
    'hostname',
    'timestamp',
  ));
  db_add_index($ret, 'history', 'nid', array(
    'nid',
  ));

  // Change length of theme field in {blocks} to be consistent with module, and
  // to avoid a MySQL error regarding a too-long index.  Also add new indices.
  db_change_field($ret, 'blocks', 'theme', 'theme', array(
    'type' => 'varchar',
    'length' => 64,
    'not null' => TRUE,
    'default' => '',
  ), array(
    'unique keys' => array(
      'tmd' => array(
        'theme',
        'module',
        'delta',
      ),
    ),
    'indexes' => array(
      'list' => array(
        'theme',
        'status',
        'region',
        'weight',
        'module',
      ),
    ),
  ));
  db_add_index($ret, 'blocks_roles', 'rid', array(
    'rid',
  ));

  // Improve filter module indices.
  db_drop_index($ret, 'filters', 'weight');
  db_add_unique_key($ret, 'filters', 'fmd', array(
    'format',
    'module',
    'delta',
  ));
  db_add_index($ret, 'filters', 'list', array(
    'format',
    'weight',
    'module',
    'delta',
  ));

  // Drop unneeded keys form the node table.
  db_drop_index($ret, 'node', 'status');
  db_drop_unique_key($ret, 'node', 'nid_vid');

  // Improve user module indices.
  db_add_index($ret, 'users', 'mail', array(
    'mail',
  ));
  db_add_index($ret, 'users_roles', 'rid', array(
    'rid',
  ));

  // Optional modules - need to check if the tables exist.
  // Alter aggregator module's tables primary keys to make them more useful.
  if (db_table_exists('aggregator_category_feed')) {
    db_drop_primary_key($ret, 'aggregator_category_feed');
    db_add_primary_key($ret, 'aggregator_category_feed', array(
      'cid',
      'fid',
    ));
    db_add_index($ret, 'aggregator_category_feed', 'fid', array(
      'fid',
    ));
  }
  if (db_table_exists('aggregator_category_item')) {
    db_drop_primary_key($ret, 'aggregator_category_item');
    db_add_primary_key($ret, 'aggregator_category_item', array(
      'cid',
      'iid',
    ));
    db_add_index($ret, 'aggregator_category_item', 'iid', array(
      'iid',
    ));
  }

  // Alter contact module's table to add an index.
  if (db_table_exists('contact')) {
    db_add_index($ret, 'contact', 'list', array(
      'weight',
      'category',
    ));
  }

  // Alter locale table to add a primary key, drop an index.
  if (db_table_exists('locales_target')) {
    db_add_primary_key($ret, 'locales_target', array(
      'language',
      'lid',
      'plural',
    ));
  }

  // Alter a poll module table to add a primary key.
  if (db_table_exists('poll_votes')) {
    db_drop_index($ret, 'poll_votes', 'nid');
    db_add_primary_key($ret, 'poll_votes', array(
      'nid',
      'uid',
      'hostname',
    ));
  }

  // Alter a profile module table to add a primary key.
  if (db_table_exists('profile_values')) {
    db_drop_index($ret, 'profile_values', 'uid');
    db_drop_index($ret, 'profile_values', 'fid');
    db_change_field($ret, 'profile_values', 'fid', 'fid', array(
      'type' => 'int',
      'unsigned' => TRUE,
      'not null' => TRUE,
      'default' => 0,
    ), array(
      'indexes' => array(
        'fid' => array(
          'fid',
        ),
      ),
    ));
    db_change_field($ret, 'profile_values', 'uid', 'uid', array(
      'type' => 'int',
      'unsigned' => TRUE,
      'not null' => TRUE,
      'default' => 0,
    ));
    db_add_primary_key($ret, 'profile_values', array(
      'uid',
      'fid',
    ));
  }

  // Alter a statistics module table to add an index.
  if (db_table_exists('accesslog')) {
    db_add_index($ret, 'accesslog', 'uid', array(
      'uid',
    ));
  }

  // Alter taxonomy module's tables.
  if (db_table_exists('term_data')) {
    db_drop_index($ret, 'term_data', 'vid');
    db_add_index($ret, 'term_data', 'vid_name', array(
      'vid',
      'name',
    ));
    db_add_index($ret, 'term_data', 'taxonomy_tree', array(
      'vid',
      'weight',
      'name',
    ));
  }
  if (db_table_exists('term_node')) {
    db_drop_primary_key($ret, 'term_node');
    db_drop_index($ret, 'term_node', 'tid');
    db_add_primary_key($ret, 'term_node', array(
      'tid',
      'vid',
    ));
  }
  if (db_table_exists('term_relation')) {
    db_drop_index($ret, 'term_relation', 'tid1');
    db_add_unique_key($ret, 'term_relation', 'tid1_tid2', array(
      'tid1',
      'tid2',
    ));
  }
  if (db_table_exists('term_synonym')) {
    db_drop_index($ret, 'term_synonym', 'name');
    db_add_index($ret, 'term_synonym', 'name_tid', array(
      'name',
      'tid',
    ));
  }
  if (db_table_exists('vocabulary')) {
    db_add_index($ret, 'vocabulary', 'list', array(
      'weight',
      'name',
    ));
  }
  if (db_table_exists('vocabulary_node_types')) {
    db_drop_primary_key($ret, 'vocabulary_node_types');
    db_add_primary_key($ret, 'vocabulary_node_types', array(
      'type',
      'vid',
    ));
    db_add_index($ret, 'vocabulary_node_types', 'vid', array(
      'vid',
    ));
  }

  // If we updated in RC1 or before ensure we don't update twice.
  variable_set('system_update_6043_RC2', TRUE);
  return $ret;
}