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;
}