Index: views_query.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/views/views_query.inc,v
retrieving revision 1.51.2.11
diff -u -u -p -r1.51.2.11 views_query.inc
--- views_query.inc	12 Apr 2007 15:18:59 -0000	1.51.2.11
+++ views_query.inc	13 Jun 2007 19:25:00 -0000
@@ -65,7 +65,7 @@ function _views_build_query(&$view, $arg
   $info['countquery'] = $query->query(true);
   $info['summary'] = $summary;
   $info['level'] = $level;
-  $info['args'] = $query->where_args;
+  $info['args'] = array_merge($query->subquery_args, $query->where_args);
 
   return $info;
 
@@ -289,11 +289,13 @@ class _views_query {
     $this->primary_table = $primary_table;
     $this->primary_field = $primary_field;
     $this->joins = array();
+    $this->subquery = array();
     $this->where = array();
     $this->orderby = array();
     $this->groupby = array();
     $this->tables = array();
     $this->where_args = array();
+    $this->subquery_args = array();
     $this->use_alias_prefix = $alias_prefix;
     // Joins care about order, so we put our tables in a queue to make sure
     // the order is correct.
@@ -442,6 +444,12 @@ class _views_query {
     }
   }
 
+  function add_subquery($query, $args, $joininfo, $alias) {
+    $this->subquery[$alias] = $query;
+    $this->joins[$alias][0] = $joininfo;
+    $this->subquery_args = array_merge($this->subquery_args, $args);
+  }
+
   /*
    * This function will add a table to the query.
    *
@@ -580,6 +588,18 @@ class _views_query {
       $this->no_distinct = TRUE;
     }
 
+    // Add the subqueries to the query via joins.
+    foreach ($this->subquery as $alias => $query) {
+      $joininfo = $this->joins[$alias][0];
+
+      $left_table_alias = isset($joininfo['left']['alias']) ? $joininfo['left']['alias'] : $tinfo['alias_prefix'];
+      $left_table_alias .= $joininfo['left']['table'];
+
+      $join_type = $joininfo['type'] == 'inner' ? 'INNER' : 'LEFT';
+      $joins .= " $join_type JOIN (" . $query . ") $alias ON " . $left_table_alias .".".
+        $joininfo['left']['field'] . " = $alias." . $joininfo['right']['field'];
+    }
+
     // Add all the tables to the query via joins. We assume all LEFT joins.
     foreach ($this->tablequeue as $tinfo) {
       $table = $tinfo['table'];
