Issue #2527064 by tstoeckler: Nested condition groups in entity queries are broken
parent
b65b47289f
commit
f57b659dc3
|
@ -43,7 +43,7 @@ class Condition extends ConditionBase {
|
|||
// Add the SQL query to the object before calling this method again.
|
||||
$sql_condition->sqlQuery = $sql_query;
|
||||
$condition['field']->compile($sql_condition);
|
||||
$sql_query->condition($sql_condition);
|
||||
$conditionContainer->condition($sql_condition);
|
||||
}
|
||||
else {
|
||||
$type = strtoupper($this->conjunction) == 'OR' || $condition['operator'] == 'IS NULL' ? 'LEFT' : 'INNER';
|
||||
|
|
|
@ -40,6 +40,13 @@ class EntityQueryTest extends EntityUnitTestBase {
|
|||
*/
|
||||
protected $factory;
|
||||
|
||||
/**
|
||||
* A list of bundle machine names created for this test.
|
||||
*
|
||||
* @var string[]
|
||||
*/
|
||||
protected $bundles;
|
||||
|
||||
/**
|
||||
* Field name for the greetings field.
|
||||
*
|
||||
|
@ -133,6 +140,7 @@ class EntityQueryTest extends EntityUnitTestBase {
|
|||
}
|
||||
$entity->save();
|
||||
}
|
||||
$this->bundles = $bundles;
|
||||
$this->figures = $figures;
|
||||
$this->greetings = $greetings;
|
||||
$this->factory = \Drupal::service('entity.query');
|
||||
|
@ -480,6 +488,34 @@ class EntityQueryTest extends EntityUnitTestBase {
|
|||
$this->assertFalse($count);
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests that nested condition groups work as expected.
|
||||
*/
|
||||
public function testNestedConditionGroups() {
|
||||
// Query for all entities of the first bundle that have either a red
|
||||
// triangle as a figure or the Turkish greeting as a greeting.
|
||||
$query = $this->factory->get('entity_test_mulrev');
|
||||
|
||||
$first_and = $query->andConditionGroup()
|
||||
->condition($this->figures . '.color', 'red')
|
||||
->condition($this->figures . '.shape', 'triangle');
|
||||
$second_and = $query->andConditionGroup()
|
||||
->condition($this->greetings . '.value', 'merhaba')
|
||||
->condition($this->greetings . '.format', 'format-tr');
|
||||
|
||||
$or = $query->orConditionGroup()
|
||||
->condition($first_and)
|
||||
->condition($second_and);
|
||||
|
||||
$this->queryResults = $query
|
||||
->condition($or)
|
||||
->condition('type', reset($this->bundles))
|
||||
->sort('id')
|
||||
->execute();
|
||||
|
||||
$this->assertResult(6, 14);
|
||||
}
|
||||
|
||||
protected function assertResult() {
|
||||
$assert = array();
|
||||
$expected = func_get_args();
|
||||
|
|
Loading…
Reference in New Issue