/** * Act on creation of a new field. * * This hook is invoked from field_create_field() to ask the field storage * module to save field information and prepare for storing field instances. * If there is a problem, the field storage module should throw an exception. * * @param $field * The field structure being created. */ function hook_field_storage_create_field($field) { $schema = _field_sql_storage_schema($field); foreach ($schema as $name => $table) { db_create_table($name, $table); } drupal_get_schema(NULL, TRUE); }
/** * 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); }