function content_update_1009 in Content Construction Kit (CCK) 5
Index the 'nid' column on data tables to optimize node deletion. Large tables might deserve a multipass update.
1 string reference to 'content_update_1009'
- content_update_1010 in ./
content.install - Prepare smooth D6 upgrade : set a variable showing that indexes for 'nid' were already created in content_update_1009, so that content_update_6004 doesn't attempt to recreate them.
File
- ./
content.install, line 566
Code
function content_update_1009() {
$ret = array();
// Gather list of tables.
if (!isset($_SESSION['content_update_1009_tables'])) {
$_SESSION['content_update_1009']['tables'] = array();
// Get per-field tables.
$result = db_query('SELECT * FROM {node_field_instance} nfi ' . ' LEFT JOIN {node_field} nf ON nf.field_name = nfi.field_name WHERE db_storage = %d', CONTENT_DB_STORAGE_PER_FIELD);
while ($field = db_fetch_array($result)) {
$table = _content_tablename($field['field_name'], CONTENT_DB_STORAGE_PER_FIELD);
$_SESSION['content_update_1009_tables'][$table] = $table;
}
// Additionally, get all per-type tables.
foreach (node_get_types() as $type) {
$table = _content_tablename($type->type, CONTENT_DB_STORAGE_PER_CONTENT_TYPE);
$_SESSION['content_update_1009_tables'][$table] = $table;
}
$_SESSION['content_update_1009_count'] = count($_SESSION['content_update_1009_tables']);
}
// One pass : add index on one table.
$table = array_shift($_SESSION['content_update_1009_tables']);
if (db_table_exists($table)) {
switch ($GLOBALS['db_type']) {
case 'mysql':
case 'mysqli':
$ret[] = update_sql("ALTER TABLE {" . $table . "} ADD INDEX (nid)");
break;
case 'pgsql':
$ret[] = update_sql("CREATE INDEX {" . $table . "}_nid_idx ON {" . $table . "}(nid)");
break;
}
}
$ret['#finished'] = 1 - count($_SESSION['content_update_1009_tables']) / $_SESSION['content_update_1009_count'];
return $ret;
}