Loading core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorageSchema.php +5 −1 Original line number Diff line number Diff line Loading @@ -2378,8 +2378,12 @@ protected function getDedicatedTableSchema(FieldStorageDefinitionInterface $stor // A dedicated table only contain rows for actual field values, and no // rows for entities where the field is empty. Thus, we can safely // enforce 'not null' on the columns for the field's required properties. // Fields can have dynamic properties, so we need to make sure that the // property is statically defined. if (isset($properties[$column_name])) { $data_schema['fields'][$real_name]['not null'] = $properties[$column_name]->isRequired(); } } // Add indexes. foreach ($schema['indexes'] as $index_name => $columns) { Loading core/tests/Drupal/KernelTests/Core/Field/MapBaseFieldTest.php 0 → 100644 +65 −0 Original line number Diff line number Diff line <?php namespace Drupal\KernelTests\Core\Field; use Drupal\Core\Field\BaseFieldDefinition; use Drupal\entity_test_update\Entity\EntityTestUpdate; use Drupal\KernelTests\Core\Entity\EntityKernelTestBase; /** * Tests map base fields. * * @group Field */ class MapBaseFieldTest extends EntityKernelTestBase { /** * The entity definition update manager. * * @var \Drupal\Core\Entity\EntityDefinitionUpdateManagerInterface */ protected $entityDefinitionUpdateManager; /** * {@inheritdoc} */ public static $modules = ['entity_test_update']; /** * {@inheritdoc} */ protected function setUp(): void { parent::setUp(); $this->entityDefinitionUpdateManager = $this->container->get('entity.definition_update_manager'); // Install every entity type's schema that wasn't installed in the parent // method. foreach (array_diff_key($this->entityTypeManager->getDefinitions(), array_flip(['user', 'entity_test'])) as $entity_type_id => $entity_type) { $this->installEntitySchema($entity_type_id); } } /** * Tests uninstalling map item base field. */ public function testUninstallMapItemBaseField() { $definitions['data_map'] = BaseFieldDefinition::create('map') ->setLabel(t('Data')) ->setRequired(TRUE); $this->state->set('entity_test_update.additional_base_field_definitions', $definitions); $this->entityDefinitionUpdateManager->installFieldStorageDefinition('data_map', 'entity_test_update', 'entity_test', $definitions['data_map']); $entity = EntityTestUpdate::create([ 'data_map' => [ 'key' => 'value', ], ]); $entity->save(); $this->entityDefinitionUpdateManager->uninstallFieldStorageDefinition($definitions['data_map']); } } Loading
core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorageSchema.php +5 −1 Original line number Diff line number Diff line Loading @@ -2378,8 +2378,12 @@ protected function getDedicatedTableSchema(FieldStorageDefinitionInterface $stor // A dedicated table only contain rows for actual field values, and no // rows for entities where the field is empty. Thus, we can safely // enforce 'not null' on the columns for the field's required properties. // Fields can have dynamic properties, so we need to make sure that the // property is statically defined. if (isset($properties[$column_name])) { $data_schema['fields'][$real_name]['not null'] = $properties[$column_name]->isRequired(); } } // Add indexes. foreach ($schema['indexes'] as $index_name => $columns) { Loading
core/tests/Drupal/KernelTests/Core/Field/MapBaseFieldTest.php 0 → 100644 +65 −0 Original line number Diff line number Diff line <?php namespace Drupal\KernelTests\Core\Field; use Drupal\Core\Field\BaseFieldDefinition; use Drupal\entity_test_update\Entity\EntityTestUpdate; use Drupal\KernelTests\Core\Entity\EntityKernelTestBase; /** * Tests map base fields. * * @group Field */ class MapBaseFieldTest extends EntityKernelTestBase { /** * The entity definition update manager. * * @var \Drupal\Core\Entity\EntityDefinitionUpdateManagerInterface */ protected $entityDefinitionUpdateManager; /** * {@inheritdoc} */ public static $modules = ['entity_test_update']; /** * {@inheritdoc} */ protected function setUp(): void { parent::setUp(); $this->entityDefinitionUpdateManager = $this->container->get('entity.definition_update_manager'); // Install every entity type's schema that wasn't installed in the parent // method. foreach (array_diff_key($this->entityTypeManager->getDefinitions(), array_flip(['user', 'entity_test'])) as $entity_type_id => $entity_type) { $this->installEntitySchema($entity_type_id); } } /** * Tests uninstalling map item base field. */ public function testUninstallMapItemBaseField() { $definitions['data_map'] = BaseFieldDefinition::create('map') ->setLabel(t('Data')) ->setRequired(TRUE); $this->state->set('entity_test_update.additional_base_field_definitions', $definitions); $this->entityDefinitionUpdateManager->installFieldStorageDefinition('data_map', 'entity_test_update', 'entity_test', $definitions['data_map']); $entity = EntityTestUpdate::create([ 'data_map' => [ 'key' => 'value', ], ]); $entity->save(); $this->entityDefinitionUpdateManager->uninstallFieldStorageDefinition($definitions['data_map']); } }