=== modified file 'includes/database/query.inc'
--- includes/database/query.inc	2009-10-26 04:46:37 +0000
+++ includes/database/query.inc	2009-11-23 06:47:21 +0000
@@ -925,6 +925,7 @@ class DeleteQuery extends Query implemen
     $query = 'DELETE FROM {' . $this->connection->escapeTable($this->table) . '} ';
 
     if (count($this->condition)) {
+
       $this->condition->compile($this->connection, $this);
       $query .= "\nWHERE " . $this->condition;
     }
@@ -1234,6 +1235,8 @@ class DatabaseCondition implements Query
         }
         else {
           // It's a structured condition, so parse it out accordingly.
+          // Note that $condition['field'] will only be an object for a dependent
+          // DatabaseCondition object, not for a dependent subquery.
           if ($condition['field'] instanceof QueryConditionInterface) {
             // Compile the sub-condition recursively and add it to the list.
             $condition['field']->compile($connection, $queryPlaceholder);
@@ -1257,7 +1260,8 @@ class DatabaseCondition implements Query
             $operator += $operator_defaults;
 
             $placeholders = array();
-            if ($condition['value'] instanceof SelectQuery) {
+            if ($condition['value'] instanceof SelectQueryInterface) {
+              $condition['value']->compile($connection, $queryPlaceholder);
               $placeholders[] = (string)$condition['value'];
               $arguments += $condition['value']->arguments();
             }
@@ -1275,7 +1279,6 @@ class DatabaseCondition implements Query
               }
             }
             $condition_fragments[] = ' (' . $condition['field'] . ' ' . $operator['operator'] . ' ' . $operator['prefix'] . implode($operator['delimiter'], $placeholders) . $operator['postfix'] . ') ';
-
           }
         }
       }

=== modified file 'modules/simpletest/tests/database_test.test'
--- modules/simpletest/tests/database_test.test	2009-10-26 04:46:37 +0000
+++ modules/simpletest/tests/database_test.test	2009-11-23 06:43:13 +0000
@@ -945,6 +945,27 @@ class DatabaseDeleteTruncateTestCase ext
   }
 
   /**
+   * Confirm that we can use a subselect in a delete successfully.
+   */
+  function testSubselectDelete() {
+    $num_records_before = db_query('SELECT COUNT(*) FROM {test_task}')->fetchField();
+    $pid_to_delete = db_query("SELECT * FROM {test_task} WHERE task = 'sleep'")->fetchField();
+
+    $subquery = db_select('test', 't')
+      ->fields('t', array('id'))
+      ->condition('t.id', array($pid_to_delete), 'IN');
+    $delete = db_delete('test_task')
+      ->condition('task', 'sleep')
+      ->condition('pid', $subquery, 'IN');
+
+    $num_deleted = $delete->execute();
+    $this->assertEqual($num_deleted, 1, t("Deleted 1 record."));
+
+    $num_records_after = db_query('SELECT COUNT(*) FROM {test_task}')->fetchField();
+    $this->assertEqual($num_records_before, $num_records_after + $num_deleted, t('Deletion adds up.'));
+  }
+
+  /**
    * Confirm that we can delete a single record successfully.
    */
   function testSimpleDelete() {

