1 field_sql_storage.module | field_sql_storage_field_storage_update_field($field, $prior_field, $has_data) |
Implements hook_field_storage_update_field().
File
- core/
modules/ field/ modules/ field_sql_storage/ field_sql_storage.module, line 265 - Default implementation of the field storage API.
Code
function field_sql_storage_field_storage_update_field($field, $prior_field, $has_data) {
if (!$has_data) {
// There is no data. Re-create the tables completely.
if (Database::getConnection()->supportsTransactionalDDL()) {
// If the database supports transactional DDL, we can go ahead and rely
// on it. If not, we will have to rollback manually if something fails.
$transaction = db_transaction();
}
try {
$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);
}
}
catch (Exception $e) {
if (Database::getConnection()->supportsTransactionalDDL()) {
$transaction->rollback();
}
else {
// Recreate tables.
$prior_schema = _field_sql_storage_schema($prior_field);
foreach ($prior_schema as $name => $table) {
if (!db_table_exists($name)) {
db_create_table($name, $table);
}
}
}
throw $e;
}
}
else {
// No changes can be done to fields with existing data.
}
backdrop_get_schema(NULL, TRUE);
}