Issue #1022924 by yched, chx: Fixed critical bug: Updates are broken for deleted fields in installs upgraded from rc1.
parent
6dabf4fc47
commit
34c6cdd66b
|
@ -309,19 +309,28 @@ function _update_7000_field_delete_instance($field_name, $entity_type, $bundle)
|
|||
/**
|
||||
* Utility function: fetch all the field definitions from the database.
|
||||
*
|
||||
* Warning: unlike the field_read_fields() API function, this function returns
|
||||
* all fields by default, including deleted and inactive fields, unless
|
||||
* specified otherwise in the $conditions parameter.
|
||||
*
|
||||
* @param $conditions
|
||||
* An array of conditions to limit the select query to.
|
||||
* @param $key
|
||||
* The name of the field property the return array is indexed by. Using
|
||||
* anything else than 'id' might cause incomplete results if the $conditions
|
||||
* do not filter out deleted fields.
|
||||
*
|
||||
* @return
|
||||
* An array of fields matching $conditions, keyed by the property specified
|
||||
* by the $key parameter.
|
||||
*/
|
||||
function _update_7000_field_read_fields(array $conditions = array()) {
|
||||
function _update_7000_field_read_fields(array $conditions = array(), $key = 'id') {
|
||||
$fields = array();
|
||||
$query = db_select('field_config', 'fc', array('fetch' => PDO::FETCH_ASSOC))
|
||||
->fields('fc')
|
||||
->condition('deleted', 0);
|
||||
if (!empty($conditions)) {
|
||||
->fields('fc');
|
||||
foreach ($conditions as $column => $value) {
|
||||
$query->condition($column, $value);
|
||||
}
|
||||
}
|
||||
foreach ($query->execute() as $record) {
|
||||
$field = unserialize($record['data']);
|
||||
$field['id'] = $record['id'];
|
||||
|
@ -337,7 +346,7 @@ function _update_7000_field_read_fields(array $conditions = array()) {
|
|||
$field['translatable'] = $record['translatable'];
|
||||
$field['deleted'] = $record['deleted'];
|
||||
|
||||
$fields[$field['field_name']] = $field;
|
||||
$fields[$field[$key]] = $field;
|
||||
}
|
||||
return $fields;
|
||||
}
|
||||
|
|
|
@ -50,7 +50,7 @@ function list_field_schema($field) {
|
|||
*/
|
||||
function list_update_7001() {
|
||||
$fields = _update_7000_field_read_fields(array('module' => 'list'));
|
||||
foreach ($fields as $field_name => $field) {
|
||||
foreach ($fields as $field) {
|
||||
$update = array();
|
||||
|
||||
// Translate the old string format into the new array format.
|
||||
|
@ -115,3 +115,15 @@ function _list_update_7001_extract_allowed_values($string, $position_keys) {
|
|||
|
||||
return $values;
|
||||
}
|
||||
|
||||
/**
|
||||
* Re-apply list_update_7001() for deleted fields.
|
||||
*/
|
||||
function list_update_7002() {
|
||||
// See http://drupal.org/node/1022924: list_update_7001() intitally
|
||||
// overlooked deleted fields, which then caused fatal errors when the fields
|
||||
// were being purged.
|
||||
// list_update_7001() has the required checks to ensure it is reentrant, so
|
||||
// it can simply be executed once more..
|
||||
list_update_7001();
|
||||
}
|
|
@ -92,7 +92,7 @@ function text_update_7000() {
|
|||
'module' => 'text',
|
||||
'storage_type' => 'field_sql_storage',
|
||||
));
|
||||
foreach ($fields as $field_name => $field) {
|
||||
foreach ($fields as $field) {
|
||||
if ($field['deleted']) {
|
||||
$table = "field_deleted_data_{$field['id']}";
|
||||
$revision_table = "field_deleted_revision_{$field['id']}";
|
||||
|
|
|
@ -567,7 +567,11 @@ function taxonomy_update_7005(&$sandbox) {
|
|||
// provides the delta value for each term reference data insert. The
|
||||
// deltas are reset for each new revision.
|
||||
|
||||
$field_info = _update_7000_field_read_fields();
|
||||
$conditions = array(
|
||||
'type' => 'taxonomy_term_reference',
|
||||
'deleted' => 0,
|
||||
);
|
||||
$field_info = _update_7000_field_read_fields($conditions, 'field_name');
|
||||
|
||||
// This is a multi-pass update. On the first call we need to initialize some
|
||||
// variables.
|
||||
|
|
Loading…
Reference in New Issue