BaseFieldDefinition::getPropertyDefinitions and FieldStorageConfig::getPropertyDefinitions might return obsolete property definitions if properties depend on the settings

Created on 25 March 2017, over 7 years ago
Updated 30 January 2023, almost 2 years ago

Problem/Motivation

If there is a field, which properties are based on the how the field storage definition is configured, then under some circumstances it might happen that the returned properties by BaseFieldDefinition::getPropertyDefinitions and FieldStorageConfig::getPropertyDefinitions are obsolete.

$field_storage_config->getPropertyDefintions();
$field_storage_config->set('settings', $new_settings); OR $field_storage_config->setSettings($new_settings); OR $field_storage_config->setSetting('dynamic_property_setting', $dynamic_property_setting);
$field_storage_config->getPropertyDefintions(); -> returns the previous locally cached property definitions.

The problem occurs when the field is being re-configured over the field storage config UI and according to a changed setting a new property will be added - in this case an exception will be thrown from SqlContentEntityStorageSchema::getDedicatedTableSchema(), because the new column will be present, but not the property definition for the new property.

Proposed resolution

BaseFieldDefinition::setSetting(), BaseFieldDefinition::setSettings(), FieldStorageConfig::setSetting() and FieldStorageConfig::setSettings() should clear the local cache for the property definitions.

Implementation details:
FieldStorageConfig::setSetting() and FieldStorageConfig::set() should both call FieldStorageConfig::setSettings(), which takes care of reseting the local cache of property definitions.

BaseFieldDefinition::setSetting() and BaseFieldDefinition::setSettings() should both call BaseFieldDefinition::setItemDefinitionSetting(), which takes care of reseting the local cache of property definitions.

Remaining tasks

User interface changes

API changes

Data model changes

πŸ› Bug report
Status

Needs work

Version

10.1 ✨

Component
FieldΒ  β†’

Last updated 5 days ago

Created by

πŸ‡©πŸ‡ͺGermany hchonov πŸ‡ͺπŸ‡ΊπŸ‡©πŸ‡ͺπŸ‡§πŸ‡¬

Live updates comments and jobs are added and updated live.
Sign in to follow issues

Comments & Activities

Not all content is available!

It's likely this issue predates Contrib.social: some issue and comment data are missing.

  • The Needs Review Queue Bot β†’ tested this issue. It either no longer applies to Drupal core, or fails the Drupal core commit checks. Therefore, this issue status is now "Needs work".

    Apart from a re-roll or rebase, this issue may need more work to address feedback in the issue or MR comments. To progress an issue, incorporate this feedback as part of the process of updating the issue. This helps other contributors to know what is outstanding.

    Consult the Drupal Contributor Guide β†’ to find step-by-step guides for working with issues.

Production build 0.71.5 2024