/**
 * 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);
}
Example #2
0
/**
 * 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);
}