Loading core/lib/Drupal/Core/Entity/Query/Sql/Tables.php +4 −1 Original line number Diff line number Diff line Loading @@ -443,7 +443,10 @@ protected function addJoin($type, $table, $join_condition, $langcode, $delta = N $entity_type = $this->entityTypeManager->getActiveDefinition($entity_type_id); // For a data table, get the entity language key from the entity type. // A dedicated field table has a hard-coded 'langcode' column. $langcode_key = $entity_type->getDataTable() == $table ? $entity_type->getKey('langcode') : 'langcode'; $langcode_key = match($table) { $entity_type->getDataTable(), $entity_type->getRevisionDataTable() => $entity_type->getKey('langcode'), default => 'langcode', }; $placeholder = ':langcode' . $this->sqlQuery->nextPlaceholder(); $join_condition .= ' AND [%alias].[' . $langcode_key . '] = ' . $placeholder; $arguments[$placeholder] = $langcode; Loading core/tests/Drupal/KernelTests/Core/Entity/EntityQueryTest.php +22 −0 Original line number Diff line number Diff line Loading @@ -1471,6 +1471,28 @@ public function testConditionOnRevisionMetadataKeys(): void { $this->assertEquals($entity->id(), reset($result)); } /** * Tests langcode key handling for revision data table joins. */ public function testRevisionDataTableJoinUsesConfiguredLangcodeKey(): void { $entity_type_manager = $this->container->get('entity_type.manager'); $entity_type = $entity_type_manager->getActiveDefinition('entity_test_mulrev'); $keys = $entity_type->getKeys(); $keys['langcode'] = 'language'; $entity_type->set('entity_keys', $keys); $query = $this->storage ->getQuery() ->accessCheck(FALSE) ->condition('name.value', $this->randomMachineName(), '=', 'tr') ->allRevisions(); $query_string = (string) $query; $this->assertStringContainsString('entity_test_mulrev_property_revision', $query_string); $this->assertMatchesRegularExpression('/"entity_test_mulrev_property_revision"\."language"\s*=\s*\'tr\'/', $query_string); $this->assertDoesNotMatchRegularExpression('/"entity_test_mulrev_property_revision"\."langcode"\s*=\s*\'tr\'/', $query_string); } /** * Tests __toString(). */ Loading Loading
core/lib/Drupal/Core/Entity/Query/Sql/Tables.php +4 −1 Original line number Diff line number Diff line Loading @@ -443,7 +443,10 @@ protected function addJoin($type, $table, $join_condition, $langcode, $delta = N $entity_type = $this->entityTypeManager->getActiveDefinition($entity_type_id); // For a data table, get the entity language key from the entity type. // A dedicated field table has a hard-coded 'langcode' column. $langcode_key = $entity_type->getDataTable() == $table ? $entity_type->getKey('langcode') : 'langcode'; $langcode_key = match($table) { $entity_type->getDataTable(), $entity_type->getRevisionDataTable() => $entity_type->getKey('langcode'), default => 'langcode', }; $placeholder = ':langcode' . $this->sqlQuery->nextPlaceholder(); $join_condition .= ' AND [%alias].[' . $langcode_key . '] = ' . $placeholder; $arguments[$placeholder] = $langcode; Loading
core/tests/Drupal/KernelTests/Core/Entity/EntityQueryTest.php +22 −0 Original line number Diff line number Diff line Loading @@ -1471,6 +1471,28 @@ public function testConditionOnRevisionMetadataKeys(): void { $this->assertEquals($entity->id(), reset($result)); } /** * Tests langcode key handling for revision data table joins. */ public function testRevisionDataTableJoinUsesConfiguredLangcodeKey(): void { $entity_type_manager = $this->container->get('entity_type.manager'); $entity_type = $entity_type_manager->getActiveDefinition('entity_test_mulrev'); $keys = $entity_type->getKeys(); $keys['langcode'] = 'language'; $entity_type->set('entity_keys', $keys); $query = $this->storage ->getQuery() ->accessCheck(FALSE) ->condition('name.value', $this->randomMachineName(), '=', 'tr') ->allRevisions(); $query_string = (string) $query; $this->assertStringContainsString('entity_test_mulrev_property_revision', $query_string); $this->assertMatchesRegularExpression('/"entity_test_mulrev_property_revision"\."language"\s*=\s*\'tr\'/', $query_string); $this->assertDoesNotMatchRegularExpression('/"entity_test_mulrev_property_revision"\."langcode"\s*=\s*\'tr\'/', $query_string); } /** * Tests __toString(). */ Loading