? -x-681760.patch
? 1001242-exists-with-tests.patch
? 681760-node-query_1.patch
? 986296-21-node-type-status.patch
? 993026-sort-nodes-with-test.patch
? authorize_remove_check_plain.patch
? tablesort_sort_993026.patch
? x100.patch
? sites/fullpreview
? sites/all/modules/ctools
? sites/all/modules/delay
? sites/all/modules/devel
? sites/all/modules/domain
? sites/all/modules/domain_prefix
? sites/all/modules/domain_user
? sites/all/modules/domain_views
? sites/all/modules/example
? sites/all/modules/fullpreview
? sites/all/modules/fullpreview.zip
? sites/all/modules/mega_menu
? sites/all/modules/pathauto
? sites/all/modules/pimp
? sites/all/modules/rainbow
? sites/all/modules/role_access
? sites/all/modules/role_edit
? sites/all/modules/secure_permissions
? sites/all/modules/styleguide
? sites/all/modules/token
? sites/all/modules/views
? sites/all/modules/workbench
? sites/all/modules/workbench_access
? sites/all/themes/austin
? sites/all/themes/zen
? sites/default/files
Index: includes/database/query.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/database/query.inc,v
retrieving revision 1.59
diff -u -p -r1.59 query.inc
--- includes/database/query.inc	15 Dec 2010 06:52:54 -0000	1.59
+++ includes/database/query.inc	18 Dec 2010 16:16:33 -0000
@@ -77,6 +77,28 @@ interface QueryConditionInterface {
   public function isNotNull($field);
 
   /**
+   * Sets a condition that the specified subquery matches one or more rows.
+   *
+   * @param $subquery
+   *   The query object corresponding to a subquery.
+   *
+   * @return QueryConditionInterface
+   *   The called object.
+   */
+  public function exists($subquery);
+
+  /**
+   * Sets a condition that the specified subquery matches no rows.
+   *
+   * @param $subquery
+   *   The query object corresponding to a subquery.
+   *
+   * @return QueryConditionInterface
+   *   The called object.
+   */
+  public function notExists($subquery);
+
+  /**
    * Gets a complete list of all conditions in this conditional clause.
    *
    * This method returns by reference. That allows alter hooks to access the
@@ -749,6 +771,22 @@ class DeleteQuery extends Query implemen
   }
 
   /**
+   * Implements QueryConditionInterface::exists().
+   */
+  public function exists($subquery) {
+    $this->query->exists($subquery);
+    return $this;
+  }
+
+  /**
+   * Implements QueryConditionInterface::notExists().
+   */
+  public function notExists($subquery) {
+    $this->query->notExists($subquery);
+    return $this;
+  }
+
+  /**
    * Implements QueryConditionInterface::compile().
    */
   public function compile(DatabaseConnection $connection, QueryPlaceholderInterface $queryPlaceholder = NULL) {
@@ -947,6 +985,22 @@ class UpdateQuery extends Query implemen
   }
 
   /**
+   * Implements QueryConditionInterface::exists().
+   */
+  public function exists($subquery) {
+    $this->query->exists($subquery);
+    return $this;
+  }
+
+  /**
+   * Implements QueryConditionInterface::notExists().
+   */
+  public function notExists($subquery) {
+    $this->query->notExists($subquery);
+    return $this;
+  }
+
+  /**
    * Implements QueryConditionInterface::conditions().
    */
   public function &conditions() {
@@ -1439,6 +1493,23 @@ class MergeQuery extends Query implement
   }
 
   /**
+   * Implements QueryConditionInterface::exists().
+   */
+  public function exists($subquery) {
+    $this->query->exists($subquery);
+    return $this;
+  }
+
+  /**
+   * Implements QueryConditionInterface::notExists().
+   */
+  public function notExists($subquery) {
+    $this->query->notExists($subquery);
+    return $this;
+  }
+
+
+  /**
    * Implements QueryConditionInterface::compile().
    */
   public function compile(DatabaseConnection $connection, QueryPlaceholderInterface $queryPlaceholder = NULL) {
@@ -1615,6 +1686,20 @@ class DatabaseCondition implements Query
   }
 
   /**
+   * Implements QueryConditionInterface::exists().
+   */
+  public function exists($subquery) {
+    return $this->query->exists($subquery);
+  }
+
+  /**
+   * Implements QueryConditionInterface::notExists().
+   */
+  public function notExists($subquery) {
+    return $this->query->notExists($subquery);
+  }
+
+  /**
    * Implements QueryConditionInterface::conditions().
    */
   public function &conditions() {
Index: includes/database/select.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/database/select.inc,v
retrieving revision 1.55
diff -u -p -r1.55 select.inc
--- includes/database/select.inc	29 Nov 2010 04:45:10 -0000	1.55
+++ includes/database/select.inc	18 Dec 2010 16:16:34 -0000
@@ -613,6 +613,16 @@ class SelectQueryExtender implements Sel
     return $this;
   }
 
+  public function exists($subquery) {
+    $this->query->exists($subquery);
+    return $this;
+  }
+
+  public function notExists($subquery) {
+    $this->query->notExists($subquery);
+    return $this;
+  }
+
   public function compile(DatabaseConnection $connection, QueryPlaceholderInterface $queryPlaceholder = NULL) {
     return $this->condition->compile($connection, isset($queryPlaceholder) ? $queryPlaceholder : $this);
   }
@@ -1022,6 +1032,16 @@ class SelectQuery extends Query implemen
     return $this;
   }
 
+  public function exists($subquery) {
+    $this->query->exists($subquery);
+    return $this;
+  }
+
+  public function notExists($subquery) {
+    $this->query->notExists($subquery);
+    return $this;
+  }
+
   public function compile(DatabaseConnection $connection, QueryPlaceholderInterface $queryPlaceholder = NULL) {
     return $this->where->compile($connection, isset($queryPlaceholder) ? $queryPlaceholder : $this);
   }
Index: modules/simpletest/tests/database_test.test
===================================================================
RCS file: /cvs/drupal/drupal/modules/simpletest/tests/database_test.test,v
retrieving revision 1.105
diff -u -p -r1.105 database_test.test
--- modules/simpletest/tests/database_test.test	15 Dec 2010 06:52:54 -0000	1.105
+++ modules/simpletest/tests/database_test.test	18 Dec 2010 16:16:46 -0000
@@ -1665,6 +1665,49 @@ class DatabaseSelectSubqueryTestCase ext
 
     $this->assertEqual(count($people), 2, t('Returned the correct number of rows.'));
   }
+
+  /**
+   * Test EXISTS and NOT EXISTS subquery conditionals on SELECT statements.
+   */
+  function testExistsSubquerySelect() {
+    // Put George into {test_people}.
+    db_insert('test_people')
+      ->fields(array(
+        'name' => 'George',
+        'age' => 27,
+        'job' => 'Singer',
+      ))
+      ->execute();
+    // Base query to {test}.
+    $query = db_select('test', 't')
+      ->fields('t', array('name'));
+    // Subquery to {test_people}.
+    $subquery = db_select('test_people', 'tp')
+      ->fields('tp', array('name'))
+      ->condition('name', 'George');
+    $query->exists($subquery);
+    $result = $query->execute();
+
+    // Ensure that we got the right record.
+    $record = $result->fetch();
+    $this->assertEqual($record->name, 'George', t('Fetched name is correct using EXISTS query.'));
+
+    // Base query to {test}.
+    $query = db_select('test', 't')
+      ->fields('t', array('name'));
+    // Subquery to {test_people}.
+    $subquery = db_select('test_people', 'tp')
+      ->fields('tp', array('name'))
+      ->condition('name', 'George');
+    $query->notExists($subquery);
+    $result = $query->execute();
+
+    // Ensure that we got the right record.
+    $record = $result->fetch();
+    $this->assertFalse($record, t('NOT EXISTS query returned no results.'));
+
+  }
+
 }
 
 /**
