summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--includes/database/query.inc2
-rw-r--r--modules/simpletest/tests/database_test.test23
2 files changed, 24 insertions, 1 deletions
diff --git a/includes/database/query.inc b/includes/database/query.inc
index f1aed5e52..b27eb6a0c 100644
--- a/includes/database/query.inc
+++ b/includes/database/query.inc
@@ -1179,6 +1179,7 @@ class DatabaseCondition implements QueryConditionInterface, Countable {
}
$operator += $operator_defaults;
+ $placeholders = array();
if ($condition['value'] instanceof SelectQuery) {
$placeholders[] = (string)$condition['value'];
$arguments += $condition['value']->arguments();
@@ -1189,7 +1190,6 @@ class DatabaseCondition implements QueryConditionInterface, Countable {
elseif (!$operator['delimiter']) {
$condition['value'] = array($condition['value']);
}
- $placeholders = array();
if ($operator['use_value']) {
foreach ($condition['value'] as $value) {
$placeholder = ':db_condition_placeholder_' . $next_placeholder++;
diff --git a/modules/simpletest/tests/database_test.test b/modules/simpletest/tests/database_test.test
index 6256ff22c..1ecf9c536 100644
--- a/modules/simpletest/tests/database_test.test
+++ b/modules/simpletest/tests/database_test.test
@@ -1365,6 +1365,29 @@ class DatabaseSelectSubqueryTestCase extends DatabaseTestCase {
}
/**
+ * Test that we can use a subquery in a FROM clause.
+ */
+ function testConditionSubquerySelect() {
+ // Create a subquery, which is just a normal query object.
+ $subquery = db_select('test_task', 'tt');
+ $subquery->addField('tt', 'pid', 'pid');
+ $subquery->condition('tt.priority', 1);
+
+ // Create another query that joins against the virtual table resulting
+ // from the subquery.
+ $select = db_select('test_task', 'tt2');
+ $select->addField('tt2', 'task');
+ $select->condition('tt2.pid', $subquery, 'IN');
+
+ // The resulting query should be equivalent to:
+ // SELECT tt2.name
+ // FROM test tt2
+ // WHERE tt2.pid IN (SELECT tt.pid AS pid FROM test_task tt WHERE tt.priority=1)
+ $people = $select->execute()->fetchCol();
+ $this->assertEqual(count($people), 5, t('Returned the correct number of rows.'));
+ }
+
+ /**
* Test that we can use a subquery in a JOIN clause.
*/
function testJoinSubquerySelect() {