function content_alter_db_analyze in Content Construction Kit (CCK) 6
Same name and namespace in other branches
- 6.3 includes/content.admin.inc \content_alter_db_analyze()
- 6.2 includes/content.admin.inc \content_alter_db_analyze()
Schema Alter Analyze
Analyze if changes will remove columns or delta values, thus losing data. Do this so we can delete the data and fire the necessary hooks, before we actually alter the schema.
2 calls to content_alter_db_analyze()
- content_alter_db_mask in includes/
content.admin.inc - Create a mask for the column data that should be deleted in each field.
- _content_admin_field_validate in includes/
content.admin.inc - Validate a field's settings.
File
- includes/
content.admin.inc, line 966 - Administrative interface for content type creation.
Code
function content_alter_db_analyze($previous_field, $new_field) {
$dropped = array();
// There is no loss of data if there was no previous data.
if (empty($previous_field)) {
return $dropped;
}
// Analyze possible data loss from changes in storage type.
if (!empty($previous_field) && !empty($new_field)) {
// Changing from multiple to not multiple data, will cause loss of all
// values greater than zero.
if ($previous_field['db_storage'] == CONTENT_DB_STORAGE_PER_FIELD && $new_field['db_storage'] == CONTENT_DB_STORAGE_PER_CONTENT_TYPE) {
$dropped['delta'] = 0;
}
elseif (isset($previous_field['multiple']) && isset($new_field['multiple'])) {
if ($previous_field['multiple'] > $new_field['multiple'] && $new_field['multiple'] > 1) {
$dropped['delta'] = $new_field['multiple'];
}
}
}
// Analyze possible data loss from changes in field columns.
$previous_schema = !empty($previous_field) ? content_table_schema($previous_field) : array(
'fields' => array(),
);
$new_schema = !empty($new_field) ? content_table_schema($new_field) : array(
'fields' => array(),
);
$dropped_columns = array_diff(array_keys($previous_schema['fields']), array_keys($new_schema['fields']));
if ($dropped_columns) {
$dropped['columns'] = $dropped_columns;
}
// if (empty($new_schema['fields'])) {
// // No new columns, will lose all columns for a field.
// foreach ($previous_schema['fields'] as $column => $attributes) {
// $dropped['columns'][] = $column;
// }
// }
// else {
// // Check both old and new columns to see if we are deleting some columns for a field.
// foreach ($previous_schema['fields'] as $column => $attributes) {
// if (!isset($new_schema['fields'][$column])) {
// $dropped['columns'][] = $column;
// }
// }
// }
return $dropped;
}