diff -u b/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorage.php b/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorage.php
--- b/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorage.php
+++ b/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorage.php
@@ -665,24 +665,24 @@
// If a revision table is available, we need all the properties of the
// latest revision. Otherwise we fall back to the data table.
$table = $this->revisionDataTable ?: $this->dataTable;
- $query = $this->database->select($table, 'data', array('fetch' => \PDO::FETCH_ASSOC))
- ->fields('data')
- ->condition('data.' . $this->idKey, array_keys($entities))
- ->orderBy('data.' . $this->idKey);
+ $alias = $this->revisionDataTable ? 'revision' : 'data';
+ $query = $this->database->select($table, $alias, array('fetch' => \PDO::FETCH_ASSOC))
+ ->fields($alias)
+ ->condition($alias . '.' . $this->idKey, array_keys($entities))
+ ->orderBy($alias . '.' . $this->idKey);
$table_mapping = $this->getTableMapping();
- $translations = array();
-
if ($this->revisionDataTable) {
- $data_fields = array_diff($table_mapping->getFieldNames($this->revisionDataTable), $table_mapping->getFieldNames($this->baseTable));
+ // Find revisioned fields that are non-entity ID's
+ $fields = array_diff($table_mapping->getFieldNames($this->revisionDataTable), $table_mapping->getFieldNames($this->baseTable));
- // Are there any fields unique to dataTable, that are not IDs or revisionable?
- $data_fields_static = array_diff($table_mapping->getFieldNames($this->dataTable), $table_mapping->getFieldNames($this->revisionDataTable), $table_mapping->getFieldNames($this->baseTable));
- if ($data_fields_static) {
- $data_fields = array_merge($data_fields, $data_fields_static);
-
- $query->leftJoin($this->dataTable, 'static', "(data.$this->idKey = static.$this->idKey)");
- $query->fields('static', $data_fields_static);
+ // Find fields that are non-revisioned and non ID's. The value of
+ // data fields are persistent regardless of entity revision.
+ $data_fields = array_diff($table_mapping->getFieldNames($this->dataTable), $fields, $table_mapping->getFieldNames($this->baseTable));
+ if ($data_fields) {
+ $fields = array_merge($fields, $data_fields);
+ $query->leftJoin($this->dataTable, 'data', "(revision.$this->idKey = data.$this->idKey)");
+ $query->fields('data', $data_fields);
}
// Get the revision IDs.
@@ -690,12 +690,13 @@
foreach ($entities as $values) {
$revision_ids[] = is_object($values) ? $values->getRevisionId() : $values[$this->revisionKey][LanguageInterface::LANGCODE_DEFAULT];
}
- $query->condition('data.' . $this->revisionKey, $revision_ids);
+ $query->condition('revision.' . $this->revisionKey, $revision_ids);
}
else {
- $data_fields = $table_mapping->getFieldNames($this->dataTable);
+ $fields = $table_mapping->getFieldNames($this->dataTable);
}
+ $translations = array();
$data = $query->execute();
foreach ($data as $values) {
$id = $values[$this->idKey];
@@ -706,7 +707,7 @@
$translations[$id][$langcode] = TRUE;
- foreach ($data_fields as $field_name) {
+ foreach ($fields as $field_name) {
$columns = $table_mapping->getColumnNames($field_name);
// Do not key single-column fields by property name.
if (count($columns) == 1) {
diff -u b/core/modules/serialization/src/Tests/EntitySerializationTest.php b/core/modules/serialization/src/Tests/EntitySerializationTest.php
--- b/core/modules/serialization/src/Tests/EntitySerializationTest.php
+++ b/core/modules/serialization/src/Tests/EntitySerializationTest.php
@@ -59,7 +59,7 @@
'value' => $this->randomMachineName(),
'format' => 'full_html',
),
- 'nonrevisioned' => 33,
+ 'persistent' => 33,
);
$this->entity = entity_create('entity_test_mulrev', $this->values);
$this->entity->save();
@@ -101,8 +101,8 @@
'format' => $this->values['field_test_text']['format'],
),
),
- 'nonrevisioned' => array(
- array('value' => $this->values['nonrevisioned']),
+ 'persistent' => array(
+ array('value' => $this->values['persistent']),
),
);
@@ -156,7 +156,7 @@
'user_id' => '' . $this->values['user_id'] . '',
'revision_id' => '' . $this->entity->getRevisionId() . '',
'field_test_text' => '' . $this->values['field_test_text']['value'] . '' . $this->values['field_test_text']['format'] . '',
- 'nonrevisioned' => '' . $this->values['nonrevisioned'] . '',
+ 'persistent' => '' . $this->values['persistent'] . '',
);
// Sort it in the same order as normalised.
$expected = array_merge($normalized, $expected);
diff -u b/core/modules/system/src/Tests/Entity/EntityRevisionsTest.php b/core/modules/system/src/Tests/Entity/EntityRevisionsTest.php
--- b/core/modules/system/src/Tests/Entity/EntityRevisionsTest.php
+++ b/core/modules/system/src/Tests/Entity/EntityRevisionsTest.php
@@ -57,7 +57,7 @@
$entity = entity_create($entity_type, array(
'name' => 'foo',
'user_id' => $this->web_user->id(),
- 'nonrevisioned' => $this->randomMachineName(32),
+ 'persistent' => $this->randomMachineName(32),
));
$entity->field_test_text->value = 'bar';
$entity->save();
@@ -65,7 +65,7 @@
$names = array();
$texts = array();
$revision_ids = array();
- $nonrevisioned = 0;
+ $persistent = 0;
// Create three revisions.
$revision_count = 3;
@@ -78,7 +78,7 @@
$entity->setNewRevision(TRUE);
$names[] = $entity->name->value = $this->randomMachineName(32);
$texts[] = $entity->field_test_text->value = $this->randomMachineName(32);
- $nonrevisioned = $entity->nonrevisioned->value = $i * 2;
+ $persistent = $entity->persistent->value = $i * 2;
$entity->save();
$revision_ids[] = $entity->revision_id->value;
@@ -97,9 +97,9 @@
$this->assertEqual($entity_revision->name->value, $names[$i], format_string('%entity_type: Name matches.', array('%entity_type' => $entity_type)));
$this->assertEqual($entity_revision->field_test_text->value, $texts[$i], format_string('%entity_type: Text matches.', array('%entity_type' => $entity_type)));
- // Check 'data_table' values are loaded.
- $this->assertTrue(isset($entity_revision->nonrevisioned->value), format_string('%entity_type: Non-revisioned field is loaded.', array('%entity_type' => $entity_type)));
- $this->assertEqual($entity_revision->nonrevisioned->value, $nonrevisioned, format_string('%entity_type: Non-revisioned field value is the same across revisions.', array('%entity_type' => $entity_type)));
+ // Check non-revisioned values are loaded.
+ $this->assertTrue(isset($entity_revision->persistent->value), format_string('%entity_type: Non-revisioned field is loaded.', array('%entity_type' => $entity_type)));
+ $this->assertEqual($entity_revision->persistent->value, $persistent, format_string('%entity_type: Non-revisioned field value is the same between revisions.', array('%entity_type' => $entity_type)));
}
// Confirm the correct revision text appears in the edit form.
diff -u b/core/modules/system/tests/modules/entity_test/src/Entity/EntityTest.php b/core/modules/system/tests/modules/entity_test/src/Entity/EntityTest.php
--- b/core/modules/system/tests/modules/entity_test/src/Entity/EntityTest.php
+++ b/core/modules/system/tests/modules/entity_test/src/Entity/EntityTest.php
@@ -120,10 +120,11 @@
),
));
- $fields['nonrevisioned'] = BaseFieldDefinition::create('integer')
- ->setLabel(t('Foo'))
- ->setReadOnly(TRUE)
- ->setRevisionable(FALSE);
+ // Create a non-revisioned field.
+ $fields['persistent'] = BaseFieldDefinition::create('integer')
+ ->setLabel(t('Persistent'))
+ ->setDescription(t('A field that does not have different values between revisions.'))
+ ->setReadOnly(TRUE);
return $fields;
}