summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--modules/field/field.api.php36
1 files changed, 36 insertions, 0 deletions
diff --git a/modules/field/field.api.php b/modules/field/field.api.php
index 1f4eca048..24b1bb169 100644
--- a/modules/field/field.api.php
+++ b/modules/field/field.api.php
@@ -453,6 +453,42 @@ function hook_field_update($entity_type, $entity, $field, $instance, $langcode,
}
/**
+ * Update the storage information for a field.
+ *
+ * This is invoked on the field's storage module from field_update_field(),
+ * before the new field information is saved to the database. The field storage
+ * module should update its storage tables to agree with the new field
+ * information. If there is a problem, the field storage module should throw an
+ * exception.
+ *
+ * @param $field
+ * The updated field structure to be saved.
+ * @param $prior_field
+ * The previously-saved field structure.
+ * @param $has_data
+ * TRUE if the field has data in storage currently.
+ */
+function hook_field_storage_update_field($field, $prior_field, $has_data) {
+ if (!$has_data) {
+ // There is no data. Re-create the tables completely.
+ $prior_schema = _field_sql_storage_schema($prior_field);
+ foreach ($prior_schema as $name => $table) {
+ db_drop_table($name, $table);
+ }
+ $schema = _field_sql_storage_schema($field);
+ foreach ($schema as $name => $table) {
+ db_create_table($name, $table);
+ }
+ }
+ else {
+ // There is data. See field_sql_storage_field_storage_update_field() for
+ // an example of what to do to modify the schema in place, preserving the
+ // old data as much as possible.
+ }
+ drupal_get_schema(NULL, TRUE);
+}
+
+/**
* Define custom delete behavior for this module's field types.
*
* This hook is invoked just before the data is deleted from field storage.